Inyo

Verificaciones y decisiones

Toda verificación — por widget o servidor a servidor — se resuelve en el mismo resultado normalizado. Esta página es la referencia para interpretarlo.


El payload de resultado

{
  "sessionId": "9f1c8e42-7c3e-4f2b-9d7a-2b1e5c8f4a10",
  "userRef": "user-123",
  "status": "completed",
  "decision": "approved",
  "document": {
    "type": "passport",
    "number": "A12345678",
    "personalNumber": null,
    "issuingState": null,
    "issuingCountry": "USA",
    "issuingCountryName": "United States",
    "expirationDate": "2033-09-30",
    "dateOfIssue": null
  },
  "person": {
    "firstName": "ALEX",
    "lastName": "MORGAN",
    "fullName": "ALEX MORGAN",
    "dateOfBirth": "1988-03-04",
    "gender": "F",
    "nationality": "USA",
    "address": null,
    "city": null,
    "region": null,
    "postalCode": null
  },
  "checks": [
    { "name": "document_scene_clear",  "status": "passed", "group": "document", "severity": "low", "detail": "no screen-recapture signals" },
    { "name": "document_readable",     "status": "passed", "group": "document", "severity": "critical", "detail": "all core fields extracted" },
    { "name": "document_authentic",    "status": "passed", "group": "document", "severity": "high", "detail": "genuine — laminate sheen, crisp typography, natural depth" },
    { "name": "document_not_expired",  "status": "passed", "group": "document", "severity": "critical", "detail": "expirationDate 2033-09-30" },
    { "name": "document_number_valid", "status": "passed", "group": "document", "severity": "medium", "detail": "passport:USA — document number matches the USA passport format" },
    { "name": "document_mrz_valid",    "status": "passed", "group": "document", "severity": "low", "detail": "all check digits valid" },
    { "name": "face_detected",         "status": "passed", "group": "selfie",   "severity": "medium", "detail": "One face, fully visible and facing the camera." },
    { "name": "liveness",              "status": "passed", "group": "selfie",   "severity": "high", "detail": "heuristic (selfie mode): face confidence + quality vs threshold 80.0" },
    { "name": "face_match",            "status": "passed", "group": "selfie",   "severity": "high", "detail": "portrait-to-selfie similarity vs threshold 90.0" }
  ],
  "prefillMismatches": [],
  "prefillComparison": [],
  "provider": "inyo",
  "trustIndex": 100
}

Campos de nivel superior

CampoDescripción
sessionIdEl identificador de la verificación. Úselo con GET /v1/sessions/{sessionId}
userRefSu identificador, devuelto exactamente como usted lo suministró
statusDónde está la sesión en su ciclo de vida — vea Estado y decisión
decisionLo que Inyo concluyó. Presente solo bajo decisionamiento gestionado, y solo para una sesión que llegó a una evaluación — de lo contrario la clave está ausente, no null. Vea Estado y decisión
documentDatos extraídos del documento
personDatos de identidad extraídos
checksLas verificaciones individuales que produjeron la decisión — vea Cómo leer checks[]
prefillMismatchesNombres de los campos de prefill que no coincidieron con el documento. Vacío a menos que haya enviado prefill
prefillComparisonDetalle de comparación campo por campo — vea Comparación de prefill
selfieDescriptionDescripción estructurada de la apariencia. Presente solo cuando está habilitada para su tenant — de lo contrario la clave está ausente, no null
screeningCoincidencias de listas de sanciones detrás de un cribado fallido. Presente solo cuando hay algo que adjudicar — la clave está ausente cuando el cribado sale limpio, y ausente por completo si el cribado no está habilitado para su tenant. Vea Cribado de sanciones
trustIndexLa puntuación de la verificación, de 0 a 100
providerinyo para una verificación real, inyo-simulated para una dictada por un número de documento reservado — vea Sandbox
notifiedAtPresente solo en las notificaciones entregadas, no en el resultado almacenado. Úselo para ordenar entregas concurrentes — vea Recepción de Resultados

document

CampoDescripción
typepassport, drivers_license o identity_card — el mismo vocabulario que envía en prefill.documentType
numberNúmero de documento tal como se leyó del documento
personalNumberIdentificador nacional secundario cuando el documento lo incluye
issuingStateLa subdivisión tal como aparece impresa — un estado de EE. UU. para licencias. null en un pasaporte, que no lleva subdivisión; lea issuingCountry para el emisor
issuingCountryPaís resuelto en formato ISO 3166-1 alpha-3
issuingCountryNameNombre para mostrar de issuingCountry (por ejemplo United States). Recurre al código mismo cuando no es un país reconocido, y es null solo cuando issuingCountry es null
expirationDate, dateOfIssueYYYY-MM-DD, o null cuando el documento no lo incluye

