Checkout webhook events
Checkout webhooks use the same Svix application as custodial events. See Checkout links & sessions for the payment flow.
Two payload shapes
Most checkout events use an envelope built at send time:
The data object always includes the fields below (plus event-specific
extras). Amounts are human token units (same as the checkout session), not
wei or lamports.
Risk / quarantine events use a flat payload (no envelope):
Event catalog
Several checkout.* types exist in the API enum for future lifecycle hooks
(for example checkout.session.created, checkout.payment.detected) but are
not emitted today. Subscribe only to the types above unless release notes
say otherwise.
Test events
Send a sample of any event in the catalog above from Dashboard → Webhooks → Send test event. Test payloads have the real shape and placeholder data, and they don’t create sessions or move funds. They carry a test flag:
- Envelope events get
"is_test": trueat the top level, next toidandtype. - Flat risk events (
checkout.flagged,checkout.flagged.platform_held,checkout.flagged.auto_returned) get"isTest": true.
Real events never include the flag, so a missing flag means the event is real.
Shared data example
The following data block is representative for envelope events (payment
completed shown; other events reuse the same core fields):
platform_fee and net_credited appear only on checkout.payment.completed
and checkout.payment.overpaid. They are estimated from org checkout config at
payment time (fee is accrued to the monthly platform bill, not deducted on-chain
from the sweep).
checkout.payment.overpaid
Same envelope as completed. type is checkout.payment.overpaid and
overpayment_amount is greater than "0".
checkout.wrong_token_received
Same core data fields, plus:
checkout.refund.initiated
Extra fields merged into data:
(checkoutId duplicates checkout_id — both are present in the payload
today.)
checkout.refund.completed
checkout.refund.failed
checkout.flagged.accepted / checkout.flagged.rejected
Standard envelope and shared data fields. type is
checkout.flagged.accepted or checkout.flagged.rejected. Settlement or
refund is queued after the webhook.
Flat risk events
checkout.flagged (merchant review):
checkout.flagged.platform_held — same shape; status is
FLAGGED_PLATFORM_HELD.
checkout.flagged.auto_returned — same shape; status is REFUNDING
(session moves to refund after the quarantine deadline). The checkout row is
marked FLAGGED_AUTO_RETURNED in the dashboard, but that value is not sent in
this webhook.
riskFlag is the session’s stored risk metadata; fields vary by scan outcome.