Saltar para o conteúdo principal
POST
cURL

Suporte a KYC e KYB

Um único endpoint cria sessões de Verificação de utilizadores e de Verificação de empresas. O tipo do fluxo determina qual delas é criada:
  • Passe o workflow_id de um fluxo de KYC → é criada uma sessão de Verificação de utilizadores (KYC). Resposta session_kind: "user".
  • Passe o workflow_id de um fluxo de KYB → é criada uma sessão de Verificação de empresas (KYB). Resposta session_kind: "business".
Configure os fluxos na consola em Workflows → Create workflow. Um fluxo é de KYC ou de KYB no momento da criação; depois não é possível mudar de tipo.

Exemplos

Resposta (201 Created):

Documentos de assinatura eletrónica

Quando o fluxo tem um passo de Assinatura eletrónica que recebe os documentos da sessão (signature_documents_source definido como session ou both), envie-os em sign.documents. Cada documento é o ficheiro em base64, para que a Didit nunca tenha de o obter a partir de um URL.
Sem fields, o signatário lê o documento e concorda com ele.

Colocar campos por texto de âncora

Em vez de uma posição, um campo pode ter uma anchor: um trecho de texto no documento que marca onde o campo fica. As âncoras são indicadas para documentos que gera para cada sessão, por exemplo a partir de um modelo Word. Nos documentos do fluxo, coloque os campos na consola. Quando o texto não existe no documento, a chamada devolve 400 com field_anchor_not_found e a chave do campo. A Didit não remove o texto da âncora do PDF, por isso escreva-o na mesma cor do fundo da página.

Valores dos campos

sign.field_values define o valor de cada campo cujo prefill é api.<key>, tanto nos documentos do fluxo como nos documentos da sessão. É um objeto indexado por esses nomes <key>. Os valores são cadeias de 1 a 500 caracteres para os campos text e data, e booleanos para um checkbox.

Erros e chamadas repetidas

Uma sessão aceita até 20 documentos e 50 MB no total. A chamada devolve 400 com um erro de sign quando:
  • O fluxo não tem passo de Assinatura eletrónica.
  • Enviou sign.documents e o passo só aceita documentos do fluxo.
  • O passo aceita apenas documentos da sessão e não enviou nenhum, ou não tem documentos do fluxo e não enviou nenhum.
  • Um documento é demasiado grande, não é base64 válido ou não é um ficheiro suportado.
  • Um ficheiro Word é recusado com signature_document_not_supported, ou não pode ser convertido e devolve signature_document_conversion_failed, cada um com o reason indicado em Ficheiros suportados.
  • Um campo é inválido, a sua âncora não é encontrada (field_anchor_not_found), ou um valor de campo é recusado.
Voltar a chamar a operação de criação para o mesmo workflow_id e vendor_data devolve a sessão pendente. Se essa chamada enviar sign, os seus documentos, campos e valores de campos têm de ser idênticos aos da primeira (mesma ordem, títulos, nomes de ficheiros, conteúdo, campos e valores). Qualquer diferença devolve 400 com {"sign": "signature_document_changed"}: use um vendor_data diferente ou aguarde até que a sessão pendente termine.

Testes com cenários de sandbox

Numa aplicação em modo sandbox, envie sandbox_scenario para pré-carregar um resultado determinístico (aprovação, uma recusa específica ou um cenário Em análise), sem contactar fornecedores reais nem tocar no seu saldo:
sandbox_scenario é rejeitado com 400 em aplicações de produção. Se ainda não conhecer o resultado no momento da criação, configure (ou volte a configurar) o cenário mais tarde através de POST /v3/session/{session_id}/sandbox/arm/, desde que a sessão ainda esteja no estado Not Started: o seletor de cenários pré-fluxo do fluxo alojado usa este mesmo endpoint. Consulte Sandbox e dados de teste para o catálogo completo de cenários, o registo de valores mágicos e o formato do pedido e da resposta do endpoint de configuração.

