# Consultar resultado de una sesión de pasaporte Fuente: /passport/show-passport-session/ Una sesión de pasaporte se consulta con el mismo endpoint que el resto de las [sesiones de verificación V2](/identity-verification/show-verification-session/), filtrando por el `id` que recibiste al [crear la sesión](/passport/create-passport-session/). La diferencia es que debes pedir el objeto **`passport`**, que trae los datos del pasaporte ya interpretados y el resumen de la verificación. **Método:** GET #### **Endpoint** ``` https://api.verificamex.com/identity/v2/identity/sessions/{id}?include=passport ``` > **Nota** > > Recuerda que debes tener un token válido para realizar la solicitud. > Puedes obtener un token siguiendo los pasos descritos en la sección [Generar tokens](/authentication/generate-tokens/). ### **Encabezados de la Solicitud** | Encabezado | Valor | Descripción | | - | - | - | | Accept | `application/json` | Tipo de contenido de la respuesta. | | Authorization | `Bearer {tu_token}` | Token generado para autenticar al usuario. | ### **Parámetros de la Solicitud** | Parámetro | Tipo | Descripción | | - | - | - | | id | `String` | ID de la sesión de verificación. | #### **Query Parameters** | Parámetro | Tipo | Descripción | | - | - | - | | include | `String` | Usa `passport` para recibir la lectura del pasaporte. Los archivos (`files`) se incluyen siempre. `ine` y `renapo` no aplican a estas sesiones. | | `with_binaries` | `Boolean` | Controla si cada archivo incluye su contenido en Base64 en el campo `binary`. Por defecto `true`. | ## Estados y resultado | `status` | `result` | Qué significa | | - | - | - | | `OPEN` | `null` | La sesión se creó y el usuario aún no termina la captura. | | `VERIFYING` | `null` | El usuario terminó la captura y se está analizando el pasaporte. | | `FINISHED` | `100` | El pasaporte y la biometría se verificaron correctamente. | | `FINISHED` | `0` | El pasaporte se verificó, pero no se pudieron cobrar los tokens (ver [errores](#errores)). | | `FAILED` | `0` | El documento no es un pasaporte o no pasó las verificaciones. El motivo viene en `errors`. | > **Consejo** > > Considera definitivo solo `FINISHED` o `FAILED`. Si el análisis todavía no está listo, la sesión puede > regresar momentáneamente a `OPEN` antes de volver a `VERIFYING`. ### Cómo se decide el resultado 1. Se confirma que el documento capturado **es un pasaporte**. Si no lo es, la sesión termina en `FAILED` con el error `DOC-PASSPORT-002`. 2. Se revisa la verificación global del documento: el pasaporte se considera verificado cuando el resultado global es `Ok` **y** no hay comprobaciones fallidas (`failed_checks` = 0). Si no, la sesión termina en `FAILED` con el error `DOC-PASSPORT-001`. 3. Si el pasaporte se verificó, se cobran los tokens de la sesión y termina en `FINISHED` con `result` 100. ## El objeto `passport` Se encuentra en `data.passport.data` y está disponible cuando termina el análisis del documento (la sesión en `FINISHED` o `FAILED`). Es `null` mientras el pasaporte no se ha analizado. | Campo | Tipo | Descripción | | - | - | - | | object | `String` | Siempre `"PassportReading"`. | | id | `String` | Identificador de la lectura. | | verified | `Boolean` | `true` si el documento pasó la verificación global sin comprobaciones fallidas. | | `document_type` | `String` | Tipo de documento detectado. En una sesión aprobada siempre es `"Passport"`. | | `country_code` | `String` | País del documento (código ISO de 3 letras, por ejemplo `"MEX"`). | | `document_number` | `String` | Número de pasaporte. | | name | `String` | Nombre(s) del titular. | | surname | `String` | Apellidos completos del titular. | | `father_surname` | `String` | Primer apellido, si el pasaporte lo distingue. | | `mother_surname` | `String` | Segundo apellido, si el pasaporte lo distingue. | | sex | `String` | Sexo como aparece en el documento (por ejemplo `"F"` o `"M"`). | | nationality | `String` | Nacionalidad (código ISO de 3 letras). | | `issuing_state` | `String` | País emisor (código ISO de 3 letras). | | `personal_number` | `String` | Número personal impreso en el pasaporte. En pasaportes mexicanos es la **CURP**. | | `date_of_birth` | `String` | Fecha de nacimiento (`YYYY-MM-DD`). | | `date_of_issue` | `String` | Fecha de expedición (`YYYY-MM-DD`). | | `date_of_expiry` | `String` | Fecha de vencimiento (`YYYY-MM-DD`). | | `place_of_birth` | `String` | Lugar de nacimiento. | | `issuing_authority` | `String` | Autoridad que expidió el pasaporte. | | `global_result` | `String` | Resultado global de la verificación del documento. `"Ok"` es el único valor aprobatorio; cualquier otro es un motivo de rechazo (por ejemplo `"FailedChecks"`). | | `security_level` | `String` | Nivel de seguridad con el que se analizó el documento. | | `total_checks` | `Integer` | Número de comprobaciones realizadas sobre el documento y la biometría. | | `success_checks` | `Integer` | Comprobaciones que pasaron. | | `warning_checks` | `Integer` | Comprobaciones con advertencia (no rechazan la sesión). | | `failed_checks` | `Integer` | Comprobaciones que fallaron. Con una sola, la sesión se rechaza. | | `face_matching_confidence` | `Number` | Porcentaje de similitud (0–100) entre la selfie y la foto del pasaporte. `null` si no se pudo comparar. | | `liveness_passed` | `Boolean` | `true` si la prueba de vida fue exitosa. `null` si no se realizó. | | `created_at` | `String` | Fecha de creación en formato ISO-8601. | | `updated_at` | `String` | Fecha de la última actualización en formato ISO-8601. | > **Nombres con acentos** > > Los nombres y apellidos se toman del texto visible del pasaporte porque conserva acentos y la letra Ñ (la > MRZ los elimina). Los campos con dígito verificador —número de pasaporte, fechas, sexo, nacionalidad— se > toman de la MRZ. > **Detalle de cada comprobación** > > El campo `ine_reading` de la sesión contiene la lectura completa del pasaporte con el mismo formato que la > de INE: `ine_reading.DocumentData` trae cada dato leído (con su origen, `MRZ` u `OCR`) y > `ine_reading.DocumentVerifications` trae cada comprobación con su resultado. Úsalo si necesitas saber qué > comprobación falló exactamente. ## Errores Cuando la sesión no se aprueba, `errors` trae una entrada con esta forma: ```json { "Key": "DOC-PASSPORT-001", "Name": "Verificación del pasaporte", "Category": "PassportValidation", "Result": false, "Output": "FailedChecks", "Message": "El pasaporte no pasó las verificaciones del documento o biométricas" } ``` | Key | `status` | Motivo | `Output` | | - | - | - | - | | DOC-PASSPORT-001 | `FAILED` | El pasaporte no pasó las verificaciones del documento o las biométricas (comparación facial o prueba de vida). | El resultado global (`global_result`). | | DOC-PASSPORT-002 | `FAILED` | El documento capturado no es un pasaporte. | El tipo de documento detectado (por ejemplo `"IdCard"`). | | INSUFFICIENT-TOKENS-001 | `FINISHED` | El pasaporte se verificó, pero no tenías tokens suficientes al cerrar la sesión. El `result` queda en `0` y **no se entregan los archivos** (`files`). | Detalle del error de cobro. | > **Costo en tokens** > > La sesión cuesta **10 tokens** y solo se cobra cuando el pasaporte se verifica. Las sesiones que terminan > en `FAILED` no consumen tokens. ## Archivos de la verificación El objeto `files.data` contiene las evidencias del proceso. Cada archivo trae una **URL firmada** (`url`) que expira a los 15 minutos y, por defecto, su contenido en Base64 (`binary`). | `file_type` | Contenido | | - | - | | `PDF_VERIFICATION_REPORT` | PDF con el reporte de la verificación. | | `PASSPORT_FRONT` | Imagen de la página de datos del pasaporte. | | `FACE` | Selfie del usuario. | | `CROP_LIVE_PORTRAIT` | Recorte del rostro de la selfie usado en la comparación facial. | | `CROP_DOCUMENT_PORTRAIT` | Recorte de la fotografía del pasaporte usado en la comparación facial. | | `VIDEO` | Video de la prueba de vida. | > **Controla el peso de la respuesta** > > Agrega `with_binaries=false` para omitir el Base64 y quedarte solo con la URL de descarga: > `/v2/identity/sessions/{id}?include=passport&with_binaries=false`. ## Respuesta del Endpoint **Aprobada (result: 100)** ```json { "data": { "object": "VerificationSession", "id": "9d805854-f8a1-4135-ad57-3629ca0fc679", "status": "FINISHED", "result": 100, "errors": null, "comments": null, "only_mobile_devices": false, "redirect_url": "https://www.tusitio.com/gracias", "webhook": "https://www.tusitio.com/webhooks/verificamex", "validations": [], "ine_reading": { "DocumentData": [ { "Type": "DocumentNumber", "Name": "Número de documento", "Value": "G00000001", "Source": "MRZ" }, { "Type": "Name", "Name": "Nombre", "Value": "MARÍA FERNANDA", "Source": "OCR" }, { "Type": "PersonalNumber", "Name": "Número personal", "Value": "LOGM900903MDFPRR09", "Source": "OCR" } ], "DocumentVerifications": [ { "Category": "Identification", "Key": "TemplateSelected", "Name": "Identificación del Documento", "Result": "Ok", "Output": null }, { "Category": "Biometrics", "Key": "Biometrics_FaceMatching", "Name": "Comprobación Facial", "Result": "Ok", "Output": "99.97" }, { "Category": "Biometrics", "Key": "Biometrics_LivenessCheck", "Name": "Verificación de Vida", "Result": "Ok", "Output": "OK" } ] }, "optionals": { "folio": "CLI-1001" }, "form_url": "https://app.verificamex.com/verification/9d805854-f8a1-4135-ad57-3629ca0fc679", "created_at": "2026-10-03T08:27:13.000000Z", "updated_at": "2026-10-03T08:31:02.000000Z", "readable_created_at": "hace 5 minutos", "readable_updated_at": "hace 1 minuto", "passport": { "data": { "object": "PassportReading", "id": "NxOpZowo9GmjKqdR", "verified": true, "document_type": "Passport", "country_code": "MEX", "document_number": "G00000001", "name": "MARÍA FERNANDA", "surname": "LÓPEZ GARCÍA", "father_surname": "LÓPEZ", "mother_surname": "GARCÍA", "sex": "F", "nationality": "MEX", "issuing_state": "MEX", "personal_number": "LOGM900903MDFPRR09", "date_of_birth": "1990-09-03", "date_of_issue": "2025-04-15", "date_of_expiry": "2035-04-15", "place_of_birth": "CIUDAD DE MÉXICO", "issuing_authority": "OF. PASAPORTES CDMX", "global_result": "Ok", "security_level": "Medium", "total_checks": 29, "success_checks": 29, "warning_checks": 0, "failed_checks": 0, "face_matching_confidence": 99.97, "liveness_passed": true, "created_at": "2026-10-03T08:30:58.000000Z", "updated_at": "2026-10-03T08:30:58.000000Z" } }, "files": { "data": [ { "object": "VerificationFiles", "id": "a1d41e60-888b-4168-8951-bc915828c877", "file_type": "PASSPORT_FRONT", "mime_type": "image/png", "size": 331008, "url": "https://storage.googleapis.com/...&X-Goog-Signature=...", "created_at": "2026-10-03T08:30:59.000000Z", "updated_at": "2026-10-03T08:30:59.000000Z", "binary": "iVBORw0KGgoAAAANSUhEUgAA..." } ] } }, "meta": { "include": ["ine", "renapo", "passport", "files"], "custom": [] } } ``` **Rechazada (result: 0)** ```json { "data": { "object": "VerificationSession", "id": "b3f1c2d4-1a2b-4c3d-8e9f-0a1b2c3d4e5f", "status": "FAILED", "result": 0, "errors": [ { "Key": "DOC-PASSPORT-001", "Name": "Verificación del pasaporte", "Category": "PassportValidation", "Result": false, "Output": "FailedChecks", "Message": "El pasaporte no pasó las verificaciones del documento o biométricas" } ], "comments": null, "validations": [], "optionals": { "folio": "CLI-1002" }, "form_url": "https://app.verificamex.com/verification/b3f1c2d4-1a2b-4c3d-8e9f-0a1b2c3d4e5f", "created_at": "2026-10-03T09:00:00.000000Z", "updated_at": "2026-10-03T09:04:10.000000Z", "passport": { "data": { "object": "PassportReading", "verified": false, "document_type": "Passport", "document_number": "G00000002", "global_result": "FailedChecks", "total_checks": 29, "success_checks": 27, "warning_checks": 0, "failed_checks": 2, "face_matching_confidence": 41.3, "liveness_passed": true } } }, "meta": { "include": ["ine", "renapo", "passport", "files"], "custom": [] } } ``` Ejemplo resumido: el objeto `passport` trae todos los campos descritos arriba y `files` las evidencias del intento, igual que en una sesión aprobada. **status 401** ```json { "message": "Unauthorized" } ``` > **¿Prefieres no consultar?** > > Si enviaste un `webhook` al crear la sesión, recibirás este mismo objeto automáticamente cuando cambie el > estado. Consulta [Webhooks de sesiones de pasaporte](/passport/webhooks/).