Inyo

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

CampoDescrição
session_idO identificador da verificação. Use-o com GET /v1/sessions/{session_id}
user_refSeu identificador, retornado exatamente como você o forneceu
statusOnde a verificação terminou — veja Status
auto_statusO que o pipeline decidiu antes de qualquer roteamento de revisão ou decisão humana — veja Revisão Manual
documentDados extraídos do documento
personDados de identidade extraídos
checksAs checagens individuais que produziram a decisão — veja Lendo checks[]
prefill_mismatchesNomes dos campos de prefill que divergiram do documento. Vazio a menos que você tenha enviado prefill
prefill_comparisonDetalhe da comparação por campo — veja Comparação de prefill
selfie_descriptionDescrição estruturada da aparência, ou null a menos que esteja habilitada para o seu tenant
providerinyo para uma verificação real, inyo-mock para uma simulada — veja Sandbox
manual_reviewPresente somente após uma decisão humana. Veja Revisão Manual
notified_atPresente somente em notificações entregues, não no resultado armazenado. Use-o para ordenar entregas concorrentes — veja Recebendo Resultados

document

CampoDescrição
typePassport, Driver's License ou Identity Card
numberNúmero do documento tal como lido no documento
personal_numberIdentificador nacional secundário quando o documento o possui
issuing_stateAutoridade emissora conforme impressa — um estado dos EUA em carteiras de motorista, um código de país em passaportes
issuing_countryPaís resolvido em ISO 3166-1 alpha-3
issuing_country_nameNome 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_issueYYYY-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

statusSignificadoO que fazer
pendingCriada, ainda não concluídaAguarde. Nenhuma decisão existe ainda
approvedTodas as checagens passaramProssiga com o onboarding
declinedPelo menos uma checagem hard falhouNão prossiga. O detail da checagem que falhou explica o motivo
in_reviewUm humano decide — não é finalTrate como pendente. Veja Revisão Manual
expiredO cliente nunca a concluiu dentro da validade do linkCrie uma nova sessão se ainda precisar da verificação

Lendo checks[]

Toda checagem tem exatamente quatro campos: name, passed, score, detail.

RegraDetalhe
passed é autoritativoÉ o resultado da checagem. Não o rederive de scorescore e detail explicam o resultado, mas não o definem
score é 0-100, quanto maior, melhorExpressa 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 limiarQuando 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 variaAs 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.

ChecagemFalha quandoPresente
document_authenticUm telefone, monitor ou tela está visível no quadro — o documento está sendo fotografado a partir de um displaySempre
screen_patternPadrões de tela/moiré indicam uma recaptura mesmo sem dispositivo no quadroQuando pelo menos um lado capturado pôde ser analisado
ai_authenticityA análise do documento identifica uma recaptura, impressão, fotocópia ou falsificaçãoQuando habilitada para o seu tenant (ativa por padrão)
document_readableOs campos centrais de identidade (número, nome, data de nascimento) não puderam ser todos extraídosSempre
document_not_expiredA data de expiração está no passadoQuando o documento traz uma data de expiração
jurisdiction_acceptedO país emissor do documento está fora das jurisdições que você aceita para aquele tipo de documentoQuando você configurou jurisdições aceitas
face_detectedNão há exatamente um rosto utilizável — olhos fechados, óculos de sol ou cabeça muito viradaQuando uma selfie foi capturada
livenessA confiança de prova de vida está abaixo do seu limiarQuando uma selfie foi capturada
face_matchA similaridade entre o retrato do documento e a selfie está abaixo do seu limiarQuando uma selfie foi capturada

Checagens soft encaminham a verificação para in_review em vez de recusá-la.

ChecagemFalha quandoPresente
mrz_validUm dígito verificador do MRZ não valida — um erro de OCR ou adulteraçãoQuando o documento tem zona de leitura mecânica
document_number_formatO 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 automaticamenteQuando existe uma regra para aquela jurisdição
dmv_record_matchOs dados extraídos de uma carteira de motorista dos EUA divergem do registro do DMV emissorQuando a verificação no DMV está habilitada para o seu tenant (desativada por padrão)
data_matchOs dados que você enviou divergem do documentoQuando 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 }
]
CampoDescrição
fieldUm de first_name, last_name, date_of_birth, document_type, document_number, nationality, issuing_state
sent / receivedSeu valor e o valor lido do documento
matchSe são considerados iguais
methodPara 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 / thresholdSimilaridade 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