Crea o actualiza un webhook (hasta 3 habilitados por instancia) con filtrado de eventos, media en base64 y su propia cabecera Authorization
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í (upsert por label)
(instance, label) en webhook_configs. Cada instancia acepta hasta 3 webhooks habilitados simultáneamente, identificados por un label libre. Los webhooks con enabled=false se mantienen en la base de datos pero no cuentan para el límite y no reciben entregas.
Casos de uso:
label aún no utilizado.label, todos los nuevos campos sobrescriben los antiguos.label con {"enabled": false} (limpia url, authorization, events, mediaBase64, pero preserva la fila).label diferente; una vez confirmado, desactiva el viejo.default apuntando a https://meuapp.com/webhook. Sin events, recibe los 6 tipos; sin authorization, no envía cabecera de auth.
analytics-pipeline que solo recibe message.exchange y message.status, envía la cabecera Authorization: Bearer svc-token-xyz en cada entrega y desactiva el respaldo en base64.
byEvents: true para que cada entrega se envíe con el nombre del evento como sufijo en la URL (p. ej., https://meuapp.com/wh/message.exchange), permitiendo enrutamiento del lado servidor por endpoint sin inspeccionar el payload.
analytics-pipeline enviando solo enabled: false. La fila queda en la base de datos pero url, authorization, events y mediaBase64 se limpian, y la entrada deja de contar para el límite de 3 webhooks activos.
message.exchange con mediaBase64: true, de modo que cada mensaje con media incluya el contenido binario codificado en base64 dentro del payload.
webhook con la configuración efectivamente persistida (label, enabled, url, authorization, byEvents, events, mediaBase64), refleja el body de la solicitud después del upsert. Cuando enabled=false, los campos url, authorization, events y mediaBase64 regresan limpios. El dispatcher comienza a usar la nueva configuración inmediatamente (el caché interno de 30s se invalida al guardar).
$Instance_Name).TokenAccount o TokenInstance.application/json[a-zA-Z0-9_-]. Vacío u omitido se convierte en "default". Permite múltiples webhooks por instancia.false, los campos url, authorization, byEvents, events y mediaBase64 se limpian antes de guardar.enabled=true. Pasa por el guard SSRF (ver abajo), bloquea localhost, IPs privadas, link-local, multicast.Authorization enviada en cada entrega (p. ej., Bearer secret-key-123). Cifrado en reposo con AES-256-GCM cuando ENCRYPTION_KEY está configurado.true, la URL recibe el sufijo /<event-name> en cada entrega, útil para enrutamiento basado en endpoints sin inspeccionar el payload (https://app/wh/message.exchange).{message.exchange, message.status, call.update, group.flow, instance.state, label.update}.true, los eventos message.exchange con media incluyen media.base64 (aumenta el payload, puede exceder 100KB).url se valida al momento de la configuración y antes de cada entrega. Bloquea destinos que apunten a infraestructura interna:
| Rango | Ejemplo |
|---|---|
| Loopback | localhost, 127.0.0.1, ::1 |
| IPv4 privada | 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
| Link-local IPv4 | 169.254.0.0/16 |
| Link-local IPv6 | fe80::/10 |
| Multicast / broadcast | 224.0.0.0/4, 255.255.255.255 |
authorization vacío vs. null: envía null u omítelo para saltar la cabecera. Una cadena vacía "" resultaría en una cabecera Authorization: vacía, que algunos proxies rechazan.enabled=false limpia los campos: re-habilitar el mismo label después requiere reenviar la url (y cualquier otro campo que quieras preservar).DELETE: para “remover” un webhook, haz POST con {"enabled": false} manteniendo el label. Los operadores pueden inspeccionar/limpiar la fila directamente en la base de datos cuando sea necesario.ENCRYPTION_KEY no está configurado, authorization se almacena en texto plano. En producción, siempre configura la clave.| HTTP | error.message |
|---|---|
| 400 | Invalid request body |
| 400 | URL is required when enabled is true |
| 400 | URL must not target localhost or private network |
| 400 | invalid event type: <value> |
| 400 | label too long (max 50 chars) |
| 400 | label may only contain letters, digits, underscore or dash |
| 401 | Invalid token |
| 404 | Instance not found |
| 409 | webhook limit reached (max 3 enabled per instance) |
| 429 | Rate limit exceeded. Try again later. |
| 500 | Failed to get instance |
enabled=true. Editar una fila existente (mismo label) nunca dispara el límite.GET /api/events/getWebhook/:instance, todos o por ?label=.event en data.