Visión general
Los webhooks avisan a tus sistemas, casi en tiempo real, sobre hechos de negocio del Dunning: cobro pagado, acuerdo aceptado, disputa abierta, notificación entregada. En lugar de consultar la API cada cierto tiempo, registras un endpoint HTTPS y recibes cada evento como un POST JSON.

Cómo funciona
- Ocurre un hecho (p. ej., pago identificado).
- El evento se persiste de forma inmutable — nada es fire-and-forget.
- Para cada endpoint suscrito, el sistema agenda una entrega con firma HMAC y la envía con reintento automático; cada intento queda registrado con request y response capturados.
Registrar un endpoint
En la pantalla Webhooks del dashboard (o vía POST /api/v1/webhook-endpoints), informa:
- URL: obligatoriamente
https://. Las URLs que apuntan a redes internas se rechazan en el registro (INVALID_WEBHOOK_URL, protección anti-SSRF). - Descripción (opcional): para qué sirve ese endpoint.
- Eventos: selecciona en el catálogo, agrupado por categoría, con "seleccionar todos" por grupo. Una lista vacía suscribe todos los eventos, incluso los que se creen en el futuro (el listado muestra el badge "Todos los eventos").
- Autenticación (opcional): credenciales que el Dunning presenta a tu endpoint (Basic, Bearer o header custom), además de la firma HMAC que va siempre. Detalles en Seguridad.
Al crearlo, el secret del endpoint (prefijo whsec_) se muestra una única vez. Firma cada entrega y puede rotarse en cualquier momento.
Qué llega a tu endpoint
Cada entrega es un POST con el payload:
{
"event": "charge.paid",
"timestamp": "2026-07-23T12:00:00.000Z",
"organizationId": "3f8a...",
"data": { "id": "...", "status": "paid", "...": "el recurso serializado" }
}
Y los headers:
Content-Type: application/json
User-Agent: Kobana-Dunning-Webhooks/1.0
X-Webhook-Event: charge.paid
X-Webhook-Event-Id: 3d1f0c9a-… (UUID del evento — el mismo en todos los reintentos)
X-Webhook-Delivery-Id: 9b2e4a10-… (UUID de la entrega — único por evento × endpoint)
X-Webhook-Attempt: 1 (número del intento)
X-Webhook-Timestamp: 2026-07-23T12:00:00.000Z
X-Webhook-Signature: t=<unix>,v1=<hmac-sha256 de "t.body" con el secret>
Responde 2xx para confirmar la recepción. Cualquier otra respuesta (incluidos los redirects, que no se siguen) cuenta como fallo y entra en el ciclo de reintentos.
Probar el endpoint
Después de registrarlo, dispara un evento de prueba con POST /api/v1/webhook-endpoints/{id}/test: un evento webhook.test recorre el pipeline real (cola, firma, captura, reintento) hasta tu consumidor — sin esperar a que ocurra un evento de negocio.
Buenas prácticas
- Responde rápido y procesa después: encola el payload y devuelve
200de inmediato (el timeout de entrega es de 10 segundos). - Trátalo como al-menos-una-vez: los reintentos pueden entregar el mismo evento más de una vez; deduplica por el
X-Webhook-Event-Id(estable entre intentos). - Verifica la firma siempre, incluida la ventana de tolerancia del timestamp (cómo hacerlo).
- Monitorea la pantalla de entregas: los fallos y agotamientos quedan visibles por endpoint, con reenvío manual.
En esta sección
- Eventos — el catálogo completo con payload de ejemplo, recurso por recurso.
- Seguridad — firma HMAC, verificación y autenticación del request.
- Entregas y reintentos — captura, backoff, DLQ y reenvío manual.