O vendor_data associa a sessão a uma entidade

  • Para fluxos de KYC: associa-se a uma entidade de utilizador. Se o utilizador não existir, é criado automaticamente.
  • Para fluxos de KYB: associa-se a uma entidade empresarial. Criada automaticamente se for nova.
Saiba mais em associação de dados do fornecedor.

Consentimento biométrico em Illinois, no Texas e no Colorado

O fluxo alojado e o SDK nativo 4.10.0 ou posterior podem mostrar um passo de consentimento biométrico explícito antes da primeira captura facial, consoante o modo de consentimento da aplicação e o local onde a pessoa se encontra. Dois campos opcionais alimentam essa decisão:
  • user_state: onde a pessoa reside, quando o souber (US-IL, IL ou Illinois). No modo Automático, um estado abrangido faz com que o fluxo peça o consentimento.
  • biometric_consent: um objeto com given_at e text_version, para consentimento que já recolheu. O fluxo não volta a pedir.
Os SDK nativos anteriores à versão 4.10.0 não conseguem mostrar este passo: as respetivas sessões funcionam como antes e a decisão indica que o consentimento não foi recolhido. Consulte Consentimento biométrico.

Importante: a divulgação e o consentimento continuam a ser feitos no seu produto

Create Session gera um URL de verificação e um token de sessão. Por si só, não prova que mostrou ao utilizador as informações fornecidas ao utilizador ou que obteve o consentimento exigido pelo seu caso de utilização específico. Se iniciar uma sessão Didit a partir da sua própria aplicação, website, wrapper de SDK ou fluxo com marca branca, deve tratar da componente jurídica na sua própria experiência de utilização antes de o utilizador iniciar a captura.

Lista de verificação recomendada antes da verificação

  1. Informe o utilizador de que a sua empresa está a pedir a verificação e de que a Didit é o fornecedor de verificação / subcontratante que suporta o fluxo.
  2. Ligue ao seu aviso de privacidade e a quaisquer termos jurídicos do responsável pelo tratamento que se apliquem ao percurso.
  3. Ligue ao Aviso de Privacidade de Verificação da Didit e aos Termos do Utilizador Final para Verificação de Identidade.
  4. Se o seu fluxo incluir captura de documento, captura de selfie, prova de vida ou dados biométricos, recolha consentimento explícito e afirmativo sempre que a lei aplicável ou a sua posição jurídica o exija.
  5. Se utilizar uma interface personalizada, um domínio próprio ou um percurso apenas por API, apresente estas informações no seu próprio produto antes de enviar o utilizador para o fluxo da Didit.
  6. Guarde o seu próprio registo do texto do aviso ou do consentimento, da data e hora e dos metadados relacionados, se a sua equipa jurídica exigir um rasto de auditoria.
As exigências legais variam consoante a jurisdição. A personalização com marca branca não elimina o papel da Didit no fluxo de verificação. Reveja a sua implementação com um advogado antes do lançamento se operar em jurisdições com regras específicas para dados biométricos.

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
workflow_id
string<uuid>
obrigatório

Identificador estável do fluxo que define quais os passos de verificação que a sessão irá executar. Os fluxos são criados e geridos na página Fluxos da Consola. O workflow_id também seleciona implicitamente se a sessão é KYC ou KYB.

Exemplo:

"11111111-2222-3333-4444-555555555555"

vendor_data
string

Um identificador exclusivo para o utilizador a ser verificado, como um UUID, e-mail ou ID de utilizador interno. Este campo é utilizado para: (1) Agrupamento de utilizadores — as sessões com o mesmo vendor_data são associadas ao mesmo perfil de utilizador no separador Utilizadores. (2) Deteção de duplicados entre sessões — ao verificar rostos, documentos, números de telefone, e-mails, endereços IP ou impressões digitais de dispositivos duplicados, as sessões com o mesmo vendor_data são tratadas como o mesmo utilizador e excluídas das correspondências. Sem vendor_data, cada sessão é tratada como um utilizador único e todos os potenciais duplicados são apresentados. Recomendamos vivamente fornecer sempre um vendor_data para reduzir o ruído na deteção de duplicados.

