Lista todos los webhooks configurados en la instancia o retorna uno solo por label
Auth:Documentation Index
Fetch the complete documentation index at: https://docs.ryzeapi.cloud/llms.txt
Use this file to discover all available pages before exploring further.
TokenAccount o TokenInstance • Rate limit: Global (100/min) • Idempotente: sí
?label=<name>, retorna el único webhook con ese label (o 404).
webhooks[] con todos los webhooks de la instancia (habilitados y deshabilitados), ordenados alfabéticamente por label.
?label=analytics-pipeline, retorna solo el webhook con ese label en el campo webhook del envoltorio (o 404 si no existe).
?label=default. Útil cuando creaste el webhook sin especificar un label y quieres leer solo esa entrada en lugar de la lista completa.
?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.
?label=. Ordenado alfabéticamente por label. Siempre se retorna incluso cuando no existe ningún webhook (webhooks: []).?label=<name>. Misma forma que POST.TokenAccount o TokenInstance.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.enabled=false, los operadores ven el historial completo. Para listar solo los activos, filtra del lado del cliente por w.enabled === true.authorization descifrado: si ENCRYPTION_KEY está 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.webhook_queue y es procesado por workers paralelos.
| 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()).
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 |
POST a tu webhook llega con:
| 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 |
POST /api/events/webhook/:instance