Pular para o conteúdo principal
POST
curl

Suporte a KYC e KYB

A Didit decodifica o token de compartilhamento, lê o session_kind incorporado e clona o tipo de sessão correspondente:
  • session_kind: "user": clona a sessão de usuário e os registros relacionados de identidade, face, prova de vida, correspondência facial, AML, localização, comprovante de endereço, telefone, e-mail, validação de banco de dados e logs.
  • session_kind: "business": clona a sessão de empresa e os registros relacionados de consulta ao registro de empresas, pessoas-chave, documentos, triagens AML, telefone, e-mail, localização, questionário e logs.
Se o token for anterior à implantação do compartilhamento unificado e não tiver o campo session_kind, a Didit usa "user" por padrão, para manter a compatibilidade com versões anteriores.

O que é criado

  • Uma nova sessão do mesmo tipo na sua aplicação, com novos session_id, session_number e session_url.
  • O campo shared_from_session da nova sessão aponta para a sessão original na aplicação de origem.
  • O status da nova sessão é o status original (trust_review: true) ou IN_REVIEW (trust_review: false).
  • Uma nova entidade (Usuário ou Empresa) é criada automaticamente para o vendor_data caso ainda não exista.

Exemplos

Resposta (201 Created):

Parâmetro trust_review

Erros

Idempotência

Importar o mesmo share_token duas vezes na mesma aplicação é recusada com 403, tanto para sessões de usuário quanto de empresa.

Conteúdos relacionados

Autorizações

x-api-key
string
header
obrigatório

Chave de API da sua aplicação, em Developers -> API keys no Business Console. A chave principal tem acesso total. Uma chave nomeada pode ter escopo restrito: nenhum acesso, leitura ou escrita por recurso, limitada a alguns fluxos ou a sessões aprovadas, a uma lista de endereços IP e a uma data de validade. 401 significa que a chave está errada, revogada ou expirada; 403 significa que nenhuma chave foi enviada, que a chave não tem acesso a este recurso ou ação, ou que a requisição veio de um endereço fora da sua lista de IPs; 404 em uma rota de sessão significa que a sessão está fora dos fluxos ou status da chave. Uma chave sem acesso a mídia recebe URLs de imagem, vídeo e PDF como null, e uma chave sem permissão de escrita em sessões recebe links e tokens de sessão como null. Consulte https://docs.didit.me/console/api-keys.

Corpo

application/json
share_token
string
obrigatório

Token de compartilhamento JWT emitido por POST /v3/session/{sessionId}/share/.

Exemplo:

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

trust_review
boolean
obrigatório

Se true, a sessão clonada mantém o status final da sessão de origem. Se false, ela é forçada para In Review.

Exemplo:

false

workflow_id
string<uuid>
obrigatório

UUID de um fluxo de verificação (workflow) na aplicação que faz a chamada. IDs de outras aplicações são rejeitados com 404.

Exemplo:

"9f9b1234-aaaa-bbbb-cccc-1234567890ab"

vendor_data
string | null

Substituição opcional do vendor_data da sessão clonada.

Exemplo:

"user-1"

Resposta

Sessão clonada. O corpo é o payload de decisão V3 para os dois tipos, diferenciados por session_kind: "user" (KYC), com blocos de recursos em lista como id_verifications, liveness_checks e aml_screenings; "business" (KYB), com blocos como registry_checks e key_people_checks. Ambos incluem shared_from_session, o session_id da sessão original na aplicação de origem. Com trust_review: false, o status da sessão clonada é forçado para In Review.

session_id
string<uuid>

O identificador único da sessão.

session_kind
enum<string>

Discriminador que indica se esta é uma sessão de Verificação de usuários (KYC) ou de Verificação de empresas (KYB). Quando user, os arrays de recursos de KYC (id_verifications, nfc_verifications, liveness_checks, face_matches, poa_verifications, document_ai_documents, database_validations, ...) se aplicam e os arrays de empresa estão ausentes. Quando business, o payload traz registry_checks, document_verifications, key_people_checks, além dos arrays compartilhados (aml_screenings, phone_verifications, email_verifications, ip_analyses, questionnaire_responses). Omitido quando include=events é passado: o formato com eventos existe apenas para sessões de usuário, por isso o discriminador é removido dessa variante.

Opções disponíveis:
user,
business
shared_from_session
string<uuid> | null

Para uma sessão clonada com POST /v3/session/import-shared/: o session_id da sessão original na aplicação de origem. null para todas as outras sessões. Omitido quando include=events é enviado.

shared_from_session_number
integer | null