person

firstName, lastName, fullName, dateOfBirth, gender, nationality, address, city, region, postalCode.

Cualquier campo que el documento no incluya — o que no pudo leerse — es null. Los campos de dirección suelen ser null en pasaportes y se completan a partir de licencias de conducir. Los nombres llegan tal como están impresos en el documento, lo que en pasaportes significa en mayúsculas.


Estado y Decisión

Son dos campos distintos. status dice dónde está la sesión; decision dice lo que Inyo concluyó, y solo existe si usted pidió que concluyéramos algo.

status — siempre presente

statusSignificadoQué hacer
pendingCreada, aún no completadaEspere
completedEl cliente terminó y la sesión fue evaluadaLea checks, trustIndex y decision, si lo tiene
failedLa captura nunca fue utilizable — en el widget, el cliente agotó los intentosCree una nueva sesión. No hay decision en una sesión failed
erroredUn fallo de plataforma detuvo la evaluación. Alcanzable solo en verificaciones server-to-serverRepita la llamada con una Idempotency-Key nueva. No hay decision, y nada llegó a un revisor

status nunca nombra un veredicto.

decision — solo en decisionamiento gestionado

decisionSignificadoQué hacer
approvedLa verificación quedó aprobadaContinúe con el onboarding
declinedLa verificación no quedó aprobadaNo continúe. Las filas failed en checks dicen el motivo
inconclusiveLa evidencia no resolvió el caso en ninguna dirección — finalNo continúe. No es una decisión en contra del cliente, así que una captura nueva y más nítida puede resolverlo
in_reviewUn humano está decidiendo — no es finalTrátela como pendiente. Vea Revisión Manual

Dos modos de decisionamiento. Bajo decisionamiento no gestionado — el predeterminado — Inyo publica la evaluación y usted decide: checks y trustIndex están ahí, y decision está totalmente ausente del payload. Bajo decisionamiento gestionado Inyo además llega a un veredicto, que es el campo decision, y puede enrutar la sesión a un revisor humano antes.

La clave queda ausente, no null. "decision" in payload distingue "nunca le íbamos a dar una decisión" de una decisión que no pudimos alcanzar — esta última no existe.


Cómo leer checks[]

Cada verificación tiene exactamente seis campos: name, status, group, severity, reason, detail.

CampoQué hacer con él
status"passed", "failed", "undetermined" o "not_evaluated". Es la autoridad — no lo vuelva a derivar a partir de detail
severity"critical", "high", "medium" o "low", de la más pesada a la más leve — cuánto peso carga esta verificación en esta verificación. Es un peso, nunca un destino, y es configurable: lea decision para el resultado en vez de derivarlo de aquí
groupdocument, selfie, screening o policy. El grupo de un nombre nunca cambia, así que filtre por él en lugar de mantener sus propias listas de nombres
reasonUn token estable en las filas undetermined y not_evaluatedprovider_unavailable, no_mrz, y así. null en las demás
detailTexto para que lo lea una persona, incluido el umbral cuando la verificación tiene uno. Nunca ramifique según él — la redacción puede cambiar, el estado no

El conjunto varía. Las verificaciones aparecen solo cuando son aplicables — una zona de lectura mecánica requiere un documento que la lleve, las de rostro requieren una selfie, varias se habilitan por cuenta. Recorra el arreglo; nunca lo indexe por posición.

Dos formas en que una verificación no llega a un veredicto, y ninguna es una constatación contra el cliente. undetermined significa que se ejecutó y no pudo concluir; not_evaluated significa que nunca obtuvimos veredicto — un proveedor inalcanzable, un dato que el documento no traía, una captura rechazada antes de su turno. Ambas se cobran como una fracción del peso de la verificación, en vez de ignorarse, y reason dice cuál fue. Una fila ausente es una tercera cosa: la verificación nunca fue aplicable.


Las verificaciones

Una fila por verificación. severity es configurable, así que cuánto cuesta una falla en sus verificaciones se define para su cuenta.

