Base structure
Every webhook shares the same envelope:Event types
Charges and payouts both create transactions, so a charge integration will mostly see
transaction_created and transaction_updated. Payout flows also emit the payout_* pair —
see Sending payouts for those payloads.Transaction types
Thetype field inside data tells you what kind of movement the transaction represents:
Refund status updates include
originalTransactionId in data, linking the refund back to the
deposit it reverses.Status values
Fields inside data
transaction_updated carries the richest payload. Optional fields appear only when relevant:
Reading events safely
Do not assume ordering
Do not assume ordering
Retries and network conditions mean a
successful update can arrive before the
transaction_created event. Key on transactionId and treat terminal statuses as final —
never let a late pending overwrite a successful.Expect fields to be absent
Expect fields to be absent
Optional fields are omitted, not sent as
null. Read defensively rather than assuming a shape.Handle unknown events gracefully
Handle unknown events gracefully
New event types may be added. Return
2xx for events you do not recognise rather than
erroring, which would trigger pointless retries.Transaction events in detail
Full example payloads for every transaction event.