session_number da sessão de origem, quando esta sessão foi importada de outra aplicação da sua organização. null caso contrário.

session_number
integer | null

O número da sessão.

session_url
string<uri> | null

A URL da sessão.

status
enum<string>

Status geral do ciclo de vida da sessão — o resultado consolidado do fluxo. Os valores finais são Approved, Declined, In Review, Expired, Kyc Expired e Abandoned; Not Started, In Progress, Awaiting User e Resubmitted indicam que a sessão ainda está avançando pelo fluxo.

Opções disponíveis:
Not Started,
In Progress,
Awaiting User,
In Review,
Approved,
Declined,
Resubmitted,
Expired,
Kyc Expired,
Abandoned
status_override
object | null

Presente quando um revisor definiu o status manualmente. null quando o status é o automático. Use-o para distinguir uma aprovação manual de uma automática.

decision_trace
object

Como o status foi alcançado: quem o definiu e quais avisos o determinaram.

linked_records
object | null

Um resumo de outros registros vinculados à sessão. null quando não há nada a mostrar e para fluxos que declaram um padrão de garantia de idade.

workflow_id
string<uuid> | null

Identificador estável do grupo de fluxos que gerou esta sessão. Os fluxos são versionados: este valor identifica o fluxo em si, não a versão específica.

features
string[]

Lista dos recursos de verificação configurados para esta sessão, como nomes de exibição: ID_VERIFICATION, NFC, LIVENESS, FACE_MATCH, POA, PHONE, EMAIL_VERIFICATION, AML, IP_ANALYSIS, DATABASE_VALIDATION, QUESTIONNAIRE, AGE_ESTIMATION, FACE_SEARCH, GEOLOCATION (verificação de localização) (as sessões de Verificação de empresas usam o conjunto de recursos de KYB: KYB_REGISTRY, KYB_DOCUMENTS, KYB_KEY_PEOPLE, AML, PHONE, EMAIL_VERIFICATION, IP_ANALYSIS, QUESTIONNAIRE). Com include=events, cada entrada se torna um objeto {feature, node_id} em vez de uma string simples, e o recurso de e-mail é renomeado: ele aparece como EMAIL no modo de eventos em vez do EMAIL_VERIFICATION usado aqui.

O recurso da sessão.

vendor_data
string | null

Os dados do fornecedor (vendor data) da sessão.

metadata
object | null

Os metadados da sessão.

expected_details
object | null

Dados esperados informados na criação da sessão, usados para validação cruzada com os dados extraídos (KYC) ou para pré-preencher a busca no registro de empresas (KYB). Retorna exatamente as chaves que foram informadas; null quando nenhuma foi informada. Sessões de KYC trazem os campos da pessoa; sessões de empresa (KYB) trazem company_name, registry_country e registration_number.

contact_details
object | null

Dados de contato informados na criação da sessão (usados para e-mails de notificação, verificação de telefone/e-mail pré-preenchida e idioma de comunicação). null quando não foi informado nem e-mail nem número de telefone.

callback
string<uri> | null

A URL de retorno da sessão.

id_verifications
object[] | null

Array de relatórios de verificação de identidade (OCR) produzidos pelas etapas de documento de identidade no grafo do fluxo. Sempre um array JSON: leia id_verifications[0] e itere se o seu fluxo puder executar mais de uma verificação de identidade (por exemplo, uma verificação principal mais uma verificação adicional). Fica null até que pelo menos uma etapa de identidade tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, os campos extraídos do documento, URLs das imagens, pontuações de qualidade, MRZ, análise do endereço, correspondências entre sessões e warnings[].

nfc_skip_reason
enum<string> | null

Motivo pelo qual a verificação do chip NFC não foi executada, preenchido sempre que o fluxo inclui uma etapa NFC. null enquanto o NFC estiver pendente ou quando o chip foi de fato lido. Valores: USER_SKIPPED - o usuário optou por pular a etapa em um dispositivo compatível com NFC (permitido por allow_nfc_skip); DOCUMENT_WITHOUT_CHIP - o documento não tem um chip NFC legível (não é um documento eletrônico ICAO 9303); CHIP_CERTIFICATE_UNAVAILABLE - o certificado de assinatura (CSCA) do país emissor que cobre o período de emissão do documento não está disponível, portanto a assinatura do chip não pode ser verificada; DEVICE_WITHOUT_NFC - o dispositivo informou que não tem leitor NFC; INTEGRATION_WITHOUT_NFC_ACCESS - a verificação foi executada sem um SDK nativo (por exemplo, em um navegador web), que não tem acesso ao leitor NFC do celular; MRZ_KEY_UNAVAILABLE - não foi possível derivar a chave de acesso ao chip a partir da MRZ do documento; JPKI_UNAVAILABLE - o documento é um My Number Card japonês, cujo chip é lido via JPKI, e o JPKI não estava disponível para esta verificação: ele não está habilitado ou o SDK nativo do aplicativo não consegue ler My Number Cards.

