Webhooks

Catálogo de eventos

Todos los eventos de webhook que envía Tonder, agrupados como en el dashboard, con el formato de payload de cada grupo.

Cada evento se llama <operación>_<estado> y viaja en el campo event_type del payload. Los grupos de abajo coinciden con el formulario de endpoint de Desarrolladores › Webhooks, y cada grupo tiene un formato de payload fijo. Qué grupos te aplican depende de cómo integraste Tonder; el formato no se elige por endpoint. El modelo conceptual está en el Modelo de webhooks.

Formatos

CaracterísticaShort (API Direct · Lite SDK 2.0 · Frictionless · Hosted Checkout 2.0)Long (SDK móvil · Legacy)
Estructura raízCampos de nivel superiorTodo dentro de data{}
Estadostatus: Pending / Successtransaction_status: Pending / Success
Indicador de eventoevent_type: payment_Pendingevent: created / confirmed
Referencia de ordenclient_referencemetadata.external_id / order_id

Pagos — API Direct (Short)

Pagos y reembolsos de API Direct. Hosted Checkout 2.0 procesa los pagos a través de API Direct, así que un pago hecho en la página alojada también envía estos eventos.

event_typeSignificado
payment_PendingUn pago de API Direct cambió a Pending.
payment_ProcessingUn pago de API Direct cambió a Processing.
payment_AuthorizedUn pago de API Direct cambió a Authorized.
payment_CapturedUn pago de API Direct cambió a Captured.
payment_CompletedUn pago de API Direct cambió a Completed.
payment_SuccessUn pago de API Direct cambió a Success.
payment_DeclinedUn pago de API Direct cambió a Declined.
payment_FailedUn pago de API Direct cambió a Failed.
payment_CancelledUn pago de API Direct cambió a Cancelled.
payment_ExpiredUn pago de API Direct cambió a Expired.
payment_ReturnedUn pago de API Direct cambió a Returned.
refund_PendingUn reembolso de API Direct cambió a Pending.
refund_SuccessUn reembolso de API Direct cambió a Success.
refund_DeclinedUn reembolso de API Direct cambió a Declined.
refund_FailedUn reembolso de API Direct cambió a Failed.
refund_CancelledUn reembolso de API Direct cambió a Cancelled.

Un pago pasa solo por los estados que usa su método y su flujo, así que suscríbete a los que tu integración atiende. En SPEI Success, el payload añade datos del remitente: sender_name, sender_clabe, sender_bank, entre otros. Los pagos con QR y por transferencia bancaria de Argentina usan estos mismos eventos; sus datos del pagador están en Argentina.

Un evento payment_Success:

{
  "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 es el identificador de la transacción que te devolvió la API al crear el pago (/process/); úsalo para relacionar el webhook con tu pedido.
  • client_reference y metadata son los datos que enviaste al crear la transacción.
  • El payload también puede traer campos que identifican a la institución que procesó la transacción. No construyas lógica sobre ellos.

No hay webhooks a nivel de sesión: session.created, session.completed y session.expired no se envían. Da seguimiento a una sesión con los eventos de pago o con Consultar una sesión.

Sesiones de checkout — Hosted y SDK (Long)

Eventos de integraciones anteriores —SDK 1.0, el flujo anterior de Hosted Checkout y la API de retiros v1/v2. El prefijo legacy_ los identifica, y los payloads están en Webhooks legacy.

event_typeSignificado
legacy_payment_PendingUn pago Hosted / SDK cambió a Pending.
legacy_payment_SuccessUn pago Hosted / SDK cambió a Success.
legacy_payment_DeclinedUn pago Hosted / SDK cambió a Declined.
legacy_payment_ExpiredUn pago Hosted / SDK cambió a Expired.
legacy_payment_FailedUn pago Hosted / SDK cambió a Failed.
legacy_deposit_createdSe creó un depósito SPEI.
legacy_deposit_confirmedSe confirmó un depósito SPEI.
legacy_deposit_expiredUn depósito SPEI expiró.
legacy_refund_PendingUn reembolso cambió a Pending.
legacy_refund_SuccessUn reembolso cambió a Success.
legacy_refund_FailedUn reembolso cambió a Failed.
legacy_withdrawal_PendingUn retiro cambió a Pending.
legacy_withdrawal_ProcessingUn retiro cambió a Processing.
legacy_withdrawal_SentToProviderUn retiro se envió a la institución que lo ejecuta.
legacy_withdrawal_OnHoldUn retiro cambió a OnHold.
legacy_withdrawal_SuccessUn retiro cambió a Success.
legacy_withdrawal_FailedUn retiro cambió a Failed.
legacy_withdrawal_DeclinedUn retiro cambió a Declined.
legacy_withdrawal_ReturnedUn retiro cambió a Returned.
legacy_withdrawal_CanceledUn retiro cambió a Canceled.

Retiros (Long)

event_typeSignificado
withdrawal_PendingUn retiro cambió a Pending.
withdrawal_SuccessUn retiro cambió a Success.
withdrawal_DeclinedUn retiro cambió a Declined.
withdrawal_FailedUn retiro cambió a Failed.
withdrawal_CanceledUn retiro cambió a Canceled.
withdrawal_ReturnedUn retiro cambió a Returned.

withdrawal_Canceled se escribe con una sola L, a diferencia de payment_Cancelled y refund_Cancelled. Compara los nombres de evento exactamente. Sin Webhooks 2.0, los retiros emiten cinco eventos y ninguno por cancelación.

Un retiro envía el evento pendiente y después el terminal; withdrawal_Returned llega además, cuando el banco receptor devuelve los fondos después del Success. El payload viene en uno de dos formatos, definido por la configuración de tu comercio: un payload plano con la misma forma que el formato Short de pagos (status: Pending, transfer_method_type en lugar de payment_method_type), o un payload extendido que anida el registro completo del retiro bajo withdrawal{} con el estado en los nombres internos (PAID_FULL). Los dos, con ejemplos, en Retiros.

Otros

event_typeSignificado
endpoint.testUn evento de prueba enviado desde el dashboard con Enviar prueba. Llega aunque el endpoint no esté suscrito a él.

El catálogo por API

GET /v1/event-types devuelve el catálogo con la descripción de cada evento, además de la política de reintentos —ver API de webhooks.

Usa metadata.external_id como clave de correlación —está presente en ambos formatos y en todos los eventos.

Siguientes pasos

¿Te resultó útil esta página?

En esta página