Skip to main content
Quando a análise de um documento termina, a plataforma faz um POST na URL cadastrada no seu projeto, com o resultado completo. É o caminho oposto dos outros endpoints desta seção: aqui o seu serviço é quem recebe a chamada. O disparo acontece uma única vez por documento, assim que ele chega em COMPLETED. Sem URL cadastrada, nada é enviado e o resultado fica disponível apenas por consulta em Consultar Documento.

Habilitando

Grave os parâmetros abaixo com Criar ou Atualizar Parâmetro:
PARAMETER_WEBHOOK_HEADER_KEY e PARAMETER_WEBHOOK_HEADER_VALUE só são enviados quando os dois estão preenchidos. Se apenas um estiver definido, nenhum header extra é adicionado à chamada.

Headers da chamada

string
Sempre application/json.
string
Assinatura HMAC-SHA256 do corpo. Presente apenas quando PARAMETER_WEBHOOK_HMAC_SECRET está cadastrado.Exemplo: t=1758499200,v1=43f80a7f384c4ce59a0357688a554eef55496d52c3f7fd8e63849c82a531063c

Corpo

string
Versão do contrato do evento.Exemplo: 1.0.0
string
Ambiente que originou o evento.Exemplo: production
string
Identificador desta entrega. Muda a cada envio, inclusive para o mesmo documento.Exemplo: 9f1c2e4a-3b7d-4c6e-8a1f-2d5b7c9e0a3f
string
Origem do evento: docs-gateway.document.finished para análise de autenticidade documental, docs-gateway.ocr.finished para extração de dados.Exemplo: docs-gateway.document.finished
string
Origem da ação que gerou o evento.Exemplo: system.action
datetime
Data e hora em que a análise foi concluída.Exemplo: 2026-06-01T12:05:00.000Z
object
O documento com o resultado, no mesmo formato da resposta de Consultar Documento — incluindo o detalhamento por regra em result.raw_response.penalidades.
string
O valor que você enviou no header x-client-id no momento do envio, ou null se não enviou. Use-o para correlacionar o resultado com o registro do seu lado.Exemplo: seu-identificador
Dados de biometria facial presentes na consulta não são enviados no webhook. Se você depende deles, use Consultar Documento.

Validando a assinatura

Com PARAMETER_WEBHOOK_HMAC_SECRET cadastrado, cada chamada leva o header x-valid-signature:
Validar a assinatura confirma que a chamada partiu de quem conhece o segredo e que o corpo não foi alterado no caminho. O segredo nunca trafega na requisição.
1

Extraia t e v1 do header

O header pode trazer mais de um v1. Basta um deles conferir.
2

Rejeite entregas antigas

Descarte quando a diferença entre o horário atual e t passar da sua tolerância. Recomendamos 300 segundos.
3

Recalcule o HMAC

Use o corpo cru da requisição, antes de qualquer conversão para objeto.
4

Compare em tempo constante

Use uma comparação segura, como timingSafeEqual, em vez de igualdade simples.
Valide sempre sobre o corpo cru. Se o seu servidor converter o JSON em objeto e você gerar o texto de novo para calcular o HMAC, a ordem das chaves e o espaçamento podem mudar, e a assinatura não confere. Em Express, use express.raw() na rota do webhook, não express.json().

O que o seu endpoint deve responder

Responda com um status HTTP de sucesso assim que receber a chamada. O processamento do seu lado pode seguir de forma assíncrona.
A entrega não é repetida em caso de falha. Se o seu endpoint estiver indisponível ou responder erro, recupere o resultado pela consulta ao documentId.
Para descartar entregas repetidas, use event.data.id, que identifica o documento. O event.id muda a cada entrega e não serve para isso.