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.
