POST a una URL que tú registras.
Esta página explica cómo recibir y validar los eventos. Para registrar, listar
y eliminar endpoints de webhook, consulta Core API: Webhooks.
Para la lista de eventos disponibles, consulta Eventos.
Cómo funciona
Registras un endpoint
Registra una URL pública (HTTPS) y, opcionalmente, un
secret. También eliges
qué eventos quieres recibir — una lista vacía significa “todos los eventos”. Consulta
Core API: Webhooks.Ocurre un evento
Algo cambia en tu cuenta (ej.: una transacción se paga). Z2Pay selecciona tus webhooks
activos que escuchan ese tipo de evento.
Z2Pay hace POST en tu endpoint
Por cada webhook correspondiente, Z2Pay envía un
POST con el envelope JSON del
evento en el cuerpo de la solicitud y cabeceras de identificación/firma.El envelope del evento
Todo webhook llega en el mismo formato de envelope. El contenido específico del recurso siempre se encuentra dentro dedata.
Identificador único de esta entrega (prefijo
whd_). Cada intento de entregar el mismo
evento al mismo endpoint usa el mismo id — úsalo como clave de idempotencia (ver más abajo).El objeto del recurso relacionado con el evento (la transacción, el reembolso, la suscripción, etc.).
El formato de
data depende del type.Fecha y hora en que el evento fue despachado, en ISO 8601 con timezone (UTC).
Identificador de tu company (prefijo
comp_).Cabeceras de la solicitud
TodoPOST de webhook incluye:
| Cabecera | Siempre presente | Descripción |
|---|---|---|
Content-Type | Sí | application/json |
User-Agent | Sí | Z2Pay-Webhooks/1.0 |
X-Webhook-Event-Id | Sí | Identificador del evento de origen. Usado para correlación. |
X-Webhook-Timestamp | Solo con secret | Momento de la firma, en ISO 8601 con timezone. |
X-Webhook-Signature | Solo con secret | Firma HMAC-SHA256 del cuerpo, en hexadecimal. |
Las cabeceras
X-Webhook-Timestamp y X-Webhook-Signature solo se envían cuando
registraste un secret en el webhook. Sin secret, no hay firma que validar — por eso
recomendamos siempre configurar un secret.Verificando la firma
Cuando el webhook tienesecret, Z2Pay calcula la firma de la siguiente manera:
payload es el envelope completo (el JSON con id, type, data, occurredAt y
companyId) — exactamente el cuerpo que llega en la solicitud.
Ejemplo en Node.js
Idempotencia en tu receptor
El mismo evento puede llegar más de una vez (por reprocesamiento interno o porque tu respuesta tardó demasiado). Tu endpoint debe ser idempotente.Usa el id de la entrega como clave
Guarda el
id del envelope (prefijo whd_) al procesar el evento. Es estable entre
intentos de la misma entrega.Ignora lo que ya fue procesado
Antes de aplicar efectos secundarios, verifica si ese
id ya fue procesado. Si es así,
responde 2xx y no hagas nada más.El
X-Webhook-Event-Id identifica el evento de origen y también puede usarse para correlación
y deduplicación. El id del envelope es específico de la entrega a tu endpoint.Tiempo límite e intentos
Tiempo límite
Cada
POST tiene un tiempo límite de 30 segundos. Si tu servidor no responde dentro
de ese plazo, el intento se considera fallido.Qué cuenta como éxito
Solo las respuestas HTTP en el rango 2xx se consideran entrega exitosa. Redirecciones,
4xx y 5xx cuentan como fallo.Z2Pay registra el resultado de cada intento de entrega (estado HTTP retornado por tu
servidor, cuerpo de la respuesta y número de intentos). La entrega solo requiere que respondas
2xx para ser marcada como exitosa.Buenas prácticas
Siempre configura un secret
Siempre configura un secret
Sin
secret, no hay cabeceras de firma y no puedes garantizar que la solicitud
provino de Z2Pay. Configura un secret sólido al registrar el webhook en
Core API: Webhooks.Valida la firma antes de procesar
Valida la firma antes de procesar
Rechaza con
401 cualquier solicitud cuya firma no coincida. No proceses el evento antes
de validar.Procesa de forma asíncrona
Procesa de forma asíncrona
Encola el evento y responde
2xx rápidamente. El procesamiento lento aumenta el riesgo de
superar el tiempo límite de 30s y generar reentregas.Trata el evento como una pista, no como verdad absoluta
Trata el evento como una pista, no como verdad absoluta
En flujos críticos (ej.: liberar un pedido), confirma el estado consultando la
Core API: Transactions con el
id recibido en data.Ver también
Eventos
La lista de tipos de evento (
type) que Z2Pay envía.Core API: Webhooks
Registrar, listar y eliminar endpoints de webhook.
Errores
Formato y códigos de error de la API.
Convenciones
IDs con prefijo, valores en centavos y fechas en ISO 8601.

