Saltar para o conteúdo principal
POST
curl

Suporte a KYC e KYB

A Didit descodifica o token de partilha, lê o session_kind incluído e cria uma cópia do tipo de sessão correspondente:
  • session_kind: "user": copia a sessão do utilizador e os respetivos registos de identidade, face, prova de vida, correspondência facial, AML, localização, POA, telefone, e-mail, validação de base de dados e registos de auditoria.
  • session_kind: "business": copia a sessão da empresa e os respetivos registos de verificação no registo de empresas, pessoas-chave, documentos, triagens AML, telefone, e-mail, localização, questionário e registos de auditoria.
Se o token for anterior ao lançamento unificado da partilha e não tiver o campo session_kind, a Didit assume "user" por compatibilidade com versões anteriores.

O que é criado

  • Uma nova sessão do mesmo tipo na sua aplicação, com um session_id, session_number e session_url novos.
  • O campo shared_from_session da nova sessão aponta para a sessão original na aplicação de origem.
  • O estado da nova sessão é o estado original (trust_review: true) ou IN_REVIEW (trust_review: false).
  • Se não existir, é criada automaticamente uma nova entidade (Utilizador ou Empresa) para o vendor_data.

Exemplos

Resposta (201 Criada):

Parâmetro trust_review

Erros

Idempotência

Importar o mesmo share_token duas vezes para a mesma aplicação é recusado com 403, tanto para sessões de utilizadores como de empresas.

Relacionados

Autorizações

x-api-key
string
header
obrigatório

A chave de API da sua aplicação, a partir de Programadores -> Chaves de API na Business Console. A chave principal tem acesso total. Uma chave nomeada pode ter o âmbito definido: nenhum, 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á incorreta, 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 o pedido veio de um endereço fora da sua lista de IP; 404 numa rota de sessão significa que a sessão está fora dos fluxos ou estados da chave. Uma chave sem acesso a multimédia recebe URLs de imagens, vídeos e PDFs como nulos, e uma chave sem permissão de escrita em sessões recebe ligações de sessão e tokens como nulos. Consulte https://docs.didit.me/console/api-keys.

Corpo

application/json
share_token
string
obrigatório

Token JWT de partilha 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 origem. Se false, é forçada para In Review.

Exemplo:

false

workflow_id
string<uuid>
obrigatório

UUID de um fluxo na aplicação que fez a chamada. Os IDs entre aplicações são rejeitados com 404.

Exemplo:

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

vendor_data
string | null

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

Exemplo:

"user-1"

Resposta

Sessão clonada. O corpo é o payload de decisão V3 para ambos os tipos, diferenciados por session_kind: "user" (KYC) com blocos de funcionalidades baseados em listas, tais como id_verifications, liveness_checks, 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 utilizadores (KYC) ou de Verificação de empresas (KYB). Quando for user, aplicam-se os arrays de funcionalidades de KYC (id_verifications, nfc_verifications, liveness_checks, face_matches, poa_verifications, document_ai_documents, database_validations, ...) e os arrays da empresa estão ausentes. Quando for business, o payload inclui registry_checks, document_verifications, key_people_checks, além dos arrays partilhados (aml_screenings, phone_verifications, email_verifications, ip_analyses, questionnaire_responses). Omitido quando include=events é transmitido — a estrutura de eventos apenas existe para sessões de utilizador, pelo que o discriminador é removido nessa 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 qualquer outra sessão. Omitido quando include=events é especificado.

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. Caso contrário, null.

session_number
integer | null

O número da sessão.

session_url
string<uri> | null

O URL da sessão.

status
enum<string>

Estado global do ciclo de vida da sessão — o resultado agregado 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á a avançar no 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 status manualmente. null quando o estado é automático. Utilize-o para distinguir uma aprovação manual de uma automática.

decision_trace
object

Como o estado foi alcançado: quem o definiu e que avisos o originaram.

linked_records
object | null