VerificaciónGrupoQué compruebaPresente
document_readabledocumentLos campos centrales de identidad — número, nombre, fecha de nacimiento — se extrajeron todos del documentoSiempre
document_not_expireddocumentLa fecha de vencimiento no está en el pasadoCuando el documento la lleva
document_authenticdocumentUna revisión forense de cada lado enviado no encuentra recaptura, impresión, fotocopia ni falsificación. Los lados se fusionan en esta única fila, y detail nombra el veredicto de cada uno. Un rechazo se lee dos veces antes de sostenerseCuando está habilitada en su cuenta (por defecto: activada)
document_scene_cleardocumentNingún teléfono, monitor o pantalla es visible en ninguna parte del cuadro. Lee la imagen entera, así que una pantalla detrás de un documento genuino también la disparaSiempre
document_mrz_validdocumentLos dígitos de control de la zona de lectura mecánica validanCuando el documento tiene MRZ
document_barcode_validdocumentEl código de barras del reverso contiene un registro de identidad bien formado. Un reverso ilegible publica not_evaluated con motivo no_barcode y no cuesta nadaCuando el documento es una licencia de conducir o cédula de identidad estatal de EE. UU.
document_sources_agreedocumentLos datos de lectura mecánica del documento — la zona de un pasaporte, el código de barras de una licencia de EE. UU. — concuerdan con lo impreso en su anverso. Un desacuerdo nombra los campos que difieren, nunca sus valoresCuando el documento arrojó datos de lectura mecánica y su anverso arrojó campos para comparar
document_number_validdocumentEl número coincide con el formato conocido de su jurisdicción. Consultivo — las tablas de formato son públicas pero imperfectasCuando existe una regla para esa jurisdicción
document_data_matchdocumentLos datos que envió concuerdan con el documentoCuando establece dataCheck: true y el documento arrojó una identidad
document_type_matchdocumentEl documento es del tipo que declaró. El tipo se lee de las imágenes y se compara con prefill.documentType; sin un tipo declarado, la verificación publica not_evaluated en lugar de un veredictoSiempre
face_detectedselfieExactamente un rostro utilizable — no ojos cerrados, gafas de sol ni cabeza muy giradaCuando se capturó una selfie
livenessselfieLa selfie es de una persona viva, no de una reproducciónCuando se capturó una selfie
face_matchselfieLa selfie es de la misma persona del retrato del documentoCuando se capturó una selfie
age_matchselfieLa fecha de nacimiento del documento concuerda con la edad estimada a partir de la selfie, dentro de una tolerancia definida para su cuenta. Una estimación es un indicio, no una pruebaCuando la descripción de apariencia está habilitada (por defecto: desactivada), la selfie arrojó un rostro utilizable y el documento arrojó una fecha de nacimiento
sanctions_clearscreeningEl nombre no coincide con una lista OFAC SDN cuya fecha de nacimiento también concuerde. Una coincidencia que no se puede confirmar publica undetermined — vea Cribado de sancionesCuando el cribado está habilitado en su cuenta (por defecto: desactivado) y el documento arrojó una identidad
dmv_record_matchscreeningLos datos extraídos de una licencia de EE. UU. concuerdan con el registro del DMV emisorCuando la verificación de DMV está habilitada (por defecto: desactivada) y el documento arrojó una identidad
jurisdiction_acceptedpolicyEl país emisor es uno que usted acepta para ese tipo de documentoCuando ha configurado jurisdicciones aceptadas
capture_attemptspolicyEl cliente no agotó el límite de reintentos — vea Entrega por el widgetSolo en el flujo del widget

Comparación de prefill

Cuando usted envía prefill, el resultado reporta cómo coincidió cada campo comparable. prefillMismatches es la lista corta de nombres de campos que no coincidieron; prefillComparison incluye el detalle:

"prefillComparison": [
  { "field": "lastName",     "sent": "Silva",      "received": "SILVA SANTOS", "match": true,  "method": "subset",     "score": 0.95, "threshold": 0.85 },
  { "field": "dateOfBirth", "sent": "1988-03-04", "received": "1988-03-04",   "match": true,  "method": "exact",      "score": null, "threshold": null },
  { "field": "issuingState", "sent": "Florida",    "received": "FL",           "match": true,  "method": "normalized", "score": null, "threshold": null }
]
CampoDescripción
fieldUno de firstName, lastName, dateOfBirth, documentType, documentNumber, nationality, issuingState, issuingCountry
sent / receivedSu valor, y el valor leído del documento
matchSi se consideran iguales
methodPara nombres: exact, subset (un apellido compuesto que contiene el suyo, con puntaje 0.95), fuzzy (puntuación de similitud) o empty. Para estados y tipos de documento: normalized. En los demás casos exact
score / thresholdSimilitud de nombres y el umbral de aceptación, null para campos que no son nombres

