Resumo
Os webhooks permitem que você receba notificações em tempo real quando o status de verificação KYC mudar. Gu1 envia automaticamente requisições HTTP POST para seu endpoint webhook configurado sempre que o status de uma validação for atualizado.Por Que Usar Webhooks?
Atualizações em Tempo Real
Receba notificações instantâneas quando o status de verificação mudar
Eficiente
Não é necessário consultar a API repetidamente
Fluxos Automáticos
Atualize automaticamente contas de usuário com base nos resultados de verificação
Melhor UX
Notifique os clientes imediatamente após a verificação
Eventos de Webhook
Gu1 envia webhooks para os seguintes eventos de validação KYC:| Tipo de Evento | Descrição | Quando é Disparado |
|---|---|---|
kyc.validation_created | Sessão de validação criada | Quando você cria uma nova validação KYC |
kyc.validation_in_progress | Cliente iniciou verificação | Cliente começa o processo de verificação |
kyc.validation_approved | Verificação aprovada | Identidade verificada com sucesso |
kyc.validation_rejected | Verificação rejeitada | Verificação de identidade falhou |
kyc.validation_abandoned | Cliente abandonou o processo | Cliente abandonou sem completar |
kyc.validation_expired | Sessão de validação expirou | Sessão expirou (tipicamente após 7 dias) |
Configurar Webhooks
Passo 1: Configurar Webhook no Dashboard
Configure a URL do seu webhook no dashboard do Gu1:-
Navegar para Configurações de Webhooks
- Faça login no seu dashboard do Gu1
- Vá para Configurações → Webhooks
-
Criar Novo Webhook
- Clique em Adicionar Webhook ou Criar Webhook
- Insira um nome descritivo (ex., “Webhook KYC Produção”)
- Insira a URL do seu webhook (deve ser HTTPS):
https://seuapp.com/webhooks/kyc
-
Selecionar Ambiente
- Escolha Sandbox para testes
- Escolha Produção para eventos ao vivo
-
Inscrever-se em Eventos
- Selecione todos os eventos KYC ou específicos:
kyc.validation_createdkyc.validation_in_progresskyc.validation_approvedkyc.validation_rejectedkyc.validation_abandonedkyc.validation_expired
- Selecione todos os eventos KYC ou específicos:
-
Salvar seu Segredo
- Um segredo de webhook será gerado automaticamente
- Copie e salve este segredo - você precisará dele para verificar as assinaturas de webhook
- Não será possível vê-lo novamente (mas você pode regenerá-lo depois)
-
Ativar o Webhook
- Ative o webhook marcando-o como Habilitado
- Clique em Salvar
Você pode criar webhooks separados para os ambientes sandbox e produção com URLs diferentes.
Passo 2: Criar um Endpoint de Webhook
Crie um endpoint na sua aplicação para receber requisições POST de webhook:Passo 3: Tornar seu Endpoint Publicamente Acessível
Seu endpoint de webhook deve:- Ser publicamente acessível via HTTPS
- Poder receber requisições POST
- Retornar código de status 200 rapidamente (dentro de 30 segundos)
Para desenvolvimento local, use ferramentas como ngrok para criar uma URL pública que faça túnel para seu servidor local.
Segurança: Verificar Assinaturas de Webhook
Sempre verifique as assinaturas de webhook para garantir que as requisições vêm do Gu1.Como Funciona a Verificação de Assinaturas
- Gu1 gera uma assinatura HMAC SHA-256 do payload do webhook usando seu segredo
- A assinatura é enviada no header
X-Webhook-Signature - Seu servidor recalcula a assinatura usando o mesmo segredo
- Compara as assinaturas - se coincidirem, o webhook é autêntico
Exemplos de Verificação de Assinatura
Headers HTTP
Cada requisição de webhook inclui estes headers:| Header | Descrição | Exemplo |
|---|---|---|
Content-Type | Sempre application/json | application/json |
X-Webhook-Event | Tipo de evento | kyc.validation_approved |
X-Webhook-ID | ID de configuração do webhook | 550e8400-e29b-41d4-a716-446655440000 |
X-Webhook-Timestamp | Timestamp ISO 8601 | 2025-01-15T10:30:00.000Z |
X-Webhook-Signature | Assinatura HMAC SHA-256 | abc123... |
Estrutura do Payload de Webhook
Todos os webhooks seguem esta estrutura padrão:Campos Comuns do Payload
O tipo de evento (ex.,
kyc.validation_approved)Timestamp ISO 8601 quando o evento ocorreu
Seu ID de organização
O ID de validação KYC no Gu1
O ID da entidade (pessoa) sendo verificada
Informações da entidade incluindo seu
externalId para fácil buscaStatus atual de validação:
pending, in_progress, approved, rejected, abandoned, expiredPayloads Específicos por Evento
kyc.validation_created
Enviado quando uma nova validação KYC é criada.kyc.validation_in_progress
Enviado quando um cliente inicia o processo de verificação.kyc.validation_approved
Enviado quando a verificação é completada com sucesso.verifiedAt: Timestamp quando a verificação foi aprovadaextractedData: Informações pessoais extraídas do documentoverifiedFields: Array de campos que foram verificados com sucessowarnings: Array de avisos detectados durante a verificaçãodecision: Resultados de verificação (imagens/URLs removidas por segurança)
kyc.validation_rejected
Enviado quando a verificação falha.kyc.validation_abandoned
Enviado quando um cliente inicia mas não completa a verificação.kyc.validation_expired
Enviado quando uma sessão de validação expira sem ser completada.Política de Tentativas
Se seu endpoint de webhook falhar em responder com um código de status 2xx, Gu1 automaticamente tentará novamente a entrega. Política de Tentativas Padrão:- Tentativas Máximas: 3 tentativas
- Delay Inicial: 1000ms (1 segundo)
- Multiplicador de Backoff: 2x
- Sequência de Tentativas: 1s → 2s → 4s
- Tentativa inicial em
T+0s - Primeira nova tentativa em
T+1s - Segunda nova tentativa em
T+3s(1s + 2s) - Terceira nova tentativa em
T+7s(1s + 2s + 4s)
- Códigos de status HTTP 200-299 são considerados bem-sucedidos
- Qualquer outro código de status ou erro de rede dispara uma nova tentativa
- Cada tentativa tem um timeout de 30 segundos
- Se seu endpoint não responder dentro de 30 segundos, a tentativa é marcada como falhada
Melhores Práticas
Retornar 200 Rapidamente
Retornar 200 Rapidamente
Sempre retorne um código de status 200 o mais rápido possível para confirmar a recepção. Processe o webhook assincronamente se necessário.
Verificar Assinaturas
Verificar Assinaturas
Sempre verifique o header
X-Webhook-Signature para garantir que o webhook é autêntico.Lidar com Idempotência
Lidar com Idempotência
Você pode receber o mesmo webhook múltiplas vezes. Use o
validationId para garantir que você processa cada evento apenas uma vez.Usar entity.externalId para Busca
Usar entity.externalId para Busca
O webhook inclui
entity.externalId que é o ID que você forneceu ao criar a entidade. Use-o para buscar o cliente no seu banco de dados.Armazenar IDs de Validação
Armazenar IDs de Validação
Armazene o
validationId do Gu1 no seu banco de dados. Isso permite que você consulte detalhes de validação posteriormente se necessário.Lidar com Erros Graciosamente
Lidar com Erros Graciosamente
Se o processamento falhar, registre o erro mas ainda assim retorne 200 para prevenir novas tentativas. Armazene webhooks falhados para revisão manual.
Usar Webhooks Específicos por Ambiente
Usar Webhooks Específicos por Ambiente
Crie configurações de webhook separadas para os ambientes sandbox e produção.
- Sandbox: Usar para testes com dados de teste
- Produção: Usar para verificações de clientes ao vivo
Testar Webhooks
Testar no Dashboard
- Vá para Configurações → Webhooks
- Selecione seu webhook
- Clique em Testar Webhook
- Gu1 enviará um evento de teste para seu endpoint
- Verifique o status de resposta e logs
Desenvolvimento Local
Use ngrok para expor seu servidor local:Fluxo de Teste
- Crie um webhook sandbox apontando para seu endpoint de desenvolvimento
- Crie uma validação KYC de teste
- Seu endpoint de webhook recebe
kyc.validation_created - Complete a verificação (ou simule diferentes resultados)
- Seu endpoint de webhook recebe atualizações de status
Monitoramento e Debugging
Logs de Webhook
Ver histórico de entrega de webhook no seu dashboard:- Vá para Configurações → Webhooks
- Selecione seu webhook
- Clique em Ver Logs ou Histórico
- Timestamp de cada tentativa de entrega
- Código de status HTTP recebido
- Body de resposta
- Tempo de resposta
- Mensagens de erro (se houver)
- Tentativas de nova tentativa
Estatísticas de Webhook
Cada webhook mostra:- Disparos Totais: Número total de vezes que o webhook foi disparado
- Contagem de Sucessos: Entregas bem-sucedidas
- Contagem de Falhas: Entregas falhadas
- Último Disparado: Timestamp da última tentativa
- Último Sucesso: Timestamp da última entrega bem-sucedida
- Última Falha: Timestamp da última falha
Solução de Problemas
Não Receber Webhooks
Não Receber Webhooks
Verifique estes elementos:
- URL do webhook é publicamente acessível via HTTPS
- Firewall permite requisições POST de entrada do Gu1
- Endpoint retorna código de status 200 dentro de 30 segundos
- Webhook está configurado e habilitado no dashboard
- Ambiente correto selecionado (sandbox vs produção)
- Verifique logs do servidor para requisições de entrada
- Verifique que o webhook está inscrito nos tipos de evento corretos
Verificação de Assinatura Falhando
Verificação de Assinatura Falhando
Causas comuns:
- Usando segredo incorreto (verifique o dashboard para o segredo atual)
- Verificando assinatura no JSON com parsing em vez do body raw
- Segredo não salvo corretamente após criar webhook
- Problemas de codificação (garantir UTF-8)
Receber Webhooks Duplicados
Receber Webhooks Duplicados
Este é um comportamento normal. Os webhooks podem ser enviados múltiplas vezes devido a:
- Problemas de rede
- Timeouts
- Novas tentativas após falhas
validationId do webhook e o tipo de event.Endpoint de Webhook com Timeout
Endpoint de Webhook com Timeout
Seu endpoint deve responder dentro de 30 segundos. Se o processamento levar mais tempo:
Falta extractedData
Falta extractedData
extractedData e verifiedFields só são incluídos em:kyc.validation_approvedkyc.validation_rejected
validation_created ou validation_in_progress.Segredo de Webhook Perdido
Segredo de Webhook Perdido
Se você perdeu seu segredo de webhook:
- Vá para Configurações → Webhooks
- Selecione seu webhook
- Clique em Regenerar Segredo
- Salve o novo segredo nas suas variáveis de ambiente
- Atualize sua aplicação com o novo segredo