Webhooks fazem parte da API, então exigem plano Premium ou Pro — o mesmo requisito de
POST /oauth/token. Veja Planos.Registrar um endpoint
url (obrigatório) e description (opcional). Qualquer outro campo é rejeitado. A chamada responde 201:
Onde fica o segredo de assinatura
O seuwebhookSecret é 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:
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.
Payload
Todo payload tem o mesmo formato de duas chaves: umtype 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.
null, então trate todos os campos como opcionais.
Validar a assinatura
A VU assina o payload com HMAC-SHA256 sobre o corpo exato da requisição, usando como chave owebhookSecret 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
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
expiresAtda verificação,GET /verifications/{id}responde410. 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.