Opções disponíveis:
USER_SKIPPED,
DOCUMENT_WITHOUT_CHIP,
CHIP_CERTIFICATE_UNAVAILABLE,
DEVICE_WITHOUT_NFC,
INTEGRATION_WITHOUT_NFC_ACCESS,
MRZ_KEY_UNAVAILABLE,
JPKI_UNAVAILABLE
nfc_verifications
object[] | null

Array de relatórios de NFC / ePassport produzidos pelas etapas de NFC no grafo do fluxo. É sempre um array JSON, nunca um objeto nfc único: leia nfc_verifications[0] e itere se o seu fluxo puder executar NFC mais de uma vez. Fica null até que pelo menos uma etapa de NFC tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, chip_protocol, chip_data, authenticity (integridade de SOD + DG), certificate_summary e warnings[]. Um My Number Card do Japão é lido por meio de JPKI em vez de ICAO 9303: o item correspondente tem chip_protocol: "jpki", traz suas evidências em jpki e deixa os campos ICAO como null. Quando a etapa de NFC foi ignorada antes mesmo de poder ser oferecida (documento sem chip, certificado ausente, nenhuma capacidade de NFC informada, chave MRZ ilegível, JPKI indisponível para um My Number Card), este campo permanece null e nfc_skip_reason explica o motivo; um pulo na própria etapa (o usuário tocou em pular ou o leitor se mostrou indisponível no momento da leitura) ainda gera um relatório com is_nfc_skipped: true.

liveness_checks
object[] | null

Array de relatórios de prova de vida produzidos pelas etapas de prova de vida no grafo do fluxo. Sempre um array JSON, nunca um objeto liveness único. Fica null até que pelo menos uma etapa de prova de vida tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, method, score, reference_image, video_url, age_estimation opcional, matches[] entre sessões e warnings[].

face_matches
object[] | null

Array de relatórios de correspondência facial produzidos pelas etapas de correspondência facial no grafo do fluxo. Sempre um array JSON, nunca um objeto face_match único. Fica null até que pelo menos uma etapa de correspondência facial tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, a score de similaridade, source_image, target_image e warnings[].

phone_verifications
object[] | null

Array de relatórios de verificação de telefone: sempre um array JSON, nunca um objeto phone único. Fica null até que pelo menos uma etapa de telefone tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, o número de telefone e os metadados do país, lifecycle[], matches[] e warnings[].

email_verifications
object[] | null

Array de relatórios de verificação de e-mail: sempre um array JSON, nunca um objeto email único. Fica null até que pelo menos uma etapa de e-mail tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, o endereço de e-mail, dados de vazamentos, lifecycle[], matches[] e warnings[].

poa_verifications
object[] | null

Array de relatórios de Comprovante de endereço (POA): sempre um array JSON, nunca um objeto poa único. Fica null até que pelo menos uma etapa de POA tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, a URL do arquivo do documento, o emissor, as datas, o endereço analisado e warnings[].

document_ai_documents
object[] | null

Relatórios de Document AI agrupados por nó do fluxo — sempre um array JSON, nunca um objeto único. null até que pelo menos uma etapa de Document AI tenha produzido dados. Presente apenas quando session_kind = user. Cada item é um grupo de nó com um status agregado, o node_id, um array items[] com os resultados por documento (dados extraídos indexados pela chave de campo configurada) e warnings.

questionnaire_responses
object[] | null

Array de relatórios de respostas de questionário: sempre um array JSON, nunca um objeto questionnaire único. Fica null até que pelo menos uma etapa de questionário tenha produzido dados. Cada item é o relatório completo, incluindo node_id, os metadados do questionário, as seções com elementos de formulário e as respostas do usuário.

bank_verifications
object[] | null

Resultados da Verificação bancária, um item por etapa de Verificação bancária, para Verificação de usuários e Verificação de empresas. null até que uma etapa produza um. O method de cada item indica como a conta foi verificada: open_banking (login no banco) ou account_lookup (consulta da conta), ou um fallback por statement ou microdeposits, e none quando a pessoa continuou sem banco antes que qualquer tentativa fosse avaliada (continued_without_bank). Consulte Métodos de verificação bancária. A Verificação bancária ainda não está habilitada em produção, então este campo permanece null nas sessões de produção até que esteja.

