# Consultar validación de pasaporte con archivos Fuente: /passport/show-passport-validation/ El endpoint te permite **consultar el estatus y el resultado** de una validación creada con [Validar pasaporte con archivos](/passport/create-passport-validation/), usando su `uuid`. También devuelve las validaciones que creaste desde el panel de Verificamex. **Método:** GET #### **Endpoint** ``` https://api.verificamex.com/identity/v2/validations/passport/{uuid} ``` > **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 | | - | - | - | | uuid | `String` | UUID de la validación que recibiste al crearla. | ## Estados y resultado | `status` | `result` | Qué significa | | - | - | - | | `pending` | `null` | La validación se creó y está en espera de procesarse. | | `processing` | `null` | Se está analizando el pasaporte. | | `completed` | `100` | El pasaporte se aprobó. | | `completed` | `0` | El pasaporte se aprobó, pero no tenías tokens suficientes para cobrarlo (ver [errores](#errores)). | | `failed` | `0` | El pasaporte se rechazó o no se pudo procesar. El motivo viene en `errors`. | ### Cómo se decide el resultado 1. Se confirma que el documento de la imagen **es un pasaporte**. Si no lo es, la validación termina en `failed` con el error `DOC-PASSPORT-002`. 2. Se revisa la verificación global del documento: el pasaporte se aprueba cuando el resultado global es `Ok` **y** no hay comprobaciones fallidas (`failed_checks` = 0). Si no, termina en `failed` con el error `DOC-PASSPORT-001`. 3. Si enviaste selfie, la comparación facial tuvo que poder hacerse. Si no se pudo comparar (por ejemplo, no se detectó un rostro en la selfie), termina en `failed` con el error `PASSPORT-FILES-002`. 4. Si todo pasa, se cobran los tokens y la validación termina en `completed` con `result` 100. ## Campos de la respuesta | Campo | Tipo | Descripción | | - | - | - | | object | `String` | Siempre `"PassportValidation"`. | | uuid | `String` | Identificador de la validación (UUID v7). | | status | `String` | `pending`, `processing`, `completed` o `failed`. | | result | `Integer` | `100` aprobada, `0` rechazada, `null` mientras no termina. | | errors | `Array` | Motivos de rechazo. `null` si no hay. Ver [errores](#errores). | | `face_comparison_requested` | `Boolean` | `true` si enviaste selfie. | | passport | `Object` | Datos del pasaporte y resumen de la verificación. `null` mientras no se analiza el documento o si no se pudo procesar. | | `document_reading` | `Object` | Lectura completa del documento: `DocumentData` trae cada dato leído con su origen (`MRZ` u `OCR`) y `DocumentVerifications` cada comprobación con su resultado. | | files | `Array` | Archivos de la validación con URL de descarga. Vacío mientras no termina. | | tokens | `Integer` | Tokens cobrados por la validación (lectura + comparación facial). | | `created_at` | `String` | Fecha de creación en formato ISO 8601. | | `updated_at` | `String` | Fecha de la última actualización en formato ISO 8601. | ### El objeto `passport` Tiene los mismos campos que el de la [sesión de verificación con pasaporte](/passport/show-passport-session/), salvo la prueba de vida, que aquí no existe. | Campo | Tipo | Descripción | | - | - | - | | verified | `Boolean` | `true` si el documento pasó la verificación global sin comprobaciones fallidas. | | `document_type` | `String` | Tipo de documento detectado. En una validació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; los demás son motivos de rechazo, por ejemplo `"DocumentExpired"`, `"FailedChecks"`, `"WarningChecks"`, `"NoMrzFound"`, `"FailedBiometrics"` o `"IsFake"`. | | `security_level` | `String` | Nivel de seguridad con el que se analizó el documento. | | `total_checks` | `Integer` | Número de comprobaciones realizadas. | | `success_checks` | `Integer` | Comprobaciones que pasaron. | | `warning_checks` | `Integer` | Comprobaciones con advertencia. | | `failed_checks` | `Integer` | Comprobaciones que fallaron. Con una sola, la validación se rechaza. | | `face_matching_confidence` | `Number` | Porcentaje de similitud (0–100) entre la selfie y la foto del pasaporte. `null` si no enviaste selfie o no se pudo comparar. | | `face_matching_passed` | `Boolean` | Resultado de la comparación facial. `null` si no enviaste selfie o no se pudo comparar. | > **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. ## Errores Cuando la validació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 la comparación facial. | El resultado global (`global_result`). | | DOC-PASSPORT-002 | `failed` | La imagen no es de un pasaporte. | El tipo de documento detectado (por ejemplo `"IdCard"`). | | PASSPORT-FILES-001 | `failed` | No se pudo procesar el pasaporte. Vuelve a intentarlo en unos minutos. | Detalle del error. | | PASSPORT-FILES-002 | `failed` | Enviaste selfie, pero no se pudo comparar su rostro con el del pasaporte. | Detalle del error. | | INSUFFICIENT-TOKENS-001 | `completed` | El pasaporte se aprobó, pero no tenías tokens suficientes para cobrarlo. El `result` queda en `0` y **no se entregan los archivos**. | Detalle del error de cobro. | ## Archivos de la validación Cada elemento de `files` trae su tipo y una **URL firmada** de descarga que expira a los **15 minutos**. Si expira, vuelve a consultar este endpoint para obtener enlaces nuevos. | `file_type` | Contenido | | - | - | | `PASSPORT_FRONT` | La imagen de la página de datos que enviaste. | | `FACE` | La selfie que enviaste. | | `CROP_DOCUMENT_PORTRAIT` | Recorte de la fotografía del pasaporte. | | `CROP_LIVE_PORTRAIT` | Recorte del rostro de la selfie usado en la comparación facial. | | `PDF_VERIFICATION_REPORT` | PDF con el reporte de la verificación. | ## Respuesta del Endpoint **Aprobada (result: 100)** ```json { "object": "PassportValidation", "uuid": "01a14459-d3a0-7087-bee8-dbd53d6418f0", "status": "completed", "result": 100, "errors": null, "face_comparison_requested": true, "passport": { "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": 25, "success_checks": 25, "warning_checks": 0, "failed_checks": 0, "face_matching_confidence": 99.97, "face_matching_passed": true }, "document_reading": { "DocumentData": [ { "Type": "DocumentNumber", "Name": "Número de documento", "Value": "G00000001", "Source": "MRZ" }, { "Type": "Name", "Name": "Nombre", "Value": "MARÍA FERNANDA", "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" } ] }, "files": [ { "file_type": "PASSPORT_FRONT", "mime_type": "image/jpeg", "url": "https://storage.googleapis.com/...&X-Goog-Signature=..." }, { "file_type": "FACE", "mime_type": "image/jpeg", "url": "https://storage.googleapis.com/...&X-Goog-Signature=..." }, { "file_type": "PDF_VERIFICATION_REPORT", "mime_type": "application/pdf", "url": "https://storage.googleapis.com/...&X-Goog-Signature=..." } ], "tokens": 10, "created_at": "2026-10-16T10:55:00-06:00", "updated_at": "2026-10-16T10:55:41-06:00" } ``` Ejemplo resumido: `document_reading` trae todos los datos y comprobaciones, y `files` también incluye los recortes de rostro. **Rechazada (result: 0)** ```json { "object": "PassportValidation", "uuid": "01a14462-1f6b-7b2e-9c40-5d1a8e3f7b21", "status": "failed", "result": 0, "errors": [ { "Key": "DOC-PASSPORT-001", "Name": "Verificación del pasaporte", "Category": "PassportValidation", "Result": false, "Output": "DocumentExpired", "Message": "El pasaporte no pasó las verificaciones del documento o biométricas" } ], "face_comparison_requested": false, "passport": { "verified": false, "document_type": "Passport", "document_number": "G00000002", "date_of_expiry": "2024-02-10", "global_result": "DocumentExpired", "total_checks": 24, "success_checks": 23, "warning_checks": 0, "failed_checks": 1, "face_matching_confidence": null, "face_matching_passed": null }, "tokens": 0, "created_at": "2026-10-16T11:02:10-06:00", "updated_at": "2026-10-16T11:02:44-06:00" } ``` Ejemplo resumido de un pasaporte vencido. El objeto `passport` trae todos los campos descritos arriba y `files` las evidencias del intento. **En proceso** ```json { "object": "PassportValidation", "uuid": "01a14459-d3a0-7087-bee8-dbd53d6418f0", "status": "processing", "result": null, "errors": null, "face_comparison_requested": true, "passport": null, "document_reading": null, "files": [], "tokens": 0, "created_at": "2026-10-16T10:55:00-06:00", "updated_at": "2026-10-16T10:55:02-06:00" } ``` **status 404** ```json { "message": "Validación no encontrada." } ``` **status 401** ```json { "message": "Unauthorized" } ``` > **¿Prefieres no consultar?** > > Si enviaste un `webhook` al crear la validación, recibirás este mismo objeto automáticamente cuando termine. > Consulta la sección [Webhook](/passport/create-passport-validation/#webhook).