Payment events
Payment event payloads use this envelope:tokenize: true), data.token carries it as { "id": "vt_...", "expirationDate": "...", "tokenCreationReference": "..." }, the same object as the purchase response. A card on an asynchronous payment (the provider answered pending) is saved when the payment settles. If that happens after the webhook was sent, data.token is absent and you receive a token.created event instead.
Webhook event names use
refused where the synchronous API response status field uses declined, and payment.<status> for terminal states such as expired. Match on the event string, not on substring parsing.Subscription events
Subscription event payloads use a slightly different envelope —subscription_id is a top-level field and data carries event-specific detail:
Saved card events
Saved card events tell you when a token is created for an asynchronous payment, and when a token you stored stops being usable. See Token lifecycle for the retention rules.Payment link events
A payment link sends its own events in addition to the payment events above. A payment made on a link still sends its usualpayment.* events; the payment_link.* events describe what happened to the link itself. Use data.payment_link_id to identify the link, and data.payment_id or data.order_code to match the payment.
Payment link events use the same envelope as payment events:
Link events and the payment events for the same payment are separate deliveries and can arrive in either order. Match them on
data.order_code or data.payment_id rather than on arrival order.
