Checagens e Decisões
Toda verificação — via widget ou servidor-a-servidor — resolve para o mesmo resultado normalizado. Esta página é a referência para interpretá-lo.
O Payload de Resultado
{
"session_id": "9f1c8e42-7c3e-4f2b-9d7a-2b1e5c8f4a10",
"user_ref": "user-123",
"status": "approved",
"auto_status": "approved",
"document": {
"type": "Passport",
"number": "A12345678",
"personal_number": null,
"issuing_state": "USA",
"issuing_country": "USA",
"issuing_country_name": "United States",
"expiration_date": "2033-09-30",
"date_of_issue": null
},
"person": {
"first_name": "ALEX",
"last_name": "MORGAN",
"full_name": "ALEX MORGAN",
"date_of_birth": "1988-03-04",
"gender": "F",
"nationality": "USA",
"address": null,
"city": null,
"region": null,
"postal_code": null
},
"checks": [
{ "name": "document_authentic", "passed": true, "score": null, "detail": "no screen-recapture signals" },
{ "name": "document_readable", "passed": true, "score": null, "detail": "all core fields extracted" },
{ "name": "mrz_valid", "passed": true, "score": null, "detail": "all check digits valid" },
{ "name": "document_not_expired", "passed": true, "score": null, "detail": "expiration_date 2033-09-30" },
{ "name": "document_number_format", "passed": true, "score": null, "detail": "passport:USA — document number matches the USA passport format" },
{ "name": "screen_pattern", "passed": true, "score": null, "detail": "screen/moiré score 0.42 vs threshold 0.8" },
{ "name": "ai_authenticity", "passed": true, "score": 95.0, "detail": "genuine document — physical document, consistent printing" },
{ "name": "face_detected", "passed": true, "score": null, "detail": "eyes_open=True sunglasses=False frontal=True" },
{ "name": "liveness", "passed": true, "score": 93.2, "detail": "heuristic (selfie mode): face confidence + quality vs threshold 80.0" },
{ "name": "face_match", "passed": true, "score": 98.7, "detail": "CompareFaces similarity vs threshold 90.0" }
],
"prefill_mismatches": [],
"prefill_comparison": [],
"selfie_description": null,
"provider": "inyo"
}
Campos de Nível Superior
| Campo | Descrição |
|---|---|
session_id | O identificador da verificação. Use-o com GET /v1/sessions/{session_id} |
user_ref | Seu identificador, retornado exatamente como você o forneceu |
status | Onde a verificação terminou — veja Status |
auto_status | O que o pipeline decidiu antes de qualquer roteamento de revisão ou decisão humana — veja Revisão Manual |
document | Dados extraídos do documento |
person | Dados de identidade extraídos |
checks | As checagens individuais que produziram a decisão — veja Lendo checks[] |
prefill_mismatches | Nomes dos campos de prefill que divergiram do documento. Vazio a menos que você tenha enviado prefill |
prefill_comparison | Detalhe da comparação por campo — veja Comparação de prefill |
selfie_description | Descrição estruturada da aparência, ou null a menos que esteja habilitada para o seu tenant |
provider | inyo para uma verificação real, inyo-mock para uma simulada — veja Sandbox |
manual_review | Presente somente após uma decisão humana. Veja Revisão Manual |
notified_at | Presente somente em notificações entregues, não no resultado armazenado. Use-o para ordenar entregas concorrentes — veja Recebendo Resultados |
document
| Campo | Descrição |
|---|---|
type | Passport, Driver's License ou Identity Card |
number | Número do documento tal como lido no documento |
personal_number | Identificador nacional secundário quando o documento o possui |
issuing_state | Autoridade emissora conforme impressa — um estado dos EUA em carteiras de motorista, um código de país em passaportes |
issuing_country | País resolvido em ISO 3166-1 alpha-3 |
issuing_country_name | Nome de exibição de issuing_country (por exemplo, United States). Recorre ao próprio código quando não é um país reconhecido, e é null somente quando issuing_country é null |
expiration_date, date_of_issue | YYYY-MM-DD, ou null quando o documento não os traz |
person
first_name, last_name, full_name, date_of_birth, gender, nationality, address, city, region, postal_code.
Qualquer campo que o documento não traga — ou que não pôde ser lido — é null. Campos de endereço são comumente null em passaportes e preenchidos a partir de carteiras de motorista. Os nomes chegam como impressos no documento, o que em passaportes significa letras maiúsculas.
Status
status | Significado | O que fazer |
|---|---|---|
pending | Criada, ainda não concluída | Aguarde. Nenhuma decisão existe ainda |
approved | Todas as checagens passaram | Prossiga com o onboarding |
declined | Pelo menos uma checagem hard falhou | Não prossiga. O detail da checagem que falhou explica o motivo |
in_review | Um humano decide — não é final | Trate como pendente. Veja Revisão Manual |
expired | O cliente nunca a concluiu dentro da validade do link | Crie uma nova sessão se ainda precisar da verificação |
Lendo checks[]
Toda checagem tem exatamente quatro campos: name, passed, score, detail.
| Regra | Detalhe |
|---|---|
passed é autoritativo | É o resultado da checagem. Não o rederive de score — score e detail explicam o resultado, mas não o definem |
score é 0-100, quanto maior, melhor | Expressa a confiança de que a checagem foi satisfeita. É null sempre que a checagem é um simples passa/falha sem escalar comparável, o que é a maioria delas — apenas liveness, face_match e ai_authenticity carregam um |
detail cita o limiar | Quando uma checagem tem um limiar, detail o menciona. Os limiares de liveness e face_match são por tenant, então leia-os aqui em vez de assumir os padrões da plataforma |
| O conjunto varia | As checagens aparecem somente quando aplicáveis: mrz_valid requer uma zona de leitura mecânica, checagens faciais requerem uma selfie, e várias são habilitadas por tenant. Itere sobre o array; não o indexe posicionalmente nem assuma um comprimento fixo |
Duas checagens exigem tratamento explícito:
screen_pattern carrega score: null deliberadamente. Sua medição subjacente opera em uma escala invertida de 0-1 onde valores maiores significam mais parecido com tela, o que pareceria uma quase-falha ao lado das biometrias de 0-100. Publicá-la como score induziria mais ao erro do que informaria, então o valor bruto e seu limiar ficam em detail. Leia passed.
ai_authenticity carrega uma pontuação que você não deve usar como critério de decisão. A pontuação é a certeza do modelo em seu próprio veredito, orientada de modo que valores maiores significam "mais provavelmente genuíno". É apenas diagnóstica — a Inyo a exclui deliberadamente do roteamento de revisão. Isso não torna a checagem inerte: é uma checagem hard, e passed: false recusa a verificação de imediato, independentemente do que a pontuação diga.
As Checagens
Checagens hard reprovam a verificação — a falha de qualquer uma delas resulta em declined.
| Checagem | Falha quando | Presente |
|---|---|---|
document_authentic | Um telefone, monitor ou tela está visível no quadro — o documento está sendo fotografado a partir de um display | Sempre |
screen_pattern | Padrões de tela/moiré indicam uma recaptura mesmo sem dispositivo no quadro | Quando pelo menos um lado capturado pôde ser analisado |
ai_authenticity | A análise do documento identifica uma recaptura, impressão, fotocópia ou falsificação | Quando habilitada para o seu tenant (ativa por padrão) |
document_readable | Os campos centrais de identidade (número, nome, data de nascimento) não puderam ser todos extraídos | Sempre |
document_not_expired | A data de expiração está no passado | Quando o documento traz uma data de expiração |
jurisdiction_accepted | O país emissor do documento está fora das jurisdições que você aceita para aquele tipo de documento | Quando você configurou jurisdições aceitas |
face_detected | Não há exatamente um rosto utilizável — olhos fechados, óculos de sol ou cabeça muito virada | Quando uma selfie foi capturada |
liveness | A confiança de prova de vida está abaixo do seu limiar | Quando uma selfie foi capturada |
face_match | A similaridade entre o retrato do documento e a selfie está abaixo do seu limiar | Quando uma selfie foi capturada |
Checagens soft encaminham a verificação para in_review em vez de recusá-la.
| Checagem | Falha quando | Presente |
|---|---|---|
mrz_valid | Um dígito verificador do MRZ não valida — um erro de OCR ou adulteração | Quando o documento tem zona de leitura mecânica |
document_number_format | O número não corresponde ao formato conhecido de sua jurisdição. Consultiva — as tabelas de formato são publicadas-mas-imperfeitas, então isso nunca recusa automaticamente | Quando existe uma regra para aquela jurisdição |
dmv_record_match | Os dados extraídos de uma carteira de motorista dos EUA divergem do registro do DMV emissor | Quando a verificação no DMV está habilitada para o seu tenant (desativada por padrão) |
data_match | Os dados que você enviou divergem do documento | Quando você define data_check: true |
Uma checagem adicional aparece apenas no fluxo do widget: capture_attempts falha quando o cliente esgotou o limite de tentativas, o que recusa a sessão — veja Entrega via Widget.
Comparação de Prefill
Quando você envia prefill, o resultado relata como cada campo comparável se alinhou. prefill_mismatches é a lista curta de nomes de campos que divergiram; prefill_comparison traz o detalhe:
"prefill_comparison": [
{ "field": "last_name", "sent": "Silva", "received": "SILVA SANTOS", "match": true, "method": "subset", "score": 0.95, "threshold": 0.85 },
{ "field": "date_of_birth", "sent": "1988-03-04", "received": "1988-03-04", "match": true, "method": "exact", "score": null, "threshold": null },
{ "field": "issuing_state", "sent": "Florida", "received": "FL", "match": true, "method": "normalized", "score": null, "threshold": null }
]
| Campo | Descrição |
|---|---|
field | Um de first_name, last_name, date_of_birth, document_type, document_number, nationality, issuing_state |
sent / received | Seu valor e o valor lido do documento |
match | Se são considerados iguais |
method | Para nomes: exact, subset (um sobrenome composto que contém o seu, pontuado com 0.95), fuzzy (pontuação por similaridade) ou empty. Para estados e tipos de documento: normalized. Caso contrário, exact |
score / threshold | Similaridade do nome e o limiar de aceitação, null para campos que não são nomes |
Campos ausentes em qualquer um dos lados não são comparados, então nunca aparecem. Nomes usam correspondência fuzzy — acentos removidos, sobrenomes compostos aceitos como correspondências de subconjunto, erros próximos de OCR tolerados até o limiar — de modo que variações comuns de grafia não criam falsas divergências. Estados e tipos de documento são normalizados primeiro, e é por isso que Florida corresponde a FL.
Uma divergência só afeta a decisão quando você define data_check: true, o que adiciona a checagem soft data_match. Sem isso, a comparação é apenas informativa.
Descrição da Selfie
null a menos que a descrição de aparência esteja habilitada para o seu tenant. Quando presente, traz atributos observáveis da selfie para comparação em reverificações futuras:
"selfie_description": {
"estimated_age_low": 30,
"estimated_age_high": 40,
"skin_tone": "light",
"eye_color": "brown",
"hair_color": "dark brown",
"hair_style": "shoulder length, straight",
"facial_hair": "none",
"eyewear": "none",
"headwear": "none",
"distinguishing_features": ["small scar above left eyebrow"],
"notes": null
}
Qualquer atributo que não possa ser observado é null. Esses são dados pessoais sensíveis — veja a nota de conformidade em Configuração do Tenant antes de habilitá-la.
Transição da Convenção de Pontuação
Resultados criados antes do lançamento da convenção de pontuação atual diferem em dois aspectos: screen_pattern.score carregava uma probabilidade bruta de moiré de 0-1 (onde maior significava pior), e ai_authenticity.score usava uma escala indefinida. Registros pós-transição são identificáveis sem referência externa — screen_pattern.score é null, e nenhuma checagem carrega qualquer campo além dos quatro documentados acima. Se você armazena resultados históricos, baseie sua leitura nisso.
Próximos Passos
- Revisão Manual —
in_review,auto_statusemanual_review - Configuração do Tenant — os limiares contra os quais essas checagens são comparadas
- Recebendo Resultados — como esse payload chega até você
