Sessões de Verificação
Uma sessão representa uma verificação de identidade. Criá-la retorna uma widget_url que você entrega ao seu cliente e um session_id que você usa para correlacionar o resultado.
Criar uma Sessão
Endpoint: POST /v1/sessions
Autenticação: Token Bearer com o escopo sessions
curl --request POST \
--url https://{FQDN}/v1/sessions \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"user_ref": "user-123",
"language": "es",
"delivery": { "mode": "webhook" }
}'
{
"session_id": "9f1c8e42-7c3e-4f2b-9d7a-2b1e5c8f4a10",
"status": "pending",
"widget_url": "https://{FQDN}/verify/8Kd2mQ…"
}
Campos da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
user_ref | string (1-255) | Sim | Seu identificador para a pessoa sendo verificada. Devolvido em todos os resultados |
prefill | object | Não | Dados conhecidos sobre a pessoa — veja Prefill |
data_check | boolean | Não | false (padrão) verifica o documento conforme apresentado. true adicionalmente compara os dados extraídos com o prefill — veja Verificações de Dados |
delivery | object | Não | Como o resultado chega até você. O padrão é {"mode": "webhook"} |
language | string | Não | Idioma do widget, xx ou xx-XX (ex.: en, pt, es, pt-BR). Recorre ao seu padrão configurado |
max_capture_attempts | integer (1-10) | Não | Sobrescreve o padrão do seu tenant apenas para esta sessão |
Campos da Resposta
| Campo | Descrição |
|---|---|
session_id | Use-o para correlacionar resultados e para chamar GET /v1/sessions/{session_id} |
status | Sempre pending na criação |
widget_url | O link voltado ao cliente. Contém um código de uso único válido por 48 horas |
Prefill
O prefill carrega o que você já sabe sobre a pessoa. Ele tem dois efeitos distintos.
| Campo | Efeito |
|---|---|
document_type | passport, drivers_license ou identity_card. Trava o widget neste documento — a tela de seleção de tipo é pulada, e um documento diferente é rejeitado. Omita-o para deixar o cliente escolher |
document_number | Validado quanto ao formato nesta chamada (veja abaixo) e disponível para verificação cruzada |
issuing_state | Código ou nome de estado dos EUA para carteiras de motorista; país ISO 3166-1 alpha-3 para passaportes e carteiras de identidade. Refina a validação de formato |
nationality | ISO 3166-1 alpha-3. Usado para resolver a jurisdição quando issuing_state está ausente |
first_name, last_name | Disponíveis para verificação cruzada |
date_of_birth | YYYY-MM-DD. Disponível para verificação cruzada |
{
"user_ref": "user-123",
"prefill": {
"document_type": "drivers_license",
"issuing_state": "PA",
"document_number": "31612967",
"first_name": "Ana",
"last_name": "Silva",
"date_of_birth": "1988-03-04"
}
}
Campos de prefill diferentes de document_type não alteram a decisão a menos que você defina data_check: true. Sem isso, os valores são carregados para comparação e reportados no resultado, mas uma divergência não encaminha a sessão para lugar nenhum.
O prefill.document_number é validado nesta chamada, no entanto: um número que viola o formato conhecido de sua jurisdição é rejeitado com 422 em vez de ser aceito e reprovado depois. Verifique um número antes de chegar aqui com o endpoint validador.
Verificações de Dados
Defina data_check: true para verificar que o documento pertence à pessoa que você esperava — não apenas que o documento é genuíno.
{
"user_ref": "user-123",
"data_check": true,
"prefill": {
"first_name": "Ana",
"last_name": "Silva",
"date_of_birth": "1988-03-04"
}
}
Com data_check: true:
- Os dados extraídos são comparados campo a campo com o payload de prefill.
- O resultado carrega
prefill_comparison(resultados por campo, incluindo pontuações de correspondência aproximada de nomes) eprefill_mismatches(os nomes dos campos que divergiram). - Uma divergência adiciona uma verificação branda (soft check) reprovada, encaminhando a sessão para
in_reviewem vez de recusá-la.
Nomes são comparados com correspondência aproximada (fuzzy) contra um limiar de similaridade configurável, então variações comuns de grafia e transliteração não criam falsas divergências. data_check: true sem um payload de prefill é um 422 — não haveria nada com que comparar.
Entrega
| Modo | Campos | Comportamento |
|---|---|---|
webhook (padrão) | — | O resultado é enviado via POST para a sua webhook_url configurada |
redirect | redirect_url (obrigatório) | O cliente é retornado à sua URL com o resultado e uma assinatura |
{ "delivery": { "mode": "redirect", "redirect_url": "https://you.example/kyc-done" } }
Solicitar o modo webhook sem uma webhook_url configurada para o seu tenant é um 422. Veja Recebendo Resultados para a verificação de assinatura em ambos os modos.
Respostas de Erro
Todas estas retornam 422 com um detail explicando a causa específica:
| Causa | Notas |
|---|---|
delivery.mode é webhook mas nenhuma webhook_url está configurada | Peça à Inyo para registrar seu endpoint, ou use o modo redirect |
delivery.redirect_url ausente no modo redirect | Obrigatório sempre que mode for redirect |
document_type não está habilitado para o seu tenant | A mensagem lista os tipos de documento que você pode solicitar |
| A jurisdição emissora do documento não é aceita para esse tipo de documento | A mensagem lista as jurisdições que você aceita |
prefill.document_number falhou na validação de formato | A mensagem nomeia a regra que o rejeitou |
data_check: true sem payload de prefill | Forneça pelo menos um campo de prefill comparável |
Falhas de autenticação e autorização retornam 401 ou 403 — veja Autenticação.
Recuperar uma Sessão
Endpoint: GET /v1/sessions/{session_id}
Autenticação: Token Bearer com o escopo sessions
Este é o registro autoritativo de uma verificação. Consulte-o quando você precisar de uma garantia em vez de um push, para reconciliar um webhook que você pode ter perdido, ou para ler o resultado de uma sessão que foi para revisão manual.
curl --request GET \
--url https://{FQDN}/v1/sessions/$SESSION_ID \
--header "Authorization: Bearer $ACCESS_TOKEN"
{
"session_id": "9f1c8e42-7c3e-4f2b-9d7a-2b1e5c8f4a10",
"user_ref": "user-123",
"status": "in_review",
"step": "done",
"delivery_mode": "webhook",
"result": { "…": "the normalized result, updated in place" },
"created_at": "2026-07-31T14:02:11.481Z",
"updated_at": "2026-07-31T14:04:57.902Z"
}
| Campo | Descrição |
|---|---|
status | pending, approved, declined, in_review ou expired |
step | Até onde o cliente chegou: document_front, document_back, selfie ou done |
delivery_mode | webhook, redirect ou sync (uma verificação server-to-server) |
result | O resultado normalizado completo quando disponível, null antes disso. Atualizado no lugar quando um analista decide |
As sessões são estritamente limitadas ao tenant. O session_id de outro tenant retorna 404 — nunca uma divulgação parcial.
Validar um Número de Documento
Endpoint: POST /v1/validators/document-number
Autenticação: nenhuma necessária
Uma verificação de formato sem estado (stateless) contra o mesmo registro que o pipeline de verificação usa: formatos de carteira de motorista dos EUA para todos os 50 estados e DC, formatos de passaporte por país e formatos de carteira de identidade onde a jurisdição define um. Nada é armazenado e nenhuma verificação é consumida. Útil para validar a entrada no seu próprio formulário antes de criar uma sessão.
curl --request POST \
--url https://{FQDN}/v1/validators/document-number \
--header 'Content-Type: application/json' \
--data '{
"document_type": "drivers_license",
"number": "31612967",
"issuing_state": "PA"
}'
{
"document_type": "drivers_license",
"number": "31612967",
"issuing_state": "PA",
"valid": true,
"rule": "us_dl:PA",
"detail": "document number matches the PA license format"
}
valid é deliberadamente trivalorado:
| Valor | Significado | Como tratá-lo |
|---|---|---|
true | Corresponde ao formato conhecido para aquela jurisdição | Aceitar |
false | Viola o formato conhecido | Rejeitar antes de criar a sessão |
null | Não existe regra para aquela jurisdição | Aceitar — uma jurisdição desconhecida nunca é uma falha |
rule identifica qual regra foi aplicada — us_dl:PA, passport:USA, passport:generic, ou us_dl:unknown_state quando uma carteira de motorista foi enviada sem um estado resolvível (o que resulta em valid: null). issuing_state é um código ou nome de estado dos EUA para carteiras de motorista, e um código de país ISO 3166-1 alpha-3 para passaportes e carteiras de identidade.
Próximos Passos
- Entrega do Widget — conduzindo o cliente pelo fluxo
- Recebendo Resultados — tratamento de webhook e redirect
- Configuração do Tenant — quais tipos de documento e jurisdições você aceita
