Eventos
Consultar Webhooks
Lista todos los webhooks configurados en la instancia o retorna uno solo por label
GET
Consultar Webhooks
Auth:
Después de Tabla
Envoltorio:
TokenAccount o TokenInstance • Rate limit: Global (100/min) • Idempotente: sí
Descripción
Endpoint de lectura. Sin query, retorna todos los webhooks (habilitados y deshabilitados) de la instancia. Con?label=<name>, retorna el único webhook con ese label (o 404).
Ejemplos
Listar todos
Sin query string, retorna el arraywebhooks[] con todos los webhooks de la instancia (habilitados y deshabilitados), ordenados alfabéticamente por label.
Uno específico
Pasando?label=analytics-pipeline, retorna solo el webhook con ese label en el campo webhook del envoltorio (o 404 si no existe).
Default explícito
Obtiene el webhook default pasando?label=default. Útil cuando creaste el webhook sin especificar un label y quieres leer solo esa entrada en lugar de la lista completa.
Respuesta exitosa
Sin?label=, retorna webhooks[] (ordenados alfabéticamente por label, siempre presente, regresa como [] si no existe ningún webhook, y también incluye los que tienen enabled=false para inspección operacional). Con ?label=<name>, retorna el objeto único en webhook (misma forma que POST). El authorization se descifra cuando ENCRYPTION_KEY está configurado; si la clave fue rotada y algún valor no puede descifrarse, el campo se retorna cifrado en lugar de fallar la solicitud.
200 OK (list, no ?label=)
200 OK (?label=analytics-pipeline)
Presente solo cuando no hay
?label=. Ordenado alfabéticamente por label. Siempre se retorna incluso cuando no existe ningún webhook (webhooks: []).Presente solo cuando se usa
?label=<name>. Misma forma que POST.Parámetros de ruta
Nombre de la instancia.
Cabeceras
TokenAccount o TokenInstance.Parámetros de consulta
Cuando está presente, retorna un único webhook (
webhook en el envoltorio). Cuando está ausente, retorna la lista (webhooks[]).Pasar ?label= (vacío) sigue considerándose “presente” → se convierte en "default" y busca la fila con ese label.- El listado incluye
enabled=false, los operadores ven el historial completo. Para listar solo los activos, filtra del lado del cliente porw.enabled === true. authorizationdescifrado: siENCRYPTION_KEYestá configurado y el valor está cifrado en reposo, el repositorio lo descifra antes de retornar. Si la clave fue rotada y un valor no puede descifrarse, el campo se retorna cifrado (con una advertencia en el log) en lugar de fallar la solicitud.
Entrega: cola, retry, DLQ
La entrega del webhook es asíncrona y persistida. Cada evento que coincide con un webhook se encola enwebhook_queue y es procesado por workers paralelos.
Flujo
Backoff exponencial
| Intento | Próximo retry |
|---|---|
| 1 (fail) | +1s |
| 2 (fail) | +5s |
| 3 (fail) | +30s |
| 4 (fail) | +5min |
| 5 (fail) | +30min |
| 6+ | +1h (cap) |
max_attempts (default 5), status se vuelve failed (DLQ). La fila no se elimina automáticamente, los operadores pueden inspeccionar last_error y reencolar manualmente (UPDATE webhook_queue SET status='pending', next_retry_at=now()).
Tabla webhook_queue (resumen ops)
| Columna | Descripción |
|---|---|
id | BIGSERIAL PK |
instance_name | Nombre de la instancia |
url | Destino final (ya con sufijo /event-name si byEvents) |
payload | BYTEA, cuerpo JSON del evento |
auth_header | Authorization configurado (cifrado en reposo) |
event_type | Nombre del evento (message.exchange etc.) |
status | pending | delivered | failed |
attempts | Contador de intentos |
max_attempts | Default 5 |
next_retry_at | Próxima ventana de intento |
last_error | Último mensaje de error del consumidor |
created_at / updated_at | Timestamps |
Cabeceras entregadas
CadaPOST a tu webhook llega con:
Errores
| HTTP | error.message | Aplica a |
|---|---|---|
| 400 | label too long (max 50 chars) | ?label= |
| 400 | label may only contain letters, digits, underscore or dash | ?label= |
| 401 | Invalid token | ambos |
| 404 | Instance not found | ambos |
| 404 | Webhook not configured for this label | ?label= |
| 429 | Rate limit exceeded. Try again later. | ambos |
| 500 | Failed to get instance | ambos |
| 500 | Failed to list webhook configurations | sin query |
Siguiente
Configurar webhook
POST /api/events/webhook/:instanceCatálogo de eventos
Esquemas de los 6 tipos de eventos.