Skip to main content
Os webhooks permitem que o seu backend receba notificações HTTP em tempo real enquanto uma pessoa avança por uma verificação do Identity Link. Em vez de consultar a API em laço, você registra uma URL e a VU publica um payload JSON assinado sempre que uma etapa é concluída ou falha.
Webhooks fazem parte da API, então exigem plano Premium ou Pro — o mesmo requisito de POST /oauth/token. Veja Planos.

Registrar um endpoint

O corpo aceita exatamente dois campos: url (obrigatório) e description (opcional). Qualquer outro campo é rejeitado. A chamada responde 201:
A resposta não traz segredo algum. A assinatura não é por endpoint: existe um único segredo de assinatura por conta, e todos os endpoints registrados recebem payloads assinados com ele.

Onde fica o segredo de assinatura

O seu webhookSecret é um valor de 256 bits exibido no aplicativo em Configurações → Desenvolvedores, ao lado do Client Id e do Client Secret. O mesmo valor volta em um GET /users/me autenticado. Para rotacioná-lo, use Atualizar nessa tela ou chame:
A resposta traz o novo segredo. A rotação vale imediatamente, então publique o novo valor no seu validador antes de rotacionar, ou aceite uma janela curta de entregas rejeitadas.

Eventos

Doze eventos cobrem o ciclo de vida. started dispara quando a etapa começa, successful quando ela passa e failed quando ela é perdida em definitivo.
Uma tentativa malsucedida com tentativas restantes não gera webhook: a pessoa apenas é convidada a tentar de novo e remainingRetries cai em um. Os eventos *.failed marcam a tentativa esgotada, que é também o momento em que o link é consumido.

Payload

Todo payload tem o mesmo formato de duas chaves: um type e um objeto data.
_externalUserId e _metadata são copiados do link que originou a verificação. Se o link não tinha externalUserId, o campo chega como string vazia; sem metadata, _metadata é {}.

Geolocalização nos eventos terminais

verification.successful e verification.failed também trazem data.geolocation, quando houve captura de localização. Os eventos intermediários nunca trazem — em verification.started a captura ainda não aconteceu.
Chaves ausentes são omitidas em vez de virem como null, então trate todos os campos como opcionais.
A geolocalização do webhook é um subconjunto. permission e sample são removidos, e os campos antifraude policy, ipDistanceKm e serverIp nunca trafegam por webhook — exatamente como estão ausentes dos endpoints públicos. Se a sua lógica de risco precisa deles, consulte a verificação com um token depois de receber o evento.

Validar a assinatura

A VU assina o payload com HMAC-SHA256 sobre o corpo exato da requisição, usando como chave o webhookSecret da sua conta, e envia o digest hexadecimal no cabeçalho X-Signature-SHA256. Valide contra o corpo bruto. Se você fizer parse e serializar o JSON de novo, os bytes mudam e a comparação quebra.

Entrega e retentativas

As retentativas são propositalmente curtas. A VU faz até 3 tentativas, com 100 ms de intervalo, e para assim que o seu endpoint responde 200, 201, 202 ou 204. Qualquer outra coisa — um 500, um timeout, um redirecionamento — consome uma tentativa. Depois da terceira, o evento é descartado e nunca reenviado.
Esse orçamento é pequeno demais para absorver um handler lento, então:
  • Responda imediatamente e processe de forma assíncrona. Confirme em poucas centenas de milissegundos e mande o trabalho para uma fila.
  • Seja idempotente. O mesmo evento pode chegar mais de uma vez, e verification.started é reemitido na ramificação adaptativa em alguns caminhos de retentativa.
  • Não trate o webhook como única fonte de verdade. Reconcilie com GET /verifications/{id}/status?linkId={linkId} tudo o que tem impacto comercial: uma verificação cujo webhook se perdeu continua com o status correto na API.
  • Leia o resultado antes que ele expire. Passado o expiresAt da verificação, GET /verifications/{id} responde 410. Em Planos está como essa janela é calculada.

Gerenciar endpoints

PATCH aceita url e description. Todas as rotas exigem o mesmo token Bearer do resto da API.
As rotas de /webhook-endpoints vivem na mesma URL base de POST /links: https://api.identity.vu-one.com/api/v1. Não há um host separado. Se elas respondem 404 com given resource is not implemented, a rota não correspondeu: verifique a URL base, o path e o método em Erros.

Próximos passos

  • Leia os dados extraídos da verificação no guia de Resultados KYC.
  • Entenda como os eventos de prova de vida se mapeiam nos tipos de webhook em Prova de vida.
  • Consulte os códigos de erro se o registro do webhook falhar na página de Erros.
Última modificação em 30 de agosto de 2026