Events by product
Payment routes
A payment route sends two webhooks, both about the route’s deposit details.
For a Partner-Managed customer who hasn’t completed KYC, Rain creates the
route as
pending with no deposit address. Wait for paymentRoute.created
before you share deposit details with that customer. For a KYC-approved
Rain-Managed customer, the create response already returns the active route.
Once a sender funds the route, the deposit becomes a transfer, and the
transfer webhooks take over.
Transfers
Every payment route deposit and every quoted transfer produces onetransfer transaction, and
the three transactionTransfer events report its whole life.
transactionTransfer amounts are decimal strings in the currency’s major
unit, such as "1000.00". Card spend amounts are integers in cents. Don’t
share one amount parser between the two.Transfer lifecycle
A transfer emits onecreated event, any number of updated events, and at
most one completed event. An updated event can still follow completed: a
bank return after settlement arrives as updated with status refunded. The
transfer.status field tells you which stage you’re in.
The diagram shows a payment route flow. For a quoted transfer, created fires
when you call POST /transfers, before the sender’s funds arrive.
Status and event map
Each status arrives with a specific event, so you can branch on the event first and the status second.
Not every transfer passes through every status. Only a transfer that is still
waiting for funds can expire, and only some transfers pass through
pending_review.
Webhooks by flow
The same three events cover each money movement flow. What differs is the trigger forcreated.
Handle transfer webhooks
1
Subscribe to the events
Add your endpoint in the developer dashboard and subscribe to
transactionTransfer. See Set up webhooks.2
Key your records on the transaction ID
Use
body.id as the transfer’s identifier. Every event for one transfer
carries the same id, and the transfer object is the full current state.3
Branch on status
Update your record from
transfer.status, using the
status and event map above.4
Make the handler idempotent
Rain can retry or reorder events. Ignore an event whose status is older than
the one you stored, and use
transfer.updatedAt to compare. See
Handle event ordering.type=transfer to read the current state.
What’s next
Transaction Events
Every field and payload for the
transactionTransfer events.Webhook Delivery
Signatures, retries, idempotency, and ordering for every webhook.
Refund Reasons
What each
refundReason means and how to respond to it.Transfers
Create quoted transfers and see the statuses they pass through.