# Crear sesión de verificación con pasaporte Fuente: /passport/create-passport-session/ El endpoint te permite **crear una sesión de verificación de identidad que solo acepta pasaporte**. Funciona igual que una [sesión de verificación V2](/identity-verification/create-verification-session/) de INE: recibes una URL a la que envías a tu usuario y, cuando termina, obtienes el resultado por webhook o consultando la sesión. #### **Descripción** El usuario captura la **página de datos de su pasaporte**, se toma una selfie y realiza una prueba de vida. Con eso 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. - **La prueba de vida**, para asegurar que hay una persona real frente a la cámara. > **Sin consultas a fuentes oficiales** > > A diferencia de la sesión de INE, aquí **no se consulta la Lista Nominal del INE ni RENAPO**. Por eso este > endpoint no recibe el parámetro `validations`: el resultado depende únicamente de la verificación del > documento y de la biometría. #### **Flujo de la sesión** 1. Creas la sesión con este endpoint y recibes el campo `form_url`. 2. Envías a tu usuario a `form_url` (redirección, enlace o código QR). 3. El usuario captura su pasaporte, se toma la selfie y completa la prueba de vida. 4. Al terminar, el usuario es enviado a tu `redirect_url` y la sesión pasa a `VERIFYING` mientras se analiza. 5. La sesión termina en `FINISHED` con `result` **100** si el pasaporte y la biometría se verificaron, o en `FAILED` con `result` **0** y el motivo en `errors`. Recibes el resultado en tu `webhook` o lo consultas en [Consultar resultado de una sesión de pasaporte](/passport/show-passport-session/). **Método:** POST #### **Endpoint** ``` https://api.verificamex.com/identity/v2/identity/passport-sessions ``` > **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** El cuerpo de la solicitud debe contener los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | `redirect_url` | `String` | URL a la que se redirigirá el usuario una vez finalizada la verificación. | | webhook | `String` Opcional | URL a la que se enviará una petición POST con el resultado de la validación. Ver [Webhooks de sesiones de pasaporte](/passport/webhooks/). | | `document_number` | `String` Opcional | Número de pasaporte que esperas que capture el usuario (máximo 20 caracteres). Se compara contra el número leído del documento. | | `only_mobile_devices` | `Boolean` Opcional | Indica si la verificación solo se puede realizar en dispositivos móviles. Por defecto `false`. | | `with_webhook_binaries` | `Boolean` Opcional | Indica si el webhook debe incluir los archivos de la verificación en Base64. Por defecto `true`. | | optionals | `Object` Opcional | Objeto para guardar información relevante para ti que no es necesaria para la validación (por ejemplo, tu folio interno). Se te devuelve tal cual en la sesión y en el webhook. | | logo | `String` Opcional | URL del logo que se mostrará en la pantalla de verificación. | | customization | `Object` Opcional | Objeto para personalizar los colores de la interfaz. | | `customization.button_color` | `String` Opcional | Color de los botones en formato hexadecimal. | | `customization.background_color` | `String` Opcional | Color de fondo en formato hexadecimal. | | `customization.primary_color` | `String` Opcional | Color primario en formato hexadecimal. | | `customization.secondary_color` | `String` Opcional | Color secundario en formato hexadecimal. | | `customization.button_text_color` | `String` Opcional | Color del texto de los botones en formato hexadecimal. | > **Diferencias con la sesión de INE** > > Este endpoint **no** acepta `validations` ni `phone_number`. Si los envías se ignoran: la sesión de > pasaporte no consulta fuentes oficiales y no se envía por WhatsApp. #### **Ejemplo de cuerpo de la solicitud** **JSON** ```json { "redirect_url": "https://www.tusitio.com/gracias", "webhook": "https://www.tusitio.com/webhooks/verificamex", "document_number": "G00000001", "only_mobile_devices": false, "with_webhook_binaries": true, "optionals": { "folio": "CLI-1001" }, "logo": "https://www.tusitio.com/logo.png", "customization": { "button_color": "#F54927", "background_color": "#FFFFFF", "primary_color": "#27F55B", "secondary_color": "#82167E", "button_text_color": "#FFFFFF" } } ``` **cURL** ```bash curl -X POST https://api.verificamex.com/identity/v2/identity/passport-sessions \ -H "Authorization: Bearer {TU_TOKEN}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "redirect_url": "https://www.tusitio.com/gracias", "webhook": "https://www.tusitio.com/webhooks/verificamex", "document_number": "G00000001", "optionals": { "folio": "CLI-1001" } }' ``` > **Costo en tokens** > > Una sesión de pasaporte cuesta **10 tokens** fijos (lectura del documento, comparación facial y prueba de > vida). Solo se cobra cuando el pasaporte **se verifica**; si la sesión termina en `FAILED` porque el > documento no pasó las verificaciones, no se descuentan tokens. Para crear la sesión necesitas tener saldo > disponible. ### Respuesta del Endpoint **status 201** ```json { "data": { "object": "VerificationSession", "id": "9d805854-f8a1-4135-ad57-3629ca0fc679", "status": "OPEN", "result": null, "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": null, "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:27:14.000000Z", "readable_created_at": "hace 5 segundos", "readable_updated_at": "hace 4 segundos" }, "meta": { "include": [ "ine", "renapo", "passport", "files" ], "custom": [] } } ``` **status 422** ```json { "message": "The given data was invalid.", "errors": { "redirect_url": ["The redirect url field is required."] } } ``` **status 401** ```json { "message": "Unauthorized" } ``` **status 403** ```json { "message": "Las transacciones del usuario se han terminado" } ``` El cuerpo de la respuesta contiene los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | data | `Object` | Objeto que contiene la información de la sesión de verificación. | | `data.object` | `String` | Tipo de objeto, siempre `"VerificationSession"`. | | `data.id` | `String` | Identificador único de la sesión. Guárdalo para [consultar el resultado](/passport/show-passport-session/). | | `data.status` | `String` | Estado de la sesión. Al crearla siempre es `"OPEN"`. | | `data.result` | `Integer` | Resultado de la verificación: `100` aprobada, `0` rechazada, `null` mientras no termina. | | `data.errors` | `Array` | Motivos de rechazo. `null` al crear la sesión. | | `data.comments` | `String` | Comentarios internos del proceso. `null` al crear la sesión. | | `data.only_mobile_devices` | `Boolean` | Indica si la sesión solo se puede realizar en dispositivos móviles. | | `data.redirect_url` | `String` | URL a la que se redirigirá al usuario al terminar. | | `data.webhook` | `String` | URL a la que se enviarán los cambios de estado de la sesión. | | `data.validations` | `Array` | Siempre vacío en sesiones de pasaporte. | | `data.ine_reading` | `Object` | Lectura completa del pasaporte. `null` hasta que se analiza el documento. | | `data.optionals` | `Object` | Datos opcionales que enviaste al crear la sesión. | | `data.form_url` | `String` | URL de la pantalla de verificación a la que debes enviar a tu usuario. | | `data.created_at` | `String` | Fecha de creación en formato ISO-8601. | | `data.updated_at` | `String` | Fecha de la última actualización en formato ISO-8601. | | `data.readable_created_at` | `String` | Fecha de creación en formato legible. | | `data.readable_updated_at` | `String` | Fecha de la última actualización en formato legible. | | meta | `Object` | Información adicional de la respuesta. | | `meta.include` | `String[]` | Relaciones que se pueden solicitar con el parámetro `include`. En sesiones de pasaporte la que te interesa es `passport`. | | `meta.custom` | `String[]` | Relaciones extra solicitadas. |