Recebendo resultados de verificação com webhooks

A Didit não envia e-mail quando uma verificação muda de status - configure um webhook para que seu backend saiba disso no exato momento em que acontece, e verifique a assinatura antes de confiar nela.

Short answer

Um webhook é uma requisição HTTP que a Didit envia para a sua URL quando algo muda. Adicione um destino em API & Webhooks, inscreva-se nos eventos que você quer - não existe curinga, liste cada um - guarde o signing secret, e verifique a assinatura antes de processar qualquer coisa.

A Didit não envia um e-mail quando uma sessão passa para In Review ou Declined. Para saber no exato momento em que um status muda, sem precisar atualizar o console, configure um webhook - uma URL no seu servidor para a qual a Didit envia a atualização automaticamente.

Webhooks são o padrão de integração recomendado. Fazer polling no endpoint de decisão funciona como alternativa, mas é mais lento, custa mais requisições, e perde eventos que só são entregues por webhook - edições de dados feitas por um revisor, mudanças de status de transação, e mudanças em nível de entidade.

#Configurando um

  1. Go to API & Webhooks

    No Business Console, abra a aplicação para a qual você quer receber eventos e vá em API & Webhooks.

  2. Add a destination

    Dê um nome a ele, informe a URL HTTPS pública do seu endpoint, e escolha os eventos que você quer receber - no mínimo, mudanças de status de sessão.

  3. Save the signing secret

    O destino mostra um secret uma única vez. Guarde-o - seu servidor o usa para confirmar que uma requisição realmente veio da Didit e não de um impostor. Passo a passo completo de verificação: Verificação de assinatura.

  4. Test it

    Use Try Webhook na mesma página para enviar um evento de teste completamente formado - cenários de approved, declined, in review, KYB, entity e transaction - para o seu endpoint. Você pode validar sua integração dessa forma sem executar uma verificação de verdade.

Destinos de webhook no console da Didit com eventos inscritos e histórico de entregas
  1. Add destination registra a URL para a qual a Didit envia os resultados.
  2. Verifique toda entrega com este signing secret antes de confiar nela.
  3. Escolha quais eventos um destino recebe.
  4. Test Webhook envia um payload de exemplo para você confirmar que seu endpoint o aceita.
Cada destino tem seus próprios eventos inscritos, signing secret e log de entregas.

#Os eventos aos quais você pode se inscrever

Não existe curinga - liste cada família de eventos que você quer. Distribuí-los entre vários destinos é aceitável e, muitas vezes, mais organizado.

EventoDispara quando
status.updatedO status de uma sessão de KYC ou KYB muda. O que você quase certamente quer
data.updatedOs dados de verificação são editados após a criação - um revisor corrigindo um campo
user.status.updatedUm usuário consolidado muda entre ACTIVE, FLAGGED e BLOCKED
user.data.updatedO perfil, contadores ou identificadores de um usuário consolidado mudam
business.status.updatedUma empresa consolidada muda de status
business.data.updatedOs dados de uma empresa consolidada mudam
transaction.createdUma transação é criada e seu veredito inicial está pronto
transaction.status.updatedO status de uma transação muda posteriormente
travel_rule.status.updatedO status de uma troca da Travel Rule muda
Note

Não existe session.status.updated nem kyc.completed. Se você se inscreveu em um nome que não está nesta lista, você não vai receber nada - e isso vai parecer exatamente uma falha de entrega. Verifique o nome primeiro.

#O que o seu endpoint deve fazer

  • Verifique a assinatura antes de qualquer outra coisa. Faça o HMAC sobre o corpo bruto da requisição - nunca sobre uma versão re-serializada do JSON já convertido, porque transformar de volta em string muda os bytes e a assinatura não vai corresponder. Use uma comparação de tempo constante.
  • Retorne um 2xx rápido. Faça o trabalho pesado de forma assíncrona, depois de já ter respondido.
  • Seja idempotente. Use como chave o id do evento, ou a combinação id da sessão + status + tipo de webhook. Tentativas repetidas e duplicatas acontecem.
  • Trate todo status que importa para você, incluindo os que chegam bem depois do onboarding - uma sessão aprovada pode mais tarde passar para In Review através do monitoramento contínuo de AML.
  • Somente HTTPS. Endpoints em HTTP simples não são suportados.

#Novas tentativas

Em caso de 5xx, 404, timeout, ou falha de conexão, a Didit tenta novamente duas vezes:

  • Primeira tentativa cerca de 1 minuto após a falha inicial
  • Segunda tentativa cerca de 4 minutos depois disso

Depois disso, a entrega é descartada. Toda tentativa é registrada separadamente na aba Deliveries do destino, então você pode ver exatamente o que aconteceu, em vez de adivinhar.

Important

Duas tentativas em cinco minutos não é uma fila durável. Se o seu endpoint ficar fora do ar por uma hora, esses eventos se perdem. Reconcilie na inicialização fazendo polling no endpoint de decisão para as sessões cujo status final você não tem - webhooks são o caminho rápido, não o único caminho.

#Atrás de um firewall ou WAF

A Didit entrega a partir do IP estático 18.203.201.92 com um user agent DiditWebhook/2.0. Se sua borda bloqueia clientes desconhecidos - a postura padrão do Cloudflare, por exemplo - libere esse IP para o hostname de recebimento, ou as entregas vão falhar antes de chegar ao seu código.

#Ainda não tem um backend?

Você ainda pode acompanhar os resultados manualmente na seção Verifications do console enquanto constrói um, ou usar um link de verificação sem código enquanto isso.

#Próximos passos