Exemplo:

"user-123"

multi_account_segment
string

Domínio de deteção de duplicados opcional dentro da sua organização. As verificações de rostos duplicados comparam esta sessão apenas com outras sessões que tenham o mesmo segmento, para que bases de contas separadas (contas pessoais e empresariais, ou uma por subcliente B2B) não sinalizem uma pessoa que detenha legitimamente uma conta em cada uma. Omita este campo para utilizar o domínio predefinido único, que é o que todas as sessões utilizam atualmente. A correspondência com a lista de bloqueio e a lista de permissões ignora este campo.

Maximum string length: 64
Exemplo:

"business-accounts"

callback
string

URL para redirecionar o utilizador após a conclusão da verificação. A Didit anexa automaticamente verificationSessionId e status (Approved, Declined, In Review) como parâmetros de consulta. Esquemas de URL personalizados (por exemplo, myapp://) são suportados para callbacks móveis. Se omitido, é utilizado o callback_url predefinido do fluxo. Quando a aplicação tem domínios permitidos (allowed_domains em PATCH /v3/webhook/), um callback http ou https deve pertencer a uma dessas origens (mesmo esquema, anfitrião e porta), caso contrário o pedido falha com 400 em callback: callback must be on one of the application's allowed domains: https://app.example.com. Esquemas de URL personalizados são sempre aceites.

Exemplo:

"https://example.com/verification/callback"

callback_method
enum<string>
padrão:initiator

Determina que dispositivo deve processar o redirecionamento para o URL de retorno fornecido. Utilize initiator para redirecionar apenas o dispositivo que iniciou o fluxo, completer para o dispositivo que o conclui, ou both para permitir que qualquer um dos dispositivos acione o callback. Se alguma vez notar que o callback não está a ser acionado de forma fiável, recomendamos definir este valor como both.

Opções disponíveis:
initiator,
completer,
both
Exemplo:

"both"

metadata
any

JSON arbitrário guardado com a sessão e devolvido na resposta e nos webhooks. Qualquer valor JSON é aceite (objeto, string, número, array), mas recomenda-se um objeto JSON de pares chave/valor. Não visível para o utilizador final. Utilize-o para passar os seus próprios IDs de correlação, variantes A/B ou contexto de negócio.

Exemplo:
tags
string[]

Etiquetas adicionadas à sessão quando esta é criada, por nome. Até 10, cada uma com até 50 carateres. Os nomes não diferenciam maiúsculas de minúsculas e são guardados em maiúsculas. Um nome que ainda não exista na aplicação é criado como uma nova etiqueta. As etiquetas são apresentadas na sessão na consola, onde pode filtrar por elas.

Maximum array length: 10
Maximum string length: 50
Exemplo:
language
enum<string>

Código de idioma (ISO 639-1) para a interface do processo de verificação. Controla o idioma apresentado ao utilizador final durante a verificação. Se não for fornecido, o idioma do navegador será detetado e utilizado automaticamente. Consulte todos os idiomas suportados aqui.

Opções disponíveis:
en,
ar,
bg,
bn,
bs,
ca,
cnr,
cs,
da,
de,
el,
es,
et,
fa,
fi,
fr,
he,
hi,
hr,
hu,
hy,
id,
it,
ja,
ka,
kk,
ko,
ky,
lt,
lv,
mk,
mn,
ms,
nl,
no,
pl,
pt-BR,
pt,
ro,
ru,
sk,
sl,
so,
sq,
sr,
sv,
th,
tr,
uk,
uz,
vi,
zh-CN,
zh-TW,
zh
Exemplo:

"en"

contact_details
object

Informações de contacto do utilizador que podem ser utilizadas para notificações, pré-preenchimento de formulários de verificação e verificação de telefone. Isto inclui o endereço de e-mail, o idioma preferido para comunicações e o número de telefone.

Exemplo:
expected_details
object

Dados esperados do utilizador utilizados para validação cruzada com os dados extraídos do documento de identificação do utilizador, Comprovativo de morada e outros passos de verificação. As discrepâncias são apresentadas como avisos na decisão; alguns campos (por exemplo, id_country, expected_document_types) também alteram o fluxo apresentado ao utilizador. Para fluxos de Verificação de empresas (KYB), apenas os campos da empresa (company_name, registry_country, registration_number) são utilizados — pré-preenchem a pesquisa no registo de empresas para o utilizador — e todos os campos a nível de pessoa são ignorados.

Exemplo:
portrait_image
string<byte>

Imagem de retrato do rosto do utilizador final codificada em base64 (máx. 2MB; JPEG, PNG, WebP ou TIFF). Usada como imagem de referência para comparar com a captura de prova de vida quando o fluxo é um fluxo de Biometric Authentication com a Correspondência facial ativada, ou qualquer fluxo em grafo onde a Correspondência facial seja executada antes da Verificação de identidade (OCR). Opcional quando o utilizador em vendor_data já possui uma imagem de rosto guardada: a Didit reutiliza-a automaticamente, resolvida pela seguinte ordem de prioridade: rosto de prova de vida aprovado, fotografia do chip de ePassport, retrato do documento de identificação, rosto de perfil registado manualmente (apenas rostos de sessões aprovadas ou rostos registados por si são reutilizados). Quando fornecida, portrait_image tem sempre precedência sobre o rosto guardado. Se for omitida e não existir nenhum rosto guardado (ou vendor_data não for enviado), a criação da sessão falha com 400. Ignorado para outros tipos de fluxo.

Exemplo:

"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="

sandbox_scenario
string

Slug de cenário exclusivo da sandbox. Só é aceite quando a chave de API pertence a uma aplicação em modo sandbox; é rejeitado em aplicações de produção. Quando definido, o fluxo de criação expande os valores mágicos incluídos no cenário para os campos de entrada da sessão (contact_details, expected_details) para que os fornecedores simulados reproduzam o resultado do cenário através do pipeline real do fluxo. Consulte o catálogo de cenários em GET /v1/sandbox/scenarios/ ou Sandbox e dados de teste. Também pode armar (ou rearmar) um cenário após a criação através de POST /v3/session/{sessionId}/sandbox/arm/, desde que a sessão ainda esteja em Not Started. Para pesquisas que não sejam de documentos, utilize lookup_partial_match, lookup_no_match ou lookup_provider_error para testar o orçamento de tentativas configurado e o fallback. Para carteiras de identidade, utilize wallet_cancelled, wallet_timeout ou wallet_provider_error; approve simula uma carteira verificada. Todas as carteiras do catálogo podem ser testadas na sandbox, incluindo esquemas indisponíveis em aplicações de produção. As tentativas simuladas não são cobradas.

Exemplo:

"decline_document_expired"

sign
object

Entrada de Assinatura eletrónica para esta sessão. documents são os documentos a assinar, para um fluxo cujo passo de Assinatura eletrónica obtém documentos da sessão (signature_documents_source como session ou both): até 20 documentos e 50 MB no total. field_values preenche os campos cujo prefill seja api.<key>, tanto em documentos do fluxo como da sessão. Criar novamente uma sessão para o mesmo workflow_id e vendor_data devolve a sessão pendente; se essa chamada enviar sign, os seus documentos, campos e valores têm de ser idênticos aos primeiros, e qualquer diferença devolve 400 com {"sign": "signature_document_changed"}. Consulte Documentos de assinatura eletrónica.

user_state
string

Onde a pessoa reside, quando for do seu conhecimento: um código de subdivisão ISO 3166-2 (US-IL, ES-M) ou um código ou nome de estado dos EUA (IL, Illinois). Um estado cuja legislação exija consentimento biométrico explícito (Illinois, Texas, Colorado) faz com que o fluxo de verificação o solicite antes de capturar um rosto, com o acionador declared_state. Um valor não reconhecido devolve 400. Consulte Consentimento biométrico.

Maximum string length: 16
Exemplo:

"US-IL"

Consentimento biométrico explícito que já recolheu da pessoa. Cumpre o requisito, pelo que o fluxo de verificação não volta a pedir, e a decisão regista-o como status: "given" com o acionador customer_collected. Uma resposta que a pessoa já tenha dado no fluxo nunca é substituída. Consulte Consentimento biométrico.

Resposta

Sessão criada (ou devolvida, se já existir uma sessão não finalizada com o mesmo vendor_data na versão publicada mais recente do fluxo). A resposta é a sessão serializada, incluindo o url de verificação alojada para o qual redirecionar o utilizador.

session_id
string<uuid>
obrigatório

Identificador único da sessão de verificação. Utilize este id ao chamar GET /v3/session/{sessionId}/decision/.

Exemplo:

"11111111-2222-3333-4444-555555555555"

session_number
integer
obrigatório

Número sequencial e de fácil leitura atribuído à sessão dentro da sua aplicação. Útil para suporte e painéis.

Exemplo:

43762

session_token
string
obrigatório

Token de 12 carateres seguro para URL que autoriza o utilizador final a aceder ao fluxo de verificação alojado em url. Válido até a sessão expirar. Trate-o como um segredo — qualquer pessoa que o possua pode abrir o fluxo de verificação para esta sessão.

Exemplo:

"3FaJ9wLqX2Mz"

url
string<uri>
obrigatório

URL de verificação alojado para o qual redirecionar o utilizador final. O URL incorpora o session_token e, se configurado, utiliza o seu domínio de marca branca. Quando o pedido inclui language, o URL contém um segmento de caminho de idioma — https://verify.didit.me/{language}/session/{session_token} (ex.: /es/session/...); sem language, o segmento é omitido.

Exemplo:

"https://verify.didit.me/session/3FaJ9wLqX2Mz"

vendor_data
string | null
obrigatório

Identificador transmitido no pedido para associar a sessão a um utilizador ou empresa no seu próprio sistema. Devolvido tal como foi enviado. Nulo quando não fornecido.

Exemplo:

"user-123"

metadata
any
obrigatório

Payload JSON arbitrário que guardou com a sessão no momento da criação. Devolvido tal como enviado — qualquer valor JSON que enviou (objeto, string, número, array) é devolvido inalterado, embora se recomende um objeto JSON. Não visível para o utilizador final. Sempre presente nas respostas; null quando não fornecido no momento da criação.

Exemplo:
status
enum<string>
obrigatório

Estado atual da sessão. Sessões recém-criadas devolvem Not Started. Se já existia uma sessão não terminada para os mesmos vendor_data na versão mais recente publicada do fluxo, o estado devolvido reflete essa sessão existente.

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

"Not Started"

callback
string<uri> | null
obrigatório

URL de redirecionamento final para onde o utilizador é enviado após concluir o fluxo. O Didit anexa ?verificationSessionId={session_id}&status={status} a este URL. Recai para o URL de retorno configurado no fluxo quando não for fornecido no pedido; null quando nenhum estiver definido. Quando a aplicação tem domínios permitidos e este URL for um URL web fora deles (por exemplo, uma predefinição do fluxo definida antes da alteração da lista), o fluxo alojado não redireciona o utilizador para ele.

Exemplo:

"https://example.com/verification/callback"

workflow_id
string<uuid>
obrigatório

Identificador estável do fluxo em que esta sessão é executada. É sempre o identificador de grupo estável do fluxo — mesmo que tenha referenciado o UUID de uma versão específica do fluxo no pedido (pesquisa compatível com versões anteriores), a resposta contém o workflow_id estável. Utilize-o para correlacionar a sessão com o fluxo configurado na Consola.

Exemplo:

"11111111-2222-3333-4444-555555555555"

workflow_version
integer
obrigatório

Número da versão publicada do fluxo à qual a sessão ficou associada no momento da criação. O Didit resolve o workflow_id para a versão publicada mais recente do fluxo quando a sessão é criada, e a sessão continua a executar essa versão mesmo que o fluxo seja republicado mais tarde.

Exemplo:

3

tags
string[]

As etiquetas na sessão, por nome.

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