Criar Validação KYC
Validação por sessão
Criar Validação KYC
Iniciar uma sessão de verificação KYC para uma entidade pessoa — na API KYC da gu1 para fluxos de verificação de identidade, com exemplos para create.
POST
Criar Validação KYC
Resumo
Este endpoint cria uma nova sessão de validação KYC para uma entidade pessoa usando um provedor de integração configurado. Após criar a validação, você receberá uma URL de verificação que pode compartilhar com seu cliente para completar a verificação de identidade.Diagrama de Fluxo Completo
Sequência desde a criação da entidade até a validação KYC (fluxo de produção; no sandbox com números de documento de teste o passo do provedor é omitido e a API retorna o resultado mock e os webhooks imediatamente—veja Dados mock no sandbox):Pontos-Chave no Fluxo
Pontos-Chave no Fluxo
1. Entidade e taxId duplicado
- Crie primeiro a entidade pessoa com
POST /api/entities(incluacountryCode). Se otaxIdjá existir na organização, a API retorna 409 e não cria duplicado; use o ID da entidade existente. - Você precisa de um
entityIdexistente para criar uma validação KYC.
global_gueno_validation_kycé o código padrão para KYC completo e funciona no sandbox sem configuração adicional.
- Em produção, a resposta inclui
providerSessionUrl. Envie essa URL ao seu usuário; eles completam o fluxo na página do provedor (documento + selfie). A URL é válida atéexpiresAt. - No sandbox, se o documento da entidade estiver na lista de teste, não há sessão do provedor: a API retorna 201 com status
pendinge momentos depois atualiza a validação e envia os webhooks (ex.:kyc.validation_approvedoukyc.validation_rejected), sem passo do usuário. Importante: Você deve ter um endpoint webhook configurado para receber as respostas - veja Dados mock no sandbox.
- Quando a validação termina, a API envia um webhook à sua URL. O evento é um de:
kyc.validation_approved,kyc.validation_rejected,kyc.validation_abandoned,kyc.validation_expired,kyc.validation_cancelled(não um único evento “completed”). O payload é o objeto de validação completo. - Você também pode fazer polling em
GET /api/kyc/validations/:idpara atualizações de status.
Pré-requisitos
Antes de criar uma validação KYC:- A entidade pessoa deve existir: Crie uma entidade pessoa usando a API de Entidades
- Integração KYC configurada: Sua organização deve ter um provedor de integração KYC ativado (ex:
global_gueno_validation_kyc) - API key válida: Autentique com sua chave API
Sandbox vs Produção: Ambientes sandbox NÃO requerem configuração de perfil ou pré-configuração. Você pode testar validações KYC imediatamente no sandbox com dados de teste. Ambientes de produção requerem:
- Onboarding da organização concluído
- Provedor de integração KYC ativado pela equipe gu1
- Saldo de créditos suficiente para operações KYC
Dados mock (sandbox)
No sandbox, quando o documento da entidade pessoa (taxId) coincide com um dos nossos valores de teste, a API retorna um resultado mock imediato (ex.: aprovado, rejeitado, cancelado) e envia os webhooks correspondentes, sem executar verificação real. O formato do documento não importa (ex.: 99.990.001 e 99990001 funcionam igual).
Para a lista completa de números de documento de teste por formato (Argentina DNI/CUIT, Brasil CPF/CNPJ), resultados esperados e exemplos de resposta, veja Dados mock no sandbox.
Comportamentos Importantes
taxId duplicado (POST /entities)
Múltiplas Validações KYC por Entidade
Você pode criar múltiplas validações KYC para a mesma entidade:- Cada validação recebe um ID e sessão únicos
- Apenas a validação aprovada mais recente é marcada como
isCurrent: true - Casos de uso: Re-verificação, validações expiradas, tentativas falhadas
Solicitação
Endpoint
Headers
Parâmetros de Query (opcionais)
Em
true, ativa a dupla verificação RENAPER para entidades da Argentina. Em estados terminais a API consulta o registro oficial (dados e, quando aplicável, biometria) e armazena o resultado em metadata. Somente se a verificação OCR KYC retornar o estado approved uma falha no cruzamento pode rejeitar automaticamente a validação; em in_review ou rejected o chequeo é informativo (enforcementApplied: false). Requer entidade da Argentina e credenciais RENAPER configuradas na organização.Parâmetros do Body
O UUID da entidade pessoa a verificarTipo:
string (uuid)O código do provedor de integração para validação KYCValor Padrão:
global_gueno_validation_kyc (recomendado para a maioria dos casos de uso)Tipo: string (comprimento mínimo: 1)O que é integrationCode?O
integrationCode identifica qual integração de provedor KYC usar para verificação. Pense nisso como selecionar o serviço de verificação.Códigos de Integração Disponíveis:global_gueno_validation_kyc- Recomendado - KYC completo com documento + selfie + comparação facial + liveness- Códigos personalizados podem ser configurados para sua organização (contate o suporte)
- Faça login no Dashboard gu1
- Navegue até Configurações → Integrações → Provedores KYC
- Seu código de integração ativo será listado lá
global_gueno_validation_kyc funciona imediatamente sem configuração.Igual ao query param. Em
true ativa a dupla verificação RENAPER para Argentina. Pode ser enviado no body ou como ?doubleCheckRenaper=true. Se ambos forem enviados, o query prevalece.Lista opcional de códigos de aviso KYC (strings exatos). Fica armazenada na validação como
metadata.omitWarnings. Ao concluir a sessão, se a validação ficaria em in_review, warnings não está vazio e todos os códigos em warnings aparecem nesta lista, a API define o status como approved e mantém os avisos para UI e auditoria. Se algum aviso não estiver em omitWarnings, o status permanece in_review. Se warnings estiver vazio com status in_review, não há autoaprovação. Códigos inválidos no body retornam 400. Quando a regra se aplica, metadata.kycOmitWarningsApplied registra o instante e os avisos correspondentes.Códigos não omitíveis (ex.: GUENO_CROSS_ENTITY_DUPLICATED) são rejeitados neste campo com 400 e sempre impedem autoaprovação por omit mesmo que constem em warnings.Tipo: string[] (cada elemento deve ser um código permitido; duplicados são ignorados)Resposta
Resposta Bem-sucedida (201 Created)
metadata.doubleChecks.renaper: true. Após aprovação e execução do chequeo, é preenchido metadata.responseDoubleChecks.renaper (ver Dupla verificação RENAPER).
Campos de Resposta
A URL de verificação para compartilhar com seu cliente
Status atual da validação. Valores possíveis:
pending- Validação criada, aguardando o cliente iniciarin_progress- Cliente completando a verificação (preenchendo formulário)in_review- Verificação completa, requer revisão manual da equipe de complianceapproved- Verificação bem-sucedidarejected- Verificação falhouexpired- Sessão de verificação expirada (ex. após 7 dias)abandoned- Cliente iniciou mas não completoucancelled- Validação cancelada manualmente
Após a aprovação, as chaves de mídia aparecem em
decision. Para baixar arquivos (imagens, vídeo), use GET /api/kyc/validations/:id/media?key=... com Authorization: Bearer. Detalhes: Obter mídia da validação KYC.Exemplo de Solicitação
Dupla verificação RENAPER (Argentina)
ComdoubleCheckRenaper: true e entidade da Argentina, em cada estado terminal (approved, rejected, in_review) a API executa verificação cruzada contra o registro oficial (RENAPER) quando há OCR suficiente. Rejeição automática por RENAPER somente se a verificação OCR KYC retornou o estado approved.
Como enviar
- Body:
{ "entityId": "...", "integrationCode": "...", "doubleCheckRenaper": true } - Query:
POST /api/kyc/validations?doubleCheckRenaper=truecom o mesmo body. Se ambos forem enviados, o query prevalece.
Onde o resultado é armazenado
Emmetadata.responseDoubleChecks.renaper. Códigos de mismatch (ex.: trâmite e vencimento) são adicionados a metadata.warnings sem substituir avisos anteriores da verificação OCR KYC. errorCode no objeto renaper mantém a primeira falha por compatibilidade; a UI pode listar todos os códigos em comparisonResults e warnings.
Campos de metadata.responseDoubleChecks.renaper:
| Campo | Tipo | Descrição |
|---|---|---|
verified | boolean | true se o chequeo passou. |
matchResult | string | "match" | "mismatch" | "error". |
verifiedAt | string | Timestamp ISO do chequeo. |
personalNumber | string | Número de trâmite do KYC. |
idTramitePrincipal | string | Número de trâmite do RENAPER. |
renaperData | object | Resposta bruta do RENAPER (ver forma de renaperData). |
comparisonResults | object | Comparação campo a campo entre OCR e registro (quando aplicável). |
renaperBiometric | object | Resultado biométrico ABIS (validate-dni): matchResult, score, renaperData (resposta bruta). |
errorCode | string | Presente se falhou; ver códigos abaixo. |
Forma de renaperData
É o body sem transformação retornado pelo registro via ms-providers (POST …/provider-records/renaper/data). A Gu1 repassa como está em metadata.responseDoubleChecks.renaper.renaperData. Os nomes dos campos estão em snake_case; todos são opcionais conforme o retorno do RENAPER em cada consulta.
Exemplo (dupla verificação bem-sucedida, matchResult: "match"):
| Situação | renaperData típico |
|---|---|
Erro antes de obter dados (ex.: RENAPER_DNI_MISSING) | {} |
Serviço indisponível (RENAPER_VERIFICATION_UNAVAILABLE) | { "error": "…", "code": "SERVICE_UNAVAILABLE" } |
| Cruzamento falhou com payload parcial do registro | Subconjunto de campos (ex.: id_tramite_principal, apellido, nombres, fecha_nacimiento) |
Forma de comparisonResults
Mapa por campo (dni, tramite, name, ejemplar, dateOfBirth, expirationDate). Cada entrada pode incluir:
| Campo | Tipo | Descrição |
|---|---|---|
compared | boolean | true se a comparação foi tentada; false se omitida por dados faltantes. |
passed | boolean | Resultado quando compared é true. |
skipReason | string | ocr_missing, renaper_missing ou both_missing quando não comparado. |
ocrValue | string | Valor extraído do OCR (se aplicável). |
renaperValue | string | Valor do registro RENAPER (se aplicável). |
similarityPercent | number | Apenas em name: similaridade Levenshtein (0–100). |
threshold | number | Apenas em name: limiar aplicado (ex.: 80). |
errorCode | string | Código de falha do campo (ex.: RENAPER_DNI_NOT_MATCH). |
ejemplar, o valor OCR é extractedData.ejemplar (ver campos de extractedData). A comparação ocorre quando existem ambos os valores OCR e RENAPER.
Exemplo — extractedData numa validação KYC aprovada (Argentina):
Forma de renaperBiometric
Objeto aninhado em metadata.responseDoubleChecks.renaper.renaperBiometric quando a org tem credenciais biométricas e a sessão KYC fornece selfie. O Gu1 envia uma selfie a validate-dni; o RENAPER compara com a foto do documento no registro.
| Campo | Tipo | Descrição |
|---|---|---|
verified | boolean | true quando resultado.match do chequeo biométrico ABIS é positivo. |
matchResult | string | "match" | "mismatch" | "error". |
score | number | Pontuação do chequeo biométrico (se aplicável). |
verifiedAt | string | Timestamp ISO do chequeo biométrico. |
renaperData | object | Resposta bruta de validate-dni (inclui resultado.match, resultado.score, etc.). |
submittedSelfieRef | string | Referência da selfie enviada: caminho de armazenamento (kyc/...) ou URL (https://...). |
submittedSelfieRefKind | string | Formato de submittedSelfieRef: s3_key (caminho interno) | url (URL pública). |
submittedSelfiePickedFrom | string | Origem em decision: liveness_reference_image ou face_match_target_image. |
errorCode | string | Se falhar (ex.: RENAPER_BIOMETRIC_NOT_MATCH). |
skipReason | string | Se não executado (ex.: selfie indisponível). |
Exemplo completo de responseDoubleChecks.renaper
renaperBiometric e entradas em comparisonResults podem ser omitidos conforme credenciais, dados OCR ou disponibilidade de selfie.
Códigos de erro (quando RENAPER falha)
O motivo da rejeição é um código emmetadata.warnings e em metadata.responseDoubleChecks.renaper.errorCode. A UI deve traduzir esses códigos.
| Código | Significado |
|---|---|
RENAPER_DNI_MISSING | Número de documento (DNI) não obtido na verificação. |
RENAPER_GENDER_MISSING | Género (M/F) obrigatório para chamar RENAPER. |
RENAPER_VERIFICATION_UNAVAILABLE | Não foi possível completar a verificação cruzada (ex.: rede). Tente novamente. |
RENAPER_DNI_NOT_MATCH | O número do documento não coincide com o registro oficial. |
RENAPER_TRAMITE_DATA_MISSING | Faltam dados para comparar o número de trâmite. |
RENAPER_TRAMITE_ID_NOT_MATCH | O número de trâmite do documento não coincide com o registro (exemplar antigo, vencido ou reemitido; a pessoa deve verificar novamente com documento vigente). |
RENAPER_NAME_NOT_MATCH | O nome do OCR está abaixo do limiar de 80% de similaridade com o registro RENAPER. |
RENAPER_EJEMPLAR_NOT_MATCH | O exemplar do documento não coincide com o registro RENAPER. |
RENAPER_DOB_NOT_MATCH | A data de nascimento do OCR não coincide com o registro RENAPER. |
RENAPER_EXPIRY_NOT_MATCH | A data de vencimento do OCR não coincide com o registro RENAPER. |
RENAPER_BIOMETRIC_NOT_MATCH | A selfie não coincide com a foto do documento no registro biométrico. |
RENAPER_BIOMETRIC_UNAVAILABLE | Não foi possível completar o chequeo biométrico (rede, credenciais ou serviço). |
Quando o RENAPER aplica enforce (rejeição automática)
| Estado da verificação OCR KYC | RENAPER executa? | Pode rejeitar por RENAPER? |
|---|---|---|
approved (aprovação direta) | Sim | Sim — falha no cruzamento → rejected |
in_review | Sim | Não — informativo; equipe decide na revisão manual |
rejected (verificação OCR ou regras Gu1) | Sim (se houver OCR) | Não — informativo; dados ficam em metadata |
Aprovação manual a partir de in_review (POST …/approve) | Não (reutiliza chequeo salvo) | Não — decisão humana |
metadata.responseDoubleChecks.renaper. Em in_review e rejected, códigos RENAPER com mismatch são adicionados a warnings junto com avisos da verificação OCR.
Próximos Passos
Depois que a validação for approved, leia as chaves emdecision e baixe os arquivos — veja Obter mídia da validação KYC.
Obter URL de KYC
Aprenda como recuperar a URL
Integração Webhook
Configure notificações webhook