Events Catalog

Every webhook event Tonder sends, grouped as in the dashboard, with the payload format of each group.

Each event is named <operation>_<status> and travels in the payload's event_type field. The groups below match the endpoint form in Developers › Webhooks, and each group has a fixed payload format. Which groups apply to you depends on how you integrated Tonder; the format is not chosen per endpoint. The conceptual model is in the Webhooks model.

Formats

CharacteristicShort (API Direct · Lite SDK 2.0 · Frictionless · Hosted Checkout 2.0)Long (mobile SDK · Legacy)
Root structureTop-level fieldsEverything inside data{}
Statusstatus: Pending / Successtransaction_status: Pending / Success
Event indicatorevent_type: payment_Pendingevent: created / confirmed
Order referenceclient_referencemetadata.external_id / order_id

Payments — API Direct (Short)

API Direct payments and refunds. Hosted Checkout 2.0 processes payments through the Direct API, so a payment made on the hosted page sends these events too.

event_typeMeaning
payment_PendingAn API Direct payment changed to Pending.
payment_ProcessingAn API Direct payment changed to Processing.
payment_AuthorizedAn API Direct payment changed to Authorized.
payment_CapturedAn API Direct payment changed to Captured.
payment_CompletedAn API Direct payment changed to Completed.
payment_SuccessAn API Direct payment changed to Success.
payment_DeclinedAn API Direct payment changed to Declined.
payment_FailedAn API Direct payment changed to Failed.
payment_CancelledAn API Direct payment changed to Cancelled.
payment_ExpiredAn API Direct payment changed to Expired.
payment_ReturnedAn API Direct payment changed to Returned.
refund_PendingAn API Direct refund changed to Pending.
refund_SuccessAn API Direct refund changed to Success.
refund_DeclinedAn API Direct refund changed to Declined.
refund_FailedAn API Direct refund changed to Failed.
refund_CancelledAn API Direct refund changed to Cancelled.

A payment goes through only the states its method and flow use, so subscribe to the ones your integration acts on. On SPEI Success, the payload adds sender info: sender_name, sender_clabe, sender_bank, among others. Argentina's QR and bank-transfer payments use these same events; their payer fields are listed in Argentina.

A payment_Success event:

{
  "id": "bf370a48-ffcf-4fbe-bab9-ecb791b0b684",
  "event_type": "payment_Success",
  "operation_type": "payment",
  "status": "Success",
  "amount": "500.00",
  "currency": "MXN",
  "country": "MX",
  "client_reference": "ORD-001",
  "transaction_id": "1464",
  "payment_method_type": "card",
  "decline_code": null,
  "decline_reason": null,
  "created": "2026-10-20T18:52:10Z",
  "metadata": { "external_id": "ORD-001" },
  "action": "MODIFY"
}
  • id is the transaction id the API returned when you created the payment (/process/); use it to match the webhook to your order.
  • client_reference and metadata are the values you sent when creating the transaction.
  • Payloads can also carry fields that identify the institution that processed the transaction. Don't build logic on them.

There are no session-level webhooks: session.created, session.completed and session.expired are not sent. Follow a session with the payment events or with Get a session.

Checkout sessions — Hosted & SDK (Long)

Events from earlier integrations — SDK 1.0, the previous Hosted Checkout flow and the withdrawals API v1/v2. The legacy_ prefix identifies them, and the payloads are in Legacy webhooks.

event_typeMeaning
legacy_payment_PendingA Hosted / SDK payment changed to Pending.
legacy_payment_SuccessA Hosted / SDK payment changed to Success.
legacy_payment_DeclinedA Hosted / SDK payment changed to Declined.
legacy_payment_ExpiredA Hosted / SDK payment changed to Expired.
legacy_payment_FailedA Hosted / SDK payment changed to Failed.
legacy_deposit_createdA SPEI deposit was created.
legacy_deposit_confirmedA SPEI deposit was confirmed.
legacy_deposit_expiredA SPEI deposit expired.
legacy_refund_PendingA refund changed to Pending.
legacy_refund_SuccessA refund changed to Success.
legacy_refund_FailedA refund changed to Failed.
legacy_withdrawal_PendingA withdrawal changed to Pending.
legacy_withdrawal_ProcessingA withdrawal changed to Processing.
legacy_withdrawal_SentToProviderA withdrawal was sent to the executing institution.
legacy_withdrawal_OnHoldA withdrawal changed to OnHold.
legacy_withdrawal_SuccessA withdrawal changed to Success.
legacy_withdrawal_FailedA withdrawal changed to Failed.
legacy_withdrawal_DeclinedA withdrawal changed to Declined.
legacy_withdrawal_ReturnedA withdrawal changed to Returned.
legacy_withdrawal_CanceledA withdrawal changed to Canceled.

Withdrawals (Long)

event_typeMeaning
withdrawal_PendingA withdrawal changed to Pending.
withdrawal_SuccessA withdrawal changed to Success.
withdrawal_DeclinedA withdrawal changed to Declined.
withdrawal_FailedA withdrawal changed to Failed.
withdrawal_CanceledA withdrawal changed to Canceled.
withdrawal_ReturnedA withdrawal changed to Returned.

withdrawal_Canceled is spelled with one L, unlike payment_Cancelled and refund_Cancelled. Match the event names exactly. Without Webhooks 2.0, withdrawals emit five events and none for a cancellation.

A withdrawal sends the pending event and then its terminal one; withdrawal_Returned comes on top, when the receiving bank returns the funds after Success. The payload comes in one of two formats, set by your account's configuration: a flat payload with the same shape as the Short payment format (status: Pending, transfer_method_type instead of payment_method_type), or an extended payload that nests the full withdrawal record under withdrawal{} with the status in the internal names (PAID_FULL). Both, with examples, in Withdrawals.

Other

event_typeMeaning
endpoint.testA test event sent from the dashboard with Send test. It arrives even if the endpoint doesn't subscribe to it.

The catalog through the API

GET /v1/event-types returns the catalog with each event's description, plus the retry policy — see Webhooks API.

Use metadata.external_id as your correlation key — it's present in both formats and across all events.

Next steps

Was this page helpful?

On this page