Um resumo de outros registos associados à sessão. null quando não há nada a apresentar e para fluxos que declarem 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, e não a versão específica.

features
string[]

Lista de funcionalidades de verificação configuradas para esta sessão, como nomes de apresentaçã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 (KYB) utilizam o conjunto de funcionalidades de KYB: KYB_REGISTRY, KYB_DOCUMENTS, KYB_KEY_PEOPLE, AML, PHONE, EMAIL_VERIFICATION, IP_ANALYSIS, QUESTIONNAIRE). Com include=events, cada entrada torna-se um objeto {feature, node_id} em vez de uma string simples, e a funcionalidade de e-mail é renomeada: aparece como EMAIL no modo de eventos em vez do EMAIL_VERIFICATION aqui utilizado.

A funcionalidade da sessão.

vendor_data
string | null

Os dados de fornecedor da sessão.

metadata
object | null

Os metadados da sessão.

expected_details
object | null

Dados esperados fornecidos na criação da sessão — utilizados para validação cruzada com os dados extraídos (KYC) ou para pré-preencher a pesquisa no registo de empresas (KYB). Devolve exatamente as mesmas chaves que foram fornecidas; null quando nenhum dado foi fornecido. As sessões de KYC contêm os campos da pessoa; as sessões de empresas (KYB) contêm company_name, registry_country e registration_number.

contact_details
object | null

Detalhes de contacto fornecidos quando a sessão foi criada (utilizados para e-mails de notificação, verificação pré-preenchida de telefone/e-mail e idioma de comunicação). null quando não foi fornecido nem um e-mail nem um número de telefone.

callback
string<uri> | null

O URL de retorno da sessão.

id_verifications
object[] | null

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

nfc_skip_reason
enum<string> | null

O motivo pelo qual a verificação do chip NFC não foi executada, preenchido sempre que o fluxo incluir um passo de NFC. null enquanto o NFC estiver pendente ou quando o chip tiver sido efetivamente lido. Valores: USER_SKIPPED - o utilizador optou por ignorar num dispositivo compatível com NFC (permitido por allow_nfc_skip); DOCUMENT_WITHOUT_CHIP - o documento não possui nenhum chip NFC legível (não é um documento eletrónico ICAO 9303); CHIP_CERTIFICATE_UNAVAILABLE - o certificado de assinatura do país emissor (CSCA) que abrange o período de emissão do documento não está disponível, pelo que a assinatura do chip não pode ser verificada; DEVICE_WITHOUT_NFC - o dispositivo indicou que não tem leitor NFC; INTEGRATION_WITHOUT_NFC_ACCESS - a verificação foi executada sem um SDK nativo (por exemplo, num navegador web), que não tem acesso ao leitor NFC do telemóvel; MRZ_KEY_UNAVAILABLE - não foi possível obter a chave de acesso ao chip a partir da MRZ do documento; JPKI_UNAVAILABLE - o documento é um Japan My Number Card, cujo chip é lido através de JPKI, e o JPKI não estava disponível para esta verificação: não está ativado, ou o SDK nativo da aplicação 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 / passaporte eletrónico produzidos por passos de NFC no grafo do fluxo. Isto é sempre um array JSON, nunca um objeto nfc singular — leia nfc_verifications[0] e itere se o seu fluxo puder executar NFC mais do que uma vez. null até que pelo menos um passo de NFC tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, chip_protocol, chip_data, authenticity (integridade de SOD + DG), certificate_summary e warnings[]. O cartão My Number do Japão é lido através de JPKI em vez do ICAO 9303: o seu item tem chip_protocol: "jpki", contém as suas evidências em jpki e deixa os campos ICAO a null. Quando o passo de NFC foi ignorado antes de poder ser oferecido (documento sem chip, certificado em falta, nenhuma capacidade NFC reportada, chave MRZ ilegível, JPKI indisponível para um cartão My Number), este permanece null e nfc_skip_reason explica o motivo; ignorar no próprio passo (o utilizador tocou em «Ignorar», ou o leitor revelou-se indisponível no momento da leitura) continua a produzir um relatório com is_nfc_skipped: true.

