> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API de verificación NFC: pasaporte electrónico y chip eID

> Didit verifica pasaportes electrónicos y eID leyendo el chip NFC: validación criptográfica, detección de manipulación y máxima seguridad. $0.15 por llamada.

La autenticación basada en NFC te permite verificar documentos de identidad leyendo el chip seguro integrado en los pasaportes y documentos de identidad modernos con las capacidades NFC de un teléfono móvil. Esto ofrece el **mayor nivel de seguridad disponible** para la verificación de identidad.

Prompt de integración de la verificación NFC
        Copy prompt to clipboard



      
      

\<pre>

\````# Goal
Integrate Didit NFC Verification — cryptographic ePassport / eID chip read — into your app.

\# Delivery mode
NFC is **session-only**. There is no standalone /v3/nfc/ endpoint. The chip is read by the Didit Web/Mobile SDK during a hosted session, which uses the device's NFC radio.

\# Steps
1\. Create a workflow that includes the NFC feature (Business Console or POST /v3/workflows/). NFC normally runs alongside ID Verification: the user first photographs the document so the SDK derives BAC/PACE keys from the MRZ, then taps the chip.
2\. Create a session — POST /v3/session/ with { workflow_id, vendor_data, callback }. See /sessions-api/create-session.
3\. Open the returned session.url on a mobile device with NFC (iOS 13+/Android with NFC enabled), or mount the native SDK in your app.
4\. After completion fetch the decision — GET /v3/session/{sessionId}/decision/ (or subscribe to session.status.updated).

