Skip to main content
Every webhook Ionic sends has the same outer JSON shape — the envelope. The fields below are stable across all event types; the event-specific data lives under data.object.
Abbreviated for clarity. See the event catalog for a complete example payload for every event type.

Fields

data.object is the resource snapshot

data.object is the same shape the API returns from GET /v1/<resource>/{id} for that resource — a checkout session, payment intent, refund, invoice, subscription, credit note, or customer. Whatever fields you’d read from the API, you read here, with one difference: buyer-frontend secrets are stripped (for example client_secret), because the webhook is delivered server-to-server and those values are only meant for the browser. This means you usually don’t need a follow-up API call — the snapshot carries everything. When you do need the current state (because ordering isn’t guaranteed), fetch the resource by its id.
The snapshot is taken when the event is created. If the resource changed afterward, data.object contains the earlier state. Retrieve the resource by id when you need its latest status.

operations

operations lists the actions that make sense on the resource in its current state — the same verbs the API exposes. For payment_intent.succeeded it’s ["refund"]; for payment_intent.payment_failed it’s ["retry_with_new_payment_method"]; for terminal events it’s []. Treat it as a hint for your UI or automation, not as an exhaustive permission list.

api_version

Each endpoint pins an api_version when you create it. Every event delivered to that endpoint renders data.object in that version, so a schema change to a resource won’t silently alter the payloads your handler already parses. To adopt a newer version, create a new endpoint (or update the existing one) with the version you want.