signatures
object[]

Resultados de assinatura eletrônica, um item por signatário e etapa de assinatura, para Verificação de usuários e Verificação de empresas. Presente somente quando o fluxo tem uma etapa de Assinatura eletrônica; é um array vazio até que um signatário chegue a ela. Consulte o relatório de assinatura eletrônica.

aml_screenings
object[] | null

Array de relatórios de análise AML: sempre um array JSON, nunca um objeto aml único. É null até que pelo menos uma etapa de AML tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, total_hits, entity_type, hits[], score, screened_data, is_ongoing_monitoring_enabled e warnings[].

ip_analyses
object[] | null

Array de relatórios de Análise de dispositivo e IP: sempre um array JSON, nunca um objeto ip_analysis único. Fica null até que pelo menos uma etapa de análise de IP tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, dados de IP e geolocalização, a impressão digital do dispositivo e warnings[]. Entradas com (node_id, ip_address, device_fingerprint) duplicados são desduplicadas no servidor.

geolocation_checks
object[] | null

Array de resultados de verificação de localização, um por etapa de verificação de localização: a tentativa aceita dessa etapa. Fica null até que uma etapa de verificação de localização tenha produzido dados. As tentativas anteriores da mesma etapa estão em geolocation_attempts.

geolocation_attempts
object[] | null

Todas as tentativas de todas as etapas de verificação de localização desta sessão, da mais antiga para a mais recente. Tentativas substituídas por um reenvio ficam de fora. Um fluxo que oculta geolocation_checks por meio dos seus atributos de resposta também oculta esta lista.

database_validations
object[] | null

Array de relatórios de Validação de banco de dados — sempre um array JSON, nunca um objeto database_validation singular. null até que pelo menos uma etapa de validação de banco de dados tenha produzido dados. Cada item é o relatório completo, incluindo node_id, o status no nível do recurso, screened_data, as validations[] por serviço (cada uma com o source_data do respectivo registro) e warnings[]. Os campos screened_data e source_data variam por país:

ARG (Argentina): screened_data: {document_number, selfie, gender, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name, date_of_birth, date_of_death, tax_id, tax_id_type, face_match_score, sit_1_since, banks, last_position, highest_position, rejected_checks}. Usa a validação biométrica de correspondência facial do RENAPER. O gênero é inferido automaticamente a partir da análise facial ou do primeiro nome quando não consta no documento (por exemplo, carteiras de motorista)

BOL (Bolívia): screened_data: {document_number, date_of_birth, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name, date_of_birth, gender}

BRA (Brasil): screened_data: {tax_number, first_name, last_name, date_of_birth}. source_data sempre inclui {identification_number, first_name, last_name, date_of_birth, lgpd_minor, minor_under_18, minor_under_16} para correspondências de CPF bem-sucedidas. Consultas bem-sucedidas de adultos definem essas flags como false. O serviço Consulta CPF da Receita Federal pode retornar HTTP 422 (menor de 18 anos) ou 451 (menor de 16 anos) com dados retidos pela LGPD; nesses casos, source_data define as flags de menoridade como true conforme o caso, inclui o status HTTP retornado pela fonte e a validação no nível do campo é no_match. Consulte a seção Brasil da referência de códigos de resultado da Validação de banco de dados para ver a lista completa de códigos.

CHL (Chile): screened_data: {personal_number, first_name, last_name, date_of_birth}. source_data: {identification_number, first_name, last_name, date_of_birth, gender}

COL (Colômbia): screened_data: {document_number, document_type, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name, date_of_birth, document_type}

CRI (Costa Rica): screened_data: {personal_number, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name}

DOM (República Dominicana): screened_data: {personal_number}. source_data: {identification_number} (retorna apenas válido/inválido)

ECU (Equador): screened_data: {personal_number, first_name, last_name}. source_data: {identification_number, first_name, last_name, street, formatted_address, gender, nationality, education, marital_status, spouse, mother_name, father_name, profession}

ESP (Espanha): screened_data: {personal_number, document_type, expiration_date, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name, document_type, expiration_date}

GTM (Guatemala): screened_data: {document_number, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name}

HND (Honduras): screened_data: {document_number, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name}

MEX (México): screened_data: {personal_number (CURP), first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name, date_of_birth, gender, nationality, curp_status, state_of_birth, doc_probatorio, registration_year, registration_state, registration_municipality, num_acta, crip, issuing_state_code, foreign_registry_number, folio_carta, folio_certificado}. Usa o registro civil do RENAPO. Um serviço separado de verificação de validade do INE também está disponível para MEX como validação individual adicional.

