Event types
Everything we will tell you about, and the two that should reach a person rather than a log.
Subscribe to what you need rather than everything — an endpoint that receives
events it ignores is an endpoint whose failures you stop noticing. The live
list is at GET /v1/capabilities.
Payments
The ones most integrations act on.
| Event | Sent when |
|---|---|
payment.created | A payment exists and is waiting for the buyer. |
payment.settling | The buyer submitted a transaction. Not confirmed. |
payment.settled | Seen on chain, not yet at the required depth. |
payment.completed | Confirmed. This is the one to ship on. |
payment.underpaid | Less arrived than required. |
payment.overpaid | More arrived at a deposit address than was required. It was forwarded to you in full; the excess is yours to return. (A wallet payment cannot overpay: the router returns the excess in the same transaction.) |
payment.expired | Nobody paid in time. |
payment.cancelled | Cancelled before payment. |
payment.submission_failed | The transaction the buyer reported reverted, or was not a payment. The checkout is open again for them to retry. |
payment.failed | The payment failed and will not complete. |
payment.settlement_failed | Settlement could not be completed. |
payment.voided | An authorization was released without capture. |
payment.reorged | A confirmed settlement was undone by a chain reorganisation. |
payment.authorized | The buyer's funds are held in escrow. Nothing has reached you yet. |
payment.authorization_expiring | A hold is about to expire. Capture it or it goes back. |
payment.authorization_expired | A hold expired and the buyer has their money back. Nothing was charged. |
payment.escrow_operation_failed | A capture or void was submitted and did not land. Nothing moved; try again. |
payment.captured | An escrow authorization was captured in full. |
payment.partially_captured | Part of an escrow authorization was captured. |
Money that arrives when it was not expected
Expiring or cancelling a payment does not reach into the buyer's wallet. An order they signed before the deadline can still be mined, and a transfer to a deposit address can still land. We never pretend it did not happen.
| Event | What to do |
|---|---|
payment.late_settled | The funds reached your address after the payment expired or was cancelled. The payment is now settled. Fulfil the order, or refund the buyer. (A transaction mined before the deadline but noticed after it is an ordinary payment.settled, not this.) |
payment.late_deposit | Funds arrived at the deposit address of a payment that had already closed. Unless already forwarded to you, they go back to the buyer when the address expires. |
payment.unsupported_asset_received | A deposit address received a token the payment did not ask for. Sent once; the token is returned to the buyer after expiry. |
payment.return_failed | A deposit could not be returned to the buyer after several attempts — a frozen address, a chain that stayed down. They are still owed it, and it is the one case that needs a decision from you. See Returns in the panel. |
payment.deposit_returned | Whatever was left at an expired deposit address was sent back to the buyer's refund address. Carries the transaction hash — useful when they ask. |
The two worth waking someone for
Everything above is bookkeeping. These two mean something happened that a person should look at.
| Event | Why |
|---|---|
payment.settlement_rejected | A transaction carried one of your payment ids but disagreed with that payment's terms — a different address, a different token, or too little. Nothing was credited. It means somebody tried. |
payment.duplicate_settlement | Money arrived for a payment that had already settled. It is yours to return, and nobody will chase you for it. |
Refunds
| Event | Sent when |
|---|---|
refund.requested | A refund was requested and is owed. |
refund.fulfilment_pending | You submitted a transaction; we are verifying it. |
refund.fulfilment_failed | That transaction reverted, was not a matching transfer, predates the payment, or never mined. The refund is still owed. |
refund.completed | Verified on chain. The buyer has their money. |
refund.sla_breached | A refund passed its deadline. Repeated daily until it is sent. |
Subscriptions
| Event | Sent when |
|---|---|
subscription.created | Created. Nothing is billable yet. |
subscription.activated | The buyer signed, or paid the first cycle by link. It is now billing. |
subscription.cycle_due | A cycle is due on a link-collected subscription. |
subscription.cycle_charged | A cycle was charged against the buyer's permission. |
subscription.cycle_paid | The buyer paid a link-collected cycle. |
subscription.past_due | A charge failed and is retried at 12h, 24h, 72h and 168h — or a link cycle went unpaid; three in a row cancel it. |
subscription.cancel_scheduled | The buyer cancelled from their manage link. It will not renew — keep serving them until current_period_end. |
subscription.canceled | Stopped now — by you, by the buyer from their manage link, by us after retries, or by the buyer revoking on chain. canceled_by says which. |
subscription.ended | Reached its end date. |
Account
| Event | Sent when |
|---|---|
account.network_fees_owed | Network fees we paid for your cancellations, expired holds and returns passed the point where they are worth settling. They come off a future settlement. |
destination.added | A settlement destination was added. Every owner is emailed. |
destination.verified | A destination proved ownership. |
compliance.payment_refused | A payment was refused on screening. |
webhook.test | A test event you asked for. |
Ordering and delivery
At-least-once, and not guaranteed in order. A retried
payment.settling can arrive after the
payment.completed that followed it. Deduplicate on
id, treat each event as a statement about an object rather than a
step in a sequence, and re-read the object if the order matters.