Skip to main content

Lifecycle

Only one of these should release goods.

Events

payment_confirmed — fulfil here

The payment reached finality and is irreversible. This is your fulfilment trigger.Connect rail: the deposit transaction reached required confirmations. Deposit rail: the inbound transfer confirmed and our sweep into your pool confirmed.
amount is in token base units. On most chains these tokens use 6 decimals, so 49000000 is 49.00 — but decimals vary by chain (BNB Chain is 18). Scale by the payment’s tokenDecimals rather than assuming 6.
A customer started checkout and an intent exists. Nothing has been paid.Useful for abandonment analytics. Do not treat as a sale.
A transaction was broadcast but has not reached finality.Good for a “confirming…” state. Not safe to ship on — it can still fail or be reorganised. Finality.
The attempt failed. Nothing was taken from the customer.Show a retry option.
The quote window elapsed with no payment.
Expiry locks the price, not the address. A customer can still pay afterwards and the money still arrives. Don’t cancel the order irreversibly on this event — mark it lapsed and wait.
The payment was refused by a compliance check. Deliberately non-specific, to avoid coaching evasion.Only fires if you’ve enabled payer screening. Sanctions.
A payout completed and funds moved to your payout address.Useful for reconciliation and accounting. Not customer-facing.

Handling them

Ignore events you don’t recognise rather than erroring. New event types can be added, and a handler that 500s on an unknown type will look like an outage to our retry logic.

Deposit-rail statuses

The deposit rail carries richer per-invoice states than the events above. They surface in your dashboard and the status API: What to do about each.