liveness_checks
object[] | null

Array de relatórios de prova de vida produzidos por passos de prova de vida no grafo do fluxo. Sempre um array JSON — nunca um objeto liveness singular. null até que pelo menos um passo de prova de vida tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, 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 por passos de correspondência facial no grafo do fluxo. Sempre um array JSON — nunca um objeto face_match singular. null até que pelo menos um passo de correspondência facial tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, 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 singular. null até que pelo menos um passo de telefone tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, o número de telefone e 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 singular. null até que pelo menos um passo de e-mail tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, o endereço de e-mail, dados de violações de segurança, lifecycle[], matches[] e warnings[].

poa_verifications
object[] | null

Array de relatórios de Comprovativo de morada (POA) — sempre um array JSON, nunca um objeto poa singular. null até que pelo menos um passo de POA tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, o URL do ficheiro do documento, emissor, datas, morada analisada e warnings[].

document_ai_documents
object[] | null

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

questionnaire_responses
object[] | null

Array de relatórios de respostas a questionários — sempre um array JSON, nunca um objeto questionnaire singular. null até que pelo menos um passo de questionário tenha produzido dados. Cada item é o relatório completo, incluindo node_id, os metadados do questionário, secções com elementos de formulário e as respostas do utilizador.

bank_verifications
object[] | null

Resultados da Verificação bancária, um item por passo de Verificação bancária, para Verificação de utilizadores e Verificação de empresas (KYB). null até que um passo produza um. O method de cada item indica como a conta foi verificada: open_banking (início de sessão bancário) ou account_lookup (verificação de conta), ou uma alternativa por statement ou microdeposits, e none quando a pessoa continuou sem banco antes de qualquer tentativa ser avaliada (continued_without_bank). Consulte Métodos de verificação bancária.

signatures
object[]

Resultados da Assinatura eletrónica, um item por signatário e passo de assinatura, para Verificação de utilizadores e Verificação de empresas. Presente apenas quando o fluxo tem um passo de Assinatura eletrónica; uma matriz vazia até que um signatário o atinja. Consulte o Relatório de assinatura eletrónica.

aml_screenings
object[] | null

Array de relatórios de triagem AML — sempre um array JSON, nunca um objeto aml no singular. null até que pelo menos um passo de AML tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, 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 singular. null até que pelo menos um passo de análise de IP tenha produzido dados. Cada item é o relatório completo, incluindo node_id, status ao nível da funcionalidade, dados de IP e geolocalização, impressão digital do dispositivo e warnings[]. As entradas com (node_id, ip_address, device_fingerprint) duplicados são deduplicadas no servidor.

geolocation_checks
object[] | null

Array de resultados de verificação de localização, um por passo de verificação de localização: a tentativa aceite desse passo. null até que um passo de verificação de localização tenha produzido dados. As tentativas anteriores do mesmo passo estão em geolocation_attempts.

geolocation_attempts
object[] | null

Cada tentativa de cada passo de verificação de Localização desta sessão, da mais antiga para a mais recente. As tentativas substituídas por um novo envio são excluídas. Um fluxo que omita geolocation_checks através dos respetivos atributos de resposta também omite esta lista.

database_validations
object[] | null

