# Validar pasaporte con archivos Fuente: /passport/create-passport-validation/ El endpoint te permite **validar un pasaporte a partir de imágenes** que tú ya tienes: envías la foto de la página de datos del pasaporte y, opcionalmente, una selfie del titular. A diferencia de la [sesión de verificación con pasaporte](/passport/create-passport-session/), no hay que enviar al usuario a ninguna pantalla de captura. #### **Descripción** Con las imágenes que envías se verifica: - **La autenticidad del documento**: lectura de la MRZ (zona de lectura mecánica) y del texto visible (OCR), dígitos de control de la MRZ, vigencia y coincidencia entre los datos de la MRZ y los del OCR. - **La comparación facial** entre la selfie y la fotografía impresa en el pasaporte, solo si envías la selfie. > **Sin prueba de vida ni consultas a fuentes oficiales** > > Como trabaja con imágenes fijas, esta validación **no incluye prueba de vida**. Tampoco consulta la Lista > Nominal del INE ni RENAPO. Si necesitas prueba de vida, usa la > [sesión de verificación con pasaporte](/passport/create-passport-session/). #### **Flujo de la validación** La validación es **asíncrona**: el endpoint responde de inmediato y el análisis se hace en segundo plano. 1. Envías las imágenes a este endpoint y recibes el `uuid` de la validación con `status` `pending`. 2. La validación pasa a `processing` mientras se analiza el pasaporte (normalmente menos de un minuto). 3. Termina en `completed` con `result` **100** si se aprobó, o en `failed` con `result` **0** y el motivo en `errors`. 4. Recibes el resultado en tu `webhook` o lo consultas en [Consultar validación de pasaporte con archivos](/passport/show-passport-validation/). **Método:** POST #### **Endpoint** ``` https://api.verificamex.com/identity/v2/validations/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** Para realizar la solicitud es necesario incluir los siguientes encabezados: | Encabezado | Valor | Descripción | | - | - | - | | Accept | `application/json` | Tipo de contenido de la respuesta. | | Content-Type | `application/json` | Tipo de contenido de la solicitud. | | Authorization | `Bearer {tu_token}` | Token generado para autenticar al usuario. | ### **Cuerpo de la Solicitud** | Parámetro | Tipo | Descripción | | - | - | - | | `passport_front` | `String` | Imagen de la página de datos del pasaporte (la que tiene la fotografía y la MRZ) codificada en Base64. | | selfie | `String` Opcional | Selfie del titular codificada en Base64. Si la envías, se compara su rostro con la fotografía del pasaporte. | | webhook | `String` Opcional | URL a la que se enviará una petición POST con el resultado cuando la validación termine. | > **Formato de las imágenes** > > Puedes enviar el Base64 con o sin el prefijo `data:image/...;base64,`. Se aceptan imágenes **JPG, PNG y > WEBP** (también GIF y BMP). El formato se revisa sobre el contenido real de la imagen: un HEIC o un PDF se > rechaza con un error 422 aunque el prefijo diga otra cosa. #### **Ejemplo de cuerpo de la solicitud** **JSON** ```json { "passport_front": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD....", "selfie": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD....", "webhook": "https://www.tusitio.com/webhooks/verificamex" } ``` **cURL** ```bash curl -X POST https://api.verificamex.com/identity/v2/validations/passport \ -H "Authorization: Bearer {TU_TOKEN}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "passport_front": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD....", "selfie": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD....", "webhook": "https://www.tusitio.com/webhooks/verificamex" }' ``` > **Costo en tokens** > > La lectura del pasaporte cuesta **5 tokens** y la comparación facial **5 tokens** más, solo si envías la > selfie. Únicamente se cobra cuando la validación se aprueba (`result` 100): si termina en `failed` no se > descuentan tokens. En tu historial de consumos aparecen como dos conceptos separados. Para crear la > validación necesitas tener saldo disponible. ### Respuesta del Endpoint La respuesta tiene la misma estructura que [Consultar validación de pasaporte con archivos](/passport/show-passport-validation/). Al crearla, la validación todavía no tiene resultado. **status 202** ```json { "object": "PassportValidation", "uuid": "01a14459-d3a0-7087-bee8-dbd53d6418f0", "status": "pending", "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:00-06:00" } ``` **status 422** ```json { "message": "El formato de la imagen de la página de datos del pasaporte no es compatible. Usa JPG, PNG o WEBP.", "errors": { "passport_front": [ "El formato de la imagen de la página de datos del pasaporte no es compatible. Usa JPG, PNG o WEBP." ] } } ``` **status 401** ```json { "message": "Unauthorized" } ``` **status 403** ```json { "message": "Las transacciones del usuario se han terminado" } ``` | Parámetro | Tipo | Descripción | | - | - | - | | object | `String` | Siempre `"PassportValidation"`. | | uuid | `String` | Identificador de la validación (UUID v7). Guárdalo para [consultar el resultado](/passport/show-passport-validation/). | | status | `String` | Al crearla siempre es `"pending"`. | | result | `Integer` | `null` mientras la validación no termina. | | `face_comparison_requested` | `Boolean` | `true` si enviaste selfie y se hará la comparación facial. | | tokens | `Integer` | Tokens cobrados. `0` mientras la validación no termina. | ### Webhook Si enviaste `webhook`, recibirás **una sola petición** POST cuando la validación termine (`completed` o `failed`). El cuerpo es el mismo objeto que devuelve [Consultar validación de pasaporte con archivos](/passport/show-passport-validation/), sin la envoltura `data`. > **Consejo** > > Los webhooks van firmados igual que el resto de los de Verificamex. Revisa > [Verificar la firma de los webhooks](/webhooks/webhooks-security/) para validar que el mensaje viene de > nosotros. ### Diferencias con la sesión de verificación con pasaporte | | [Sesión de verificación](/passport/create-passport-session/) | Validación con archivos | | - | - | - | | Captura | El usuario entra a `form_url` y captura en vivo | Tú envías las imágenes | | Prueba de vida | Sí | No | | Comparación facial | Sí | Solo si envías `selfie` | | Costo | 10 tokens | 5 tokens, más 5 por la comparación facial | | Resultado | `GET /v2/identity/sessions/{id}?include=passport` | `GET /v2/validations/passport/{uuid}` |