Como funcionar
Ao criar um envelope, você pode especificar uma URL de notificação:POST HTTP para essa URL com um payload JSON.
Payload do webhook
O webhook é disparado com umPOST contendo:
string
required
Estado do envelope:
FINISHED, CANCELLED, ou EXPIRED.string
required
UUID do envelope que mudou de estado.
Exemplo
Estados e quando disparam
Características importantes
- Best-effort: webhooks são disparados uma única vez. Se a requisição HTTP falhar (timeout, erro de servidor, DNS inválido), não há retry automático.
- Sem idempotência garantida: o mesmo webhook pode ser disparado mais de uma vez em raríssimos casos (ex: falha de rede seguida de retry interno). Implemente tratamento de duplicatas no seu backend se crítico.
- Sem autenticação: o webhook não inclui header de autenticação. Se precisar validar a origem, implemente uma estratégia: usar um token secreto na URL (
?token=secret), validar o IP de origem, ou assinar o payload com HMAC. - Sem garantia de ordem: se múltiplos eventos forem disparados rapidamente, a ordem de entrega não é garantida.
- Timeout curto: seu endpoint deve responder em até 30 segundos com status HTTP 2xx (200-299).
Implementação recomendada
1. Receba o webhook
2. Valide e processe
3. Fallback: polling
Sempre implemente polling como fallback. Webhooks são best-effort — não confie exclusivamente neles para fluxos críticos.Teste seu webhook
Localmente com ngrok
Teste manual com curl
Dicas de depuração
- Verifique os logs: Procure por chamadas HTTP POST em seus logs (
curl,wget, ou cliente HTTP do servidor). - Webhook nunca chega? Confirme que a
urlNotificationé uma URL pública e acessível (não localhost), que não há firewall bloqueando, e que seu endpoint retorna status 2xx. - Webhook duplicado? Implemente um
envelopeUuid + statuscomo chave única na sua tabela de logs — descarte duplicatas. - Ordem incorreta? Não assuma ordem de entrega. Se precisar de sequência (ex: FINISHED antes de processar), use timestamps (
createdAtda mudança de estado) para ordenar.
Relacionado
Confira também como listar e detalhar envelopes para um fallback robusto de polling:GET /v1/envelopes— listar envelopesGET /v1/envelopes/:uuid— detalhe do envelope