Array de relatórios de Validação de base de dados — sempre um array JSON, nunca um objeto database_validation singular. null até que pelo menos um passo de validação de base de dados tenha gerado dados. Cada item é o relatório completo, incluindo node_id, o status ao nível da funcionalidade, screened_data, as validations[] por serviço (cada uma com o seu source_data do registo) 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}. Utiliza a validação biométrica de correspondência facial do RENAPER. O género é inferido automaticamente a partir da análise facial ou do nome próprio quando não se encontra presente no documento (por exemplo, em cartas de condução)

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 inclui sempre {identification_number, first_name, last_name, date_of_birth, lgpd_minor, minor_under_18, minor_under_16} para correspondências bem-sucedidas de CPF. Consultas de adultos bem-sucedidas definem esses sinalizadores como false. O serviço Consulta CPF da Receita Federal pode devolver HTTP 422 (menor de 18 anos) ou 451 (menor de 16 anos) com dados retidos pela LGPD; nesses casos, source_data define os sinalizadores de menor como true conforme apropriado, inclui o código de estado HTTP do serviço a montante e a validação ao nível do campo é no_match. Consulte a secção do Brasil da referência de Códigos de Resultado de Validação de base de dados para 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} (devolve apenas valid/invalid)

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}. Utiliza o registo civil do RENAPO. Está também disponível um serviço independente de verificação de validade do INE para o MEX como uma validação adicional individual.

PAN (Panamá): screened_data: {personal_number, selfie}. source_data: {identification_number}. Utiliza 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

O motivo pelo qual uma validação de base de dados configurada não produziu nenhum resultado, como {code, message} mais campos de contexto. Presente apenas quando database_validations é null num fluxo que tem o passo, para que possa distinguir "o registo concordou" de "nada foi executado". null nos restantes casos.

reviews
object[]
assignee
object | null

O revisor da consola ao qual a sessão está atribuída, ou null quando não está atribuída a ningué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 a sua aplicação defina um prazo de revisão.

sla_due_at
string<date-time> | null

Quando a revisão deve ser concluída. null a menos que a sessão esteja In Review e a sua aplicação defina um prazo de revisão.

created_at
string<date-time>

Carimbo de data/hora em que a sessão foi criada (ISO 8601, UTC).

expires_at
string<date-time> | null

Carimbo de data/hora em que esta sessão está agendada para expirar. Definido em sessões de Verificação de utilizadores (KYC) quando foi configurada uma expiração no momento da criação (ou assim que o estado Approved acionar o cálculo de expiração do KYC). null para sessões sem uma expiração configurada e para tipos que não utilizam 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 registo de empresas. Presente apenas quando session_kind = business. Cada item contém o payload completo do registo de empresas.

key_people_checks
object[] | null

Verificações agregadas de pessoas-chave. Presente apenas quando session_kind = business. Cada item usa o formato de dois contentores (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 em produção (live) ou por uma aplicação sandbox (sandbox). As sessões 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 nenhum.

resubmissions
object[]

Retornado apenas com include=resubmissions, para sessões de utilizador e de empresa. Uma entrada por pedido de nova submissão, da mais antiga para a mais recente. Cada entrada contém os resultados que os passos ressubmetidos retornaram antes do pedido, para que as submissões anteriores permaneçam legíveis. A eliminação da sessão elimina todas as submissões.

Se a sessão exigiu consentimento biométrico explícito antes de uma captura facial, o motivo e a evidência da resposta. Apenas sessões de Verificação de utilizadores (KYC); o mesmo objeto está na decision dos webhooks da sessão. null quando a sessão nunca foi avaliada, por exemplo, num fluxo sem captura facial. Campos sem valor registado são null. Um SDK nativo anterior à versão 4.10.0, ou um que não reporte a sua versão, não consegue apresentar o passo de consentimento: as respetivas capturas faciais são executadas como anteriormente, e uma sessão que tenha exigido consentimento reporta status: "pending" com reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK". Consulte Consentimento biométrico.

investigator
object | null

A revisão mais recente do Investigator sobre o item, ou nulo se nunca tiver tido nenhuma. Transmitida pela decisão da sessão V3 e da sessão empresarial (e, portanto, por webhooks status.updated).

biometric_retention
object

Quando os dados biométricos em tempo real desta sessão são eliminados.

fraud_check
object | null

O resultado de uma chamada à API Fraud Check. null para qualquer outra sessão.

full_session_video
string<uri> | null

URL temporário da gravação completa da sessão. Devolvido apenas quando a sua organização grava vídeo da sessão completa.

full_session_video_recorded_at
string<date-time> | null

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

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