PAN (Panamá): screened_data: {personal_number, selfie}. source_data: {identification_number}. Usa a validação biométrica do SIB

PER (Peru): screened_data: {personal_number (DNI), first_name, last_name}. source_data: {identification_number, first_name, last_name, paternal_name, maternal_name, verification_number, verification_letter}

PRY (Paraguai): screened_data: {document_number, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name}

SLV (El Salvador): screened_data: {document_number, date_of_birth, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name}

URY (Uruguai): screened_data: {personal_number, date_of_birth, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name}

VEN (Venezuela): screened_data: {document_number, first_name, last_name}. source_data: {identification_number, first_name, last_name, full_name, gender, date_of_birth, document_type}

database_validation_not_performed_reason
object | null

Motivo pelo qual uma validação de banco de dados configurada não produziu resultado, no formato {code, message} mais campos de contexto. Presente apenas quando database_validations é null em um fluxo que tem a etapa, para que você possa distinguir "o registro confirmou" de "nada foi executado". null nos demais casos.

reviews
object[]
assignee
object | null

O revisor do Console a quem a sessão está atribuída, ou null quando ninguém a detém.

waiting_since
string<date-time> | null

Quando a sessão começou a aguardar revisão. null, a menos que a sessão esteja In Review e sua aplicação defina um prazo de revisão.

sla_due_at
string<date-time> | null

Quando a revisão vence. null, a menos que a sessão esteja In Review e sua aplicação defina um prazo de revisão.

created_at
string<date-time>

Data e hora em que a sessão foi criada (ISO 8601, UTC).

expires_at
string<date-time> | null

Data e hora em que está prevista a expiração desta sessão. Definido em sessões de Verificação de usuários (KYC) quando uma expiração foi configurada no momento da criação (ou quando o status Approved aciona o cálculo de expiração do KYC). null para sessões sem expiração configurada e para tipos que não usam expiração (por exemplo, sessões de Verificação de empresas (KYB) que nunca receberam um expires_at).

registry_checks
object[] | null

Verificações no registro de empresas. Presente apenas quando session_kind = business. Cada item contém o payload completo do registro de empresas.

key_people_checks
object[] | null

Verificações agregadas das pessoas-chave. Presente apenas quando session_kind = business. Cada item usa o formato de dois grupos (registry, submitted, ubo_kyc_summary).

document_verifications
object[] | null

Verificações de documentos agrupadas por nó do fluxo. Presente apenas quando session_kind = business.

environment
enum<string>

Se a sessão foi criada por uma aplicação de produção (live) ou por uma aplicação de sandbox (sandbox). Sessões de sandbox são gratuitas, totalmente simuladas e nunca consomem créditos.

Opções disponíveis:
live,
sandbox
sandbox_scenario
string | null

O cenário de sandbox com o qual a sessão foi criada. null para sessões de produção e para sessões de sandbox criadas sem cenário.

resubmissions
object[]

Retornado apenas com include=resubmissions, para sessões de usuários e de empresas. Uma entrada por requisição de reenvio, da mais antiga para a mais recente. Cada entrada traz os resultados que as etapas reenviadas retornaram antes da requisição, para que os envios anteriores continuem legíveis. Excluir a sessão exclui todos os envios.

Se a sessão exigiu consentimento biométrico explícito antes de uma captura facial, o motivo e a evidência da resposta. Somente para sessões de Verificação de usuários (KYC); o mesmo objeto está na decision dos webhooks de sessão. null quando a sessão nunca foi avaliada, por exemplo, um fluxo de verificação (workflow) sem captura facial. Campos sem valor registrado são null. Um SDK nativo anterior à versão 4.10.0, ou um que não informa sua versão, não consegue exibir a etapa de consentimento: suas capturas faciais funcionam como antes, e uma sessão que exigiu consentimento passa a informar status: "pending" com reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK". Consulte Consentimento biométrico.

investigator
object | null

A revisão mais recente do item no Investigator, ou null quando ele nunca teve uma. Incluída na decisão da sessão V3 e da sessão de empresa (e, portanto, nos webhooks status.updated).

biometric_retention
object

Quando os dados biométricos ao vivo desta sessão são excluídos.

fraud_check
object | null

O resultado de uma chamada à Fraud Check API. null para todas as outras sessões.

full_session_video
string<uri> | null

URL temporária da gravação da sessão completa. Retornada somente quando sua organização grava vídeo da sessão completa.

full_session_video_recorded_at
string<date-time> | null

Quando a gravação da sessão completa foi feita. Retornado apenas quando sua organização grava vídeo da sessão completa.

Última modificação em 1 de novembro de 2026