Los campos ausentes en cualquiera de los dos lados no se comparan, así que nunca aparecen — el issuingState de un pasaporte es uno de ellos, ya que ningún pasaporte evidencia subdivisión. Envíe el país en issuingCountry, que sí se compara. Los nombres usan coincidencia difusa — acentos eliminados, apellidos compuestos aceptados como coincidencias de subconjunto, errores cercanos de OCR tolerados hasta el umbral — de modo que la variación ortográfica ordinaria no crea falsos desacuerdos. Los estados y tipos de documento se normalizan primero, y por eso Florida coincide con FL.

Un desacuerdo solo afecta la decisión cuando usted establece dataCheck: true, lo que agrega la verificación document_data_match. Sin eso, la comparación es informativa.


Descripción de la selfie

null a menos que la descripción de apariencia esté habilitada para su tenant. Cuando está presente, incluye atributos observables de la selfie para una comparación posterior de re-verificación:

"selfieDescription": {
  "estimatedAgeLow": 30,
  "estimatedAgeHigh": 40,
  "skinTone": "light",
  "eyeColor": "brown",
  "hairColor": "dark brown",
  "hairStyle": "shoulder length, straight",
  "facialHair": "none",
  "eyewear": "none",
  "headwear": "none",
  "distinguishingFeatures": ["small scar above left eyebrow"],
  "notes": null
}

Cualquier atributo que no pueda observarse es null.

Las descripciones de apariencia son datos personales sensibles. Conllevan exposición bajo el RGPD y leyes de privacidad biométrica (por ejemplo BIPA), y la selfie es procesada por un servicio de visión externo. Confirme que tiene una base legal, un acuerdo de procesamiento de datos vigente y una justificación de retención documentada antes de pedirnos habilitar esto.


Cribado de sanciones

Desactivado por defecto, y habilitado por tenant por Inyo cuando se solicita. Cuando está activo, el nombre extraído del documento se criba contra la lista OFAC de Nacionales Especialmente Designados (SDN).

Un nombre que coincide no es una persona

Dos tokens de nombre comunes aparecen en muchos nombres listados, así que una coincidencia de nombre por sí sola nunca rechaza. La confirmación es por fecha de nacimiento, y el resultado es el status de la única verificación sanctions_clear:

Resultadosanctions_clearEfecto
Ninguna coincidencia en su umbral o por encima"passed"sin cambio
Una coincidencia y su fecha de nacimiento concuerda"failed"cobrada con el peso total de esta verificación
Una coincidencia, pero ninguna fecha de nacimiento concuerda"undetermined"cobrada menos — una coincidencia sin confirmar no es una constatación

Nada ambiguo se resuelve hacia la aprobación. Base sus decisiones en status. El umbral de aceptación se configura por tenant — consulte a su contacto en Inyo cuál es el suyo.

El bloque screening

Presente solo cuando se entregó una coincidencia — es decir, junto a un sanctions_clear que está failed (coincidencia confirmada) o undetermined (sin confirmar). Está ausente cuando el cribado sale limpio, por lo que su presencia significa "hay algo que adjudicar", no "el cribado se ejecutó".

"screening": {
  "matches": [
    {
      "name": "SAMPLE, Ali Hassan",
      "sourceList": "us_ofac",
      "programs": ["SDGT"],
      "entityId": "12345",
      "score": 91.5,
      "dobAgrees": true
    }
  ]
}
CampoSignificado
nameEl nombre de la entidad listada, tal como se publica
sourceListSiempre us_ofac hoy
programsProgramas de sanciones de OFAC a los que pertenece la entrada
entityIdIdentificador de la entrada, para consultarla en la fuente
scoreSimilitud de nombre, 0-100
dobAgreestrue, false, o null cuando es indecidible — la fecha de nacimiento del documento no pudo leerse, o la entrada no publica ninguna

Se entregan como máximo cinco coincidencias — suficientes para distinguir una coincidencia única plausible de un grupo obvio de colisiones. Solo aparecen candidatos en su umbral o por encima.

Una particularidad que conviene saber al adjudicar: OFAC publica fechas imprecisas colapsadas al 1 de enero, así que un candidato listado en ese día se compara solo por año. Para quien nació genuinamente el 1 de enero eso afloja la correspondencia, en dirección al rechazo.

Su cliente nunca sabe que una coincidencia de sanciones fue lo que lo rechazó. La respuesta de rechazo es idéntica byte a byte a cualquier otro fallo sin reintento.

Si el cribado no está disponible

El cribado falla abierto: una caída del proveedor omite la verificación en vez de bloquear o rechazar. Nada en el resultado entregado distingue una sesión que se entregó sin cribar de una que se cribó y salió limpia — en ese caso simplemente no existe ninguna fila sanctions_clear. Si necesita evidencia positiva de que toda verificación fue cribada, compruebe la presencia de esa verificación, no la ausencia de coincidencia.


Próximos pasos