curl (create session):
\```bash
curl -X POST 'https://verification.didit.me/v3/session/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"workflow_id": "YOUR_WORKFLOW_ID",
"vendor_data": "user-123",
"callback": "https://yourapp.com/post-kyc"
}'
\```

\# Decision shape
The NFC result is returned under the plural array `nfc_verifications[]` on the decision payload.

\> Heads-up: the V3 schema deliberately keeps the **plural-array** name `nfc_verifications[]` even though early integrators occasionally hit a singular `nfc_verification` key. Always read from the plural array — it is the canonical, multi-instance shape and matches every other feature.

\# Status enum (per nfc_verifications[].status)
"Not Started" | "In Progress" | "Approved" | "In Review" | "Declined" | "Abandoned" | "Kyc Expired"

\# Warnings (LogWarningChoices.NFC)
The warnings[] array on each nfc_verification includes risk codes such as:
NFC_NOT_READ, NFC_DATA_INVALID, NFC_DATA_DOES_NOT_MATCH_OCR, NFC_BAC_FAILED, NFC_PASSIVE_AUTHENTICATION_FAILED, NFC_ACTIVE_AUTHENTICATION_FAILED, NFC_CHIP_CLONED, NFC_DOCUMENT_REVOKED.
Full catalogue: /core-technology/nfc-verification/warnings-nfc-verification.

\# Failure modes to handle
\- Device has no NFC chip or NFC is disabled — the SDK falls back to OCR + face match; nfc_verifications[] will be empty.
\- The user fails to hold the chip long enough — status="Declined" with NFC_NOT_READ or NFC_BAC_FAILED. Allow a retry.
\- nfc_verifications[].status="Declined" with NFC_DATA_DOES_NOT_MATCH_OCR — the chip and the printed data disagree (likely tampered document). Do not approve.
\- Passive Authentication failed — the chip's signing certificate did not chain back to a trusted CSCA. Stop the flow.

\# Japan My Number Card (JPKI)
\- The My Number Card is read through JPKI, not ICAO 9303: native SDKs only, and the person enters the card PIN. Its item has chip_protocol "jpki", its evidence under jpki (chain_valid, signature_valid, revocation_status good | revoked | unchecked, attributes, attributes_match_ocr), and null ICAO fields (chip_data, authenticity, certificate_summary).
\- iOS host apps add D392F000260100000001 to com.apple.developer.nfc.readersession.iso7816.select-identifiers.
\- Not enabled in production yet: until it is, a My Number Card in a native SDK on an NFC phone skips NFC with nfc_skip_reason JPKI_UNAVAILABLE.

\# See also
\- Canonical schema: /reference/data-models#nfc-verification
\- Per-feature report: /core-technology/nfc-verification/report-nfc-verification
\- Risk catalogue: /core-technology/nfc-verification/warnings-nfc-verification
\- Supported documents: /core-technology/nfc-verification/supported-documents-nfc-verification
\- Full integration playbook: /integration/integration-prompt````

\</pre>



      
      

Paste into

![Interacción NFC entre un documento de identidad y un teléfono](https://didit-public-assets.s3.eu-west-1.amazonaws.com/icons/docs/nfc-id.gif)***## Ventajas principales| Ventaja | Descripción |
| - | - |
| **Máxima seguridad** | Verifica las firmas criptográficas directamente de los emisores gubernamentales |
| **Fácil de usar** | Funciona automáticamente con cualquier teléfono compatible con NFC |
| **A prueba de manipulación** | Detecta alteraciones del documento invisibles al ojo humano |
| **Datos completos** | Extrae datos adicionales que el OCR por sí solo no puede obtener |
| **Alternativa flexible** | Recurre sin problemas a la verificación estándar si el NFC no está disponible |***## Cómo activar la verificación NFC### Integración con SDK nativo (recomendada)La verificación NFC está disponible a través de nuestros **SDK nativos**, que dan acceso completo a las capacidades NFC del dispositivo:| Plataforma | Compatibilidad NFC | Documentación |
| - | - | - |
| **iOS** | ✅ Compatibilidad total | [Documentación del SDK de iOS](https://docs.didit.me/integration/native-sdks/ios-sdk.md) |
| **Android** | ✅ Compatibilidad total | [Documentación del SDK de Android](https://docs.didit.me/integration/native-sdks/android-sdk.md) |El SDK de iOS gestiona automáticamente toda la configuración de NFC, incluidos:- Los identificadores de aplicación ISO7816 para pasaportes electrónicos
- La configuración de entitlements y capacidades
- La lectura del chip en tiempo real con indicaciones visuales### Integración web> ⚠️ **Limitaciones del navegador**
>
> La verificación NFC **no está disponible en navegadores web** por restricciones de la plataforma:
>
> | Navegador | Compatibilidad NFC |
> | - | - |
> | **Chrome (Android)** | API Web NFC experimental: inestable y requiere permisos explícitos |
> | **Safari (iOS)** | Sin compatibilidad con la API Web NFC |
> | **Otros navegadores** | Sin compatibilidad |
>
> En las integraciones web, la verificación NFC se omite automáticamente y los usuarios continúan con la verificación estándar de documento y selfie.***## Cómo funciona**1. Inicio de la sesión**El usuario inicia el proceso de verificación desde tu aplicación o plataforma:- **SDK nativo**: lanza el flujo de verificación directamente en tu aplicación
- **Web/web móvil**: se guía al usuario para que use la app de Didit y haga la verificación con NFC, o continúa con la verificación estándar**2. Captura de la foto del documento**El usuario fotografía su documento de identidad y se capturan:- **MRZ** (zona de lectura mecánica): se usa para derivar las claves de acceso al chip
- **Imágenes del anverso y el reverso del documento**: datos visuales y elementos de seguridad
- **Elementos de seguridad visuales**: hologramas, marcas de agua, microimpresión**3. Detección de compatibilidad con NFC**El sistema comprueba automáticamente la compatibilidad del dispositivo y del documento:| Comprobación | Descripción |
| - | - |
| **Tipo de documento** | ¿Es un pasaporte electrónico o eID con chip NFC? |
| **Capacidad del dispositivo** | ¿El teléfono admite la lectura NFC? |
| **Permisos** | ¿Se han concedido los permisos NFC necesarios? |> [!NOTE]
>
> Si el NFC no está disponible, la verificación continúa sin interrupciones con la verificación estándar de documento y biometría.**4. Lectura del chip NFC**Para dispositivos y documentos compatibles:1) Se guía al usuario para que acerque el documento al lector NFC del teléfono
2) Una indicación visual muestra el progreso de la lectura en tiempo real
3) Se establece una comunicación segura con el chip mediante los protocolos PACE/BAC**5. Extracción de datos**El sistema extrae del chip datos completos siguiendo los estándares **ICAO 9303**:| Grupo de datos | Contenido | Descripción |
| - | - | - |
| **SOD** | Objeto de seguridad del documento | Firmas digitales de todos los grupos de datos |
| **DG1** | Datos personales | Nombre, número de identificación, fecha de nacimiento, fecha de caducidad |
| **DG2** | Imagen facial | Fotografía digital de alta resolución del titular |
| **DG7** | Firma | Representación digital de la firma del titular |
| **DG11-14** | Datos adicionales | Pueden incluir huellas dactilares y escaneos de iris (si están almacenados) |**6. Verificación criptográfica**Los datos extraídos se someten a una exhaustiva verificación criptográfica:> **Verificación de firmas digitales**
>
> El hash de cada grupo de datos se comprueba con las firmas almacenadas en el SOD, lo que garantiza la integridad de los datos.> **Validación de la cadena de certificados**
>
> Se valida la cadena de confianza: **certificado del documento → CA de firma del país → raíz del ICAO PKD**, comprobándola con las listas maestras de CSCA y el directorio de claves públicas de la ICAO (ICAO Public Key Directory).> **Comprobación de revocación de certificados**
>
> Los certificados se comprueban con las listas de revocación de certificados (CRL) para garantizar que no se han revocado y que el documento no se ha denunciado como robado o comprometido.> **Validación cruzada**
>
> Los datos extraídos por NFC se validan de forma cruzada con los datos de OCR de las fotos del documento, la comparación biométrica facial y la verificación del dígito de control de la MRZ.**7. Resultado y puntuación de confianza**El resultado final de la verificación incluye:| Resultado | Descripción |
| - | - |
| **Estado de la verificación NFC** | Correcta, fallida u omitida |
| **Puntuación de coherencia de datos** | Grado de coincidencia entre los datos NFC y los datos visuales |
| **Validación de certificados** | Estado de la verificación de toda la cadena |
| **Aumento de confianza** | El NFC aporta una confianza significativamente mayor a la verificación global |***## Documentos compatiblesLa verificación NFC funciona con **pasaportes electrónicos** y **eID** que contienen un chip NFC, normalmente indicado con este símbolo en el documento:![Logotipo de pasaporte electrónico](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/epassport-logo.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=89cd90281e6ff1cd96f5a3d6a2200cad)La mayoría de los pasaportes emitidos después de 2006 incluyen chips NFC. La cobertura de los documentos nacionales de identidad varía según el país. Consulta todos los [documentos compatibles](https://docs.didit.me/core-technology/nfc-verification/supported-documents-nfc-verification.md).La My Number Card de Japón tiene otro tipo de chip, que se lee mediante JPKI en lugar de ICAO 9303. Consulta [My Number Card de Japón (JPKI)](#my-number-card-de-japón-jpki).***## My Number Card de Japón (JPKI)La My Number Card de Japón (マイナンバーカード) tiene un chip, pero no es un chip ICAO 9303. Contiene certificados emitidos bajo JPKI, la infraestructura de clave pública de Japón, y claves privadas que solo firman después de que el titular introduzca el PIN de la tarjeta. Didit la lee en el mismo paso NFC, mediante JPKI en lugar de ICAO 9303, y cada resultado NFC indica qué protocolo se usó en `chip_protocol` (`icao` o `jpki`).> [!WARNING]
>
> **Aún no disponible.** La lectura de la My Number Card mediante JPKI no está habilitada en producción. Hasta que lo esté, una My Number Card capturada en un SDK nativo omite el paso NFC con el motivo de omisión `JPKI_UNAVAILABLE`, y la tarjeta se verifica con captura del documento y coincidencia facial como hasta ahora.### Requisitos| Requisito | Detalle |
| - | - |
| **Documento** | Solo la My Number Card de Japón. Los pasaportes japoneses mantienen la lectura del chip ICAO 9303. |
| **Integración** | Una versión de SDK nativo que lea My Number Card (iOS, Android o los SDK de React Native y Flutter basados en ellos). El SDK indica a Didit que puede leer JPKI; una versión anterior omite el paso con `JPKI_UNAVAILABLE`. Las integraciones web y WebView lo omiten con `INTEGRATION_WITHOUT_NFC_ACCESS`. |
| **Dispositivo** | Un teléfono con lector NFC. Sin él, el paso se omite con `DEVICE_WITHOUT_NFC`. |
| **App anfitriona de iOS** | `D392F000260100000001` en los identificadores de selección ISO7816 de la app. Consulta [configuración de NFC en iOS](https://docs.didit.me/integration/native-sdks/ios-sdk.md#nfc-configuration). |
| **Persona** | Conoce el PIN de 4 dígitos de la tarjeta y, si tu flujo solicita los datos del titular, también su contraseña de firma. |### Qué hace la persona**1. Fotografiar la tarjeta**La persona captura la My Number Card en el paso de verificación de identidad, como con cualquier documento. Didit reconoce la tarjeta y envía un paso NFC JPKI en lugar de una lectura del chip de un pasaporte.**2. Introducir el PIN de la tarjeta**El SDK solicita el PIN de 4 dígitos de la tarjeta (利用者証明用電子証明書の暗証番号). Cuando el ajuste `jpki_request_attributes` del nodo NFC está activado (el valor por defecto), también solicita la contraseña de firma, llamada también PIN de firma (署名用電子証明書の暗証番号, de 6 a 16 letras mayúsculas y números).**3. Acercar la tarjeta al teléfono**El SDK lee los certificados de la tarjeta, y la tarjeta firma con su propia clave un desafío de un solo uso enviado por Didit. El SDK sube los certificados y las firmas. Los PIN solo se envían a la tarjeta, nunca a Didit.> [!NOTE]
>
> La tarjeta cuenta las entradas incorrectas: bloquea el PIN de 4 dígitos tras 3 seguidas y la contraseña de firma tras 5, y un PIN bloqueado debe restablecerse en el ayuntamiento del titular. Tras una entrada incorrecta, el SDK muestra cuántos intentos quedan. Nunca hace el último intento: cuando solo queda uno, se detiene e indica a la persona dónde restablecerlo. Pide a los usuarios que tengan a mano su PIN y su contraseña de firma antes de empezar.### Qué comprueba Didit| Comprobación | Qué verifica Didit | Advertencia si falla (acción por defecto) |
| - | - | - |
| **Cadena de certificados** | Cada certificado encadena con la autoridad de certificación JPKI de su tipo, está dentro de su periodo de validez y es un certificado de My Number Card (`jpki.chain_valid`). | `JPKI_CERTIFICATE_INVALID` (Rechazar) |
| **Tarjeta y PIN** | La firma de la tarjeta sobre el desafío de un solo uso se verifica con su certificado (`jpki.signature_valid`). La tarjeta solo firma tras introducir su PIN, así que esto demuestra que la persona tiene la tarjeta y conoce el PIN. | `JPKI_SIGNATURE_INVALID` (Rechazar) |
| **Revocación** | Ningún certificado ha sido revocado (`jpki.revocation_status`). | `JPKI_CERTIFICATE_REVOKED` cuando es `revoked` (Rechazar), `JPKI_REVOCATION_UNCHECKED` cuando es `unchecked` (Revisar) |
| **Datos del titular** | El nombre, la fecha de nacimiento, el sexo y la dirección del certificado de firma coinciden con los datos leídos de la foto de la misma tarjeta (`jpki.attributes_match_ocr`, `jpki.mismatched_attributes`). | `JPKI_AND_OCR_DATA_NOT_SAME` (Revisar) |Cada acción es un ajuste del nodo NFC, así que puedes cambiarla a **Sin acción**, **Revisar** o **Rechazar**. Consulta las [advertencias de NFC](https://docs.didit.me/core-technology/nfc-verification/warnings-nfc-verification.md#japan-my-number-card-jpki) y la [configuración de la función NFC](https://docs.didit.me/management-api/workflows/feature-configs.md#nfc-/-epassport).### Qué significa un estado de revocación sin comprobar`revocation_status: "unchecked"` significa que Didit verificó la cadena de certificados y la firma de la tarjeta, pero no obtuvo respuesta sobre si un certificado se ha revocado. Un certificado se revoca, por ejemplo, cuando se denuncia la pérdida de la tarjeta. Como no se puede descartar que la tarjeta esté revocada, `unchecked` nunca se trata como `good`. Genera `JPKI_REVOCATION_UNCHECKED`, que por defecto envía el paso NFC a revisión. Elige otro resultado con `jpki_revocation_unchecked_action`.Cuando la cadena de certificados o la firma no son válidas, Didit no consulta la revocación: el estado se queda en `unchecked` y solo se genera la advertencia de la cadena o de la firma.### Datos del titular y privacidad- Con `jpki_request_attributes` activado, la decisión incluye el nombre, la fecha de nacimiento, el sexo y la dirección del titular del certificado de firma en `jpki.attributes`. Con él desactivado, la persona solo introduce el PIN de 4 dígitos: la lectura sigue demostrando la tarjeta y el PIN, pero no incluye datos del titular ni se compara con la foto de la tarjeta.
- El paso NFC nunca lee del chip el Número Individual de 12 dígitos de la tarjeta (My Number).
- La decisión informa de lo que demostró la tarjeta, nunca de los certificados en sí, sus números de serie ni las firmas.El resultado completo se describe en el [informe de verificación NFC](https://docs.didit.me/core-technology/nfc-verification/report-nfc-verification.md#japan-my-number-card-jpki).***## Ejemplos de integración### SDK de iOS (disponible ahora)```swift theme={null}
import DiditSdk

