Cria ou atualiza um webhook (até 3 habilitados por instância) com filtro de eventos, mídia em base64 e header Authorization próprio
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 ou TokenInstance • Rate-limit: Global (100/min) • Idempotente: sim (upsert por label)
(instance, label) em webhook_configs. Cada instância aceita até 3 webhooks habilitados simultâneos, identificados por um label livre. Webhooks com enabled=false ficam preservados no banco mas não contam para o limite e não recebem entregas.
Casos de uso:
label ainda não usado.label, todos os campos novos sobrescrevem os antigos.label com {"enabled": false} (limpa url, authorization, events, mediaBase64, mas preserva a linha).label diferente; quando confirmar, desabilita o antigo.default apontando para https://meuapp.com/webhook. Sem events, recebe os 6 tipos; sem authorization, não envia header de autenticação.
analytics-pipeline que recebe apenas message.exchange e message.status, envia o header Authorization: Bearer svc-token-xyz em cada entrega e desliga o backup em base64.
byEvents: true para que cada delivery seja enviada com o nome do evento como sufixo da URL (ex.: https://meuapp.com/wh/message.exchange), permitindo rotear no servidor por endpoint sem precisar inspecionar o payload.
analytics-pipeline enviando apenas enabled: false. A linha permanece no banco mas url, authorization, events e mediaBase64 são zerados, e a entrada deixa de contar para o limite de 3 webhooks ativos.
message.exchange com mediaBase64: true, fazendo cada mensagem com mídia incluir o conteúdo binário codificado em base64 dentro do payload.
webhook com a configuração efetivamente persistida (label, enabled, url, authorization, byEvents, events, mediaBase64), espelha o body do request após o upsert. Quando enabled=false, os campos url, authorization, events e mediaBase64 voltam zerados. O dispatcher passa a usar a nova config imediatamente (o cache interno de 30s é invalidado no save).
$Instance_Name).TokenAccount ou TokenInstance.application/json[a-zA-Z0-9_-]. Vazio ou omitido vira "default". Permite múltiplos webhooks por instância.false, os campos url, authorization, byEvents, events e mediaBase64 são zerados antes de salvar.enabled=true. Passa pelo SSRF guard (ver abaixo), bloqueia localhost, IPs privados, link-local, multicast.Authorization enviado em cada delivery (ex.: Bearer secret-key-123). Encriptado at-rest com AES-256-GCM quando ENCRYPTION_KEY está configurada.true, a URL recebe sufixo /<event-name> em cada entrega, útil para roteamento por endpoint sem inspecionar o payload (https://app/wh/message.exchange).{message.exchange, message.status, call.update, group.flow, instance.state, label.update}.true, eventos message.exchange com mídia incluem media.base64 (aumenta payload, pode passar de 100KB).url é validada na configuração e antes de cada delivery. Bloqueia destinos que apontem para a infraestrutura interna:
| Faixa | Exemplo |
|---|---|
| Loopback | localhost, 127.0.0.1, ::1 |
| IPv4 privado | 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 vazio vs. null: envie null ou omita para não enviar header. String vazia "" resultaria em Authorization: vazio, que alguns proxies rejeitam.enabled=false zera os campos: re-habilitar o mesmo label depois exige re-enviar a url (e os outros campos que você quiser preservar).DELETE: para “remover” um webhook, faça POST com {"enabled": false} mantendo o label. Operadores podem inspecionar/limpar a linha diretamente no banco quando necessário.ENCRYPTION_KEY não está configurada, o authorization é armazenado em texto puro. Em produção, sempre configure a chave.| 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: <valor> |
| 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 uma linha já existente (mesmo label) nunca aciona o limite.GET /api/events/getWebhook/:instance, todos ou por ?label=.event carrega no data.