Skip to main content
WEBHOOK

Headers

x-checkoutvia-signature
string
required

t=<unix seconds>,v1=<hex>. v1 is HMAC-SHA256(secret, "<t>.<raw body>") with the endpoint's whsec_… secret. Verify against the raw request bytes, before any JSON parse.

Body

application/json

The body of a checkout.status_changed delivery. It says that something changed, not what the checkout now looks like: fetch GET /v1/checkouts/{checkoutId} for the state.

type
string
required

The only event type today. Switch on it anyway and ignore what you do not recognise.

Allowed value: "checkout.status_changed"
checkoutId
string<uuid>
required
status
enum<string>
required

succeeded, failed and cancelled are terminal; nothing leaves them.

Available options:
queued,
running,
awaiting_user_action,
succeeded,
failed,
cancelled
failureReason
enum<string> | null
required

Set only when status is failed.

Available options:
max_cost_exceeded,
user_cancelled,
user_action_expired,
automation_failed
createdAt
string<date-time>
required

When the transition was dispatched, stamped once — a retried delivery carries the original event time.

subject
string

Your own id for the end user this checkout is for. Absent when the checkout is not tagged to one.

An endpoint is tenant-wide — it receives every end user's transitions — so this is what lets a delivery be routed to the right person without a callback or a map of your own.

Example:

"user_a91f"

Response

Acknowledged. Return quickly and do the work out of band — anything slower than 10 seconds is treated as a failure and retried.