// NFC is automatically enabled when the document supports it
let config = DiditSdk.Configuration(
    // NFC configuration is handled automatically
    // Just ensure your app has the required entitlements
)

let result = try await DiditSdk.shared.startVerification(
    with: sessionId,
    configuration: config
)
```**[Documentación completa del SDK de iOS →](https://docs.didit.me/integration/native-sdks/ios-sdk.md)**### SDK de Android (próximamente)```kotlin theme={null}
// Coming soon - use WebView integration in the meantime
// See Android SDK documentation for WebView setup
```**[Documentación del SDK de Android →](https://docs.didit.me/integration/native-sdks/android-sdk.md)*****## Arquitectura de seguridad```
┌─────────────────────────────────────────────────────────────┐
│                    NFC Verification Flow                     │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────┐    ┌──────────┐    ┌──────────────────────┐  │
│  │ Document │───▶│  Phone   │───▶│   Didit Backend      │  │
│  │ NFC Chip │    │ NFC Read │    │                      │  │
│  └──────────┘    └──────────┘    │  ┌────────────────┐  │  │
│                                   │  │ ICAO PKD       │  │  │
│                                   │  │ Validation     │  │  │
│                                   │  └────────────────┘  │  │
│                                   │  ┌────────────────┐  │  │
│                                   │  │ CSCA Master    │  │  │
│                                   │  │ List Check     │  │  │
│                                   │  └────────────────┘  │  │
│                                   │  ┌────────────────┐  │  │
│                                   │  │ CRL Revocation │  │  │
│                                   │  │ Check          │  │  │
│                                   │  └────────────────┘  │  │
│                                   └──────────────────────┘  │
│                                              │               │
│                                              ▼               │
│                                   ┌──────────────────────┐  │
│                                   │  Verification Result │  │
│                                   │  + Confidence Score  │  │
│                                   └──────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
```***## Preguntas frecuentes<details>
  <summary>**¿Qué pasa si el teléfono del usuario no admite NFC?**</summary>

  El flujo de verificación detecta automáticamente la compatibilidad con NFC. Si no está disponible, los usuarios continúan con la verificación estándar de documento y selfie. La verificación sigue siendo segura, solo que sin el aumento de confianza adicional que aporta el NFC.
</details><details>
  <summary>**¿Qué pasa si el documento no tiene chip NFC?**</summary>

  Muchos documentos (especialmente los pasaportes antiguos y algunos documentos nacionales de identidad) no tienen chip NFC. El sistema lo detecta y continúa sin interrupciones con la verificación estándar.
</details><details>
  <summary>**¿Cuánto mejora la verificación NFC la precisión?**</summary>

  La verificación NFC aporta una prueba criptográfica de la autenticidad del documento directamente del gobierno emisor. Esto aumenta de forma significativa la confianza en el resultado de la verificación y detecta falsificaciones sofisticadas que podrían pasar una inspección visual.
</details><details>
  <summary>**¿Es obligatoria la verificación NFC?**</summary>

  No. El NFC es una mejora, no un requisito. Tu flujo de verificación puede configurarse para exigir el NFC, preferirlo cuando esté disponible u omitirlo por completo, según tu tolerancia al riesgo.
</details>***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.