Skip to main content
Los webhooks te permiten recibir notificaciones automáticas en tu servidor cuando ocurre un evento en PayCode, como un pago aprobado o un abono recibido. Para empezar a recibirlas, debes registrar la URL de tu servidor usando el endpoint de creación de callback.

Cómo funciona un webhook

1

Ocurre un evento

Por ejemplo, se completa un pago.
2

PayCode envía la notificación

PayCode envía una solicitud POST a la URL que registraste, con un payload en formato JSON.
3

Tu servidor responde

Tu servidor procesa la notificación y responde.
  • La mayoría de los webhooks se disparan solo cuando el evento se completa exitosamente.
  • Algunos eventos, como el pago en efectivo, envían más de una notificación por transacción, en distintos momentos del proceso (ver Pago en efectivo).
  • Si tu servidor no responde exitosamente, PayCode reintenta la entrega hasta 3 veces, con un intervalo de 1 hora entre cada intento enviando el mismo payload en cada reintento. Esta política aplica igual para todos los tipos de evento.
  • Tu endpoint debe retornar errores claros y específicos si algo sale mal al recibir la notificación. Un error 500 genérico no es suficiente para que el equipo de soporte de PayCode pueda diagnosticar el problema.

Tipos de evento disponibles

Cada callback que registres se asocia a un type_callback específico. El payload que recibe tu servidor depende del tipo de evento.
A diferencia de otras integraciones donde todos los eventos comparten una misma envoltura, aquí cada type_callback tiene su propia estructura de payload. Revisa la sección correspondiente antes de construir tu endpoint receptor.
Se dispara cuando se completa un pago iniciado a través de un Payment Link o del Embebido.

SPEI recibido

Se dispara cuando entra un abono a la CLABE del comercio.
Cuando el abono se cruza contra un cobro SPEI previamente esperado, el payload incluye además el campo resultadoMensajeCobro, con el resultado de ese cruce de montos: pagado, incompleto o excedido.

Pago con tarjeta

Se dispara al completarse (o rechazarse) un pago con tarjeta.
Si el cliente solicitó guardar su tarjeta para futuros pagos, el payload incluye además token_card con el token generado, o token_error si la tokenización falló.

CoDi

Se dispara cuando se recibe un pago a través de CoDi.

Pago en efectivo

El pago en efectivo en cajero (también conocido internamente como CIE o Practicaja) genera dos notificaciones distintas para la misma transacción, en dos momentos diferentes del proceso.
El webhook de confirmación se dispara cuando el banco notifica el pago a PayCode, no necesariamente en el instante exacto en que el cliente paga en el cajero. Puede haber un desfase entre el momento real del pago y el momento en que tu servidor recibe la confirmación.
Registro y Confirmación no son dos suscripciones distintas: ambos se reciben bajo el mismo type_callback: cie. Solo necesitas registrar un callback para recibir las dos notificaciones de una misma transacción.

1. Registro

Se dispara cuando el cliente genera su referencia de pago (por ejemplo, al abrir el link de pago y elegir “Efectivo”), antes de que el pago se realice. En este punto el dinero todavía no ha sido cobrado.
La estructura de este payload es distinta a la del webhook de Confirmación porque, además de la información del pago (payment), este evento también incluye información del link de pago asociado.
El campo metadata está presente en la estructura del payload, pero en este evento normalmente no se utiliza.
No uses este webhook para marcar un pedido como pagado. Solo indica que el cliente generó su referencia, no que el dinero ya fue recibido. Usa el webhook de Confirmación para eso.

2. Confirmación

Se dispara cuando el pago ya fue cobrado y el banco lo notificó a PayCode. Este es el webhook que debes usar para confirmar que el dinero fue recibido.
El valor de status no está homologado entre estos dos eventos: en la Confirmación llega en español ("Pagado"), tal como se solicitó originalmente para este evento. En el Registro llega en inglés ("confirmed"). Esto es una inconsistencia conocida, pendiente de homologar por el equipo de ingeniería.

Cash in (tiendas de conveniencia)

Se dispara cuando se confirma un pago realizado en efectivo en una tienda de conveniencia afiliada (por ejemplo OXXO).

Cobro programado / domiciliación

Se dispara en cada intento de cobro de una domiciliación programada.

Buenas prácticas para tu endpoint receptor

  • Responde rápido. Guarda la notificación (por ejemplo en una cola o en tu base de datos) y procesa la lógica de negocio después, en vez de hacer todo el trabajo pesado antes de responder.
  • Valida que los campos esperados existan antes de usarlos; no asumas que un campo opcional (como metadata o token_card) siempre estará presente.
  • Usa un identificador único para evitar procesar el mismo evento dos veces, por ejemplo hash, reference_number o clave_rastreo según el tipo de evento.
  • En pagos de efectivo, distingue el webhook de registro del de confirmación (ver Pago en efectivo) y marca un pedido como pagado únicamente con el segundo.
  • Registra (log) cada notificación recibida, incluyendo las que no pudiste procesar, para facilitar el diagnóstico si algo falla.

Administrar tus callbacks

Estos son los endpoints para registrar, consultar, modificar y eliminar los callbacks de tu negocio.

Obtener callback

Consulta la información de un callback registrado. Método: GET Endpoint: /Api/v2/hook/get Header requerido: Authorization: Bearer {token}
integer
required
Identificador del callback a consultar
Ejemplo de request:

Crear callback

Registra una nueva URL donde PayCode enviará las notificaciones de los eventos configurados. Método: POST Endpoint: /Api/v2/hook/create Header requerido: Authorization: Bearer {token}
string
required
URL de tu servidor donde PayCode enviará las notificaciones
string
required
Tipo de evento que disparará la notificación. Ver tipos de evento disponibles
Ejemplo de request:
Ejemplo de respuesta 200 OK:

Actualizar callback

Modifica la URL o el tipo de evento de un callback existente. Método: PUT Endpoint: /Api/v2/hook/update Header requerido: Authorization: Bearer {token}
integer
required
Identificador del callback a actualizar
string
required
Nueva URL donde PayCode enviará las notificaciones
string
required
Nuevo tipo de evento
Ejemplo de request:

Eliminar callback

Elimina un callback registrado. PayCode dejará de enviar notificaciones a esa URL. Método: DELETE Endpoint: /Api/v2/hook/delete Header requerido: Authorization: Bearer {token}
integer
required
Identificador del callback a eliminar
Ejemplo de request:
Esta acción es irreversible. Una vez eliminado el callback PayCode dejará de enviar notificaciones a esa URL.

Reenviar notificación

Reenvía una notificación de un evento que ya ocurrió. Útil cuando tu servidor no recibió correctamente la notificación original. Método: POST Endpoint: /api/v2/internal/callback/resendnotificacion Header requerido: Authorization: Bearer {token}
integer
required
Identificador de tu negocio en PayCode
string
required
Tipo de evento cuya notificación quieres reenviar
Ejemplo de request: