Verifying ID document (IDC) (v4)
This version of this step type is in preview / alpha. The functionality and subsequently the documentation can still change.
The stable / GA version of this step is Verifying ID document (IDC) (v3)
End-to-end, compliant document-based identity verification (v4)
Verifies identity using secure identity documents through multiple verification modes, adapted to business and regulatory needs.
In Capture mode, the end user completes verification through the IDnow frontend, which guides them step by step in providing the required identity evidence. This includes capturing document images, performing biometric checks (such as face matching and liveness detection), and optionally reading electronic document chips via NFC.
Key features
- Automated visual verification - AI-based analysis of ID document authenticity, integrity, and visual security features.
- Automated NFC verification - Secure reading and validation of embedded NFC chips in electronic identity documents.
- Agent-assisted verification - Expert review for complex, regulated, or escalated cases both in Autoident and VideoIndent products.
- Capture frontend: Guided user interface to collect document images, biometric samples, and NFC data directly from the end user through SDKs.
- Optimized data quality - Built-in guidance ensures correct document positioning, image sharpness, and proper lighting for improved verification outcomes.
- Configurable workflows - Automated and manual verification modes can be combined or sequenced based on business or regulatory requirements.
- Regulatory alignment - Fully compliant with eIDAS, AML, GwG, EAA and BaFin standards for secure remote identity verification.
- Explicit cancellation routing: When
enableCancellation: true, cancelled sessions (user-initiated or agent-initiated) exit via thecancelledroute and can have a dedicated routing.
Configuration
| Option | Type | Required | Default | Description |
|---|---|---|---|---|
inputSources | object | No | — | Specifies the workflow step IDs to use for sourcing data. If omitted, the step will use the latest available data blocks from the workflow. |
inputSources.basicIdentity | string | No | — | The ID of the step providing the BasicIdentity data block. |
inputSources.extendedIdentity | string | No | — | The ID of the step providing the ExtendedIdentity data block. |
capture | object | Yes | — | Capture configuration including document types and biometric sample types. |
capture.documentTypes | string[] | Yes | — | List of document types. Accepted values: ID, PASSPORT, RESIDENT_PERMIT, VISA, DRIVING_LICENSE, HEALTH_CARD. |
capture.biometricSampleTypes | string[] | Yes | — | List of biometric sample types. Accepted values: SELFIE, VIDEO. |
capture.biometricConsentHandling | string | No | "SDK" | How biometric consent is handled during capture. Accepted values: SDK, CUSTOMER. |
capture.withDocLiveness | boolean | No | — | When true, enables document liveness detection during capture. |
config | object | Yes | — | Environment-specific configuration. |
config.live.realm | string | Yes | — | The realm identifier for the document verification service. Provided by IDnow during onboarding. (live) |
config.staging.realm | string | Yes | — | The realm identifier for the document verification service. Provided by IDnow during onboarding. (staging) |
handoff | boolean | No | false | When true, redirects the player immediately on manual review trigger and resumes polling in the background. |
enableCancellation | boolean | No | false | When true, cancelled sessions exit via the cancelled route. When false (default), the session immediately ends with an ABORTED outcome. |
Example configuration
{
"capture": {
"documentTypes": ["ID", "PASSPORT"],
"biometricSampleTypes": ["SELFIE"]
},
"config": {
"live": { "realm": "your-live-realm" },
"staging": { "realm": "your-staging-realm" }
}
}
Input data blocks
| Data block | Required | Description |
|---|---|---|
BasicIdentity | No | Pre-filled identity data to associate with the verification. |
ExtendedIdentity | No | Extended identity data to associate with the verification. |
Routes
| Route | Description |
|---|---|
verified | Successful document processing with identity extraction. User's documents were successfully verified, either automatically or by an agent. |
not_verified | Document verification failed, no processing possible. |
fraud_detected | Document identified as fraudulent, identity data extracted for manual review. |
cancelled | Available only when enableCancellation is true. User or agent cancelled the step; the end user can be routed to retry or a different step. For user-initiated and agent-initiated cancellations, only Verification is emitted. When a route configured with type: rollback redirects to cancelled, identity data blocks extracted up to that point may also be present (best-effort); DocumentImages only when processable images were returned. |
In case of cancellation - triggered by enduser or by agent - we recommend connecting this route to the Retry prompt (v1). So that the user may confirm to retry and go through the step again.
Output data blocks
| Route | Data blocks produced |
|---|---|
verified | BasicIdentity, ExtendedIdentity, DocumentData, DocumentImages, Verificationconditionally: BiometricSamples (only when capture.biometricSampleTypes is non-empty) |
not_verified | Verification |
fraud_detected | BasicIdentity, ExtendedIdentity, DocumentData, DocumentImages, Verificationconditionally: BiometricSamples (only when capture.biometricSampleTypes is non-empty) |
cancelled | VerificationAvailable only when enableCancellation is true. |
The DocumentImages produced by this step are ID-category images (passport, driving licence, etc.). They cannot be used as input for steps needing other, non-IDV DocumentImages.
This data block carries evidence artefacts under methods[].evidence[]. This Step can produce the following evidence types, each present only when the corresponding artefact is available:
documentFrontRecording,documentBackRecording,livenessRecording,documentFrontOriginalImage,documentBackOriginalImage,analysisReport
Example payloads
BasicIdentity — verified
{
"givenName": "Jean",
"familyName": "Dupont",
"name": "Jean Dupont",
"birthDate": "1985-03-22",
"birthPlace": "Paris"
}
ExtendedIdentity — verified
{
"portrait": {
"$ref": "vault",
"$id": "020ff369-43d8-4b8a-94e7-6814c0bdc35a"
},
"nationality": "FRA",
"personalAdministrativeNumber": null,
"familyNameBirth": "Dupont",
"givenNameBirth": "Jean",
"sex": 1,
"emailAddress": null,
"mobilePhoneNumber": null,
"residentAddress": null,
"residentStreet": null,
"residentHouseNumber": null,
"residentHouseName": null,
"residentCountry": null,
"residentState": null,
"residentCity": null,
"residentPostalCode": null
}
DocumentData — verified
{
"documentType": "ID",
"documentNumber": "D123456789",
"expiryDate": "2030-06-15",
"issuanceDate": "2020-06-15",
"issuingCountry": "DE",
"issuingAuthority": "Bürgeramt Berlin"
}
Verification — verified
{
"status": "verified",
"terminationReason": null,
"methods": [
{
"type": "documentCheck",
"checks": [
{
"technique": "documentValidity",
"sources": [],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "electronicRecord",
"sources": [
{
"type": "internalRegister",
"id": null
}
],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "dataCrosscheck",
"sources": [
{
"type": "mrz",
"id": null
},
{
"type": "ocr",
"id": null
}
],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "securityFeatures",
"sources": [],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "faceMatch",
"sources": [],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
}
],
"evidence": [
{
"type": "documentFrontOriginalImage",
"ref": {
"$ref": "vault",
"$id": "3f8a1c2e-7a4b-4d91-8c62-f1a9237e6d05"
}
},
{
"type": "documentBackOriginalImage",
"ref": {
"$ref": "vault",
"$id": "7b2d9e4a-2c8f-4e17-9d53-b6e08a41c792"
}
},
{
"type": "analysisReport",
"ref": {
"$ref": "vault",
"$id": "c1e6f0b8-9d42-4f6a-8e77-3b5c1d90ae14"
}
}
]
}
],
"provider": "idnow",
"trustFramework": null,
"assuranceLevel": null,
"verifiedAt": "2026-02-10T14:00:01.000Z",
"verificationProcessId": "d59cf1d1-d715-406e-ba47-4027fb8918f0"
}
Verification — not_verified
{
"status": "rejected",
"terminationReason": null,
"methods": [
{
"type": "documentCheck",
"checks": [
{
"technique": "documentValidity",
"sources": [],
"outcome": "failed",
"issues": [
{
"code": "DOC_EXPIRATION_DATE",
"severity": "error",
"message": "There are some warnings concerning the document expiration date"
}
],
"performedBy": null,
"performedAt": null
},
{
"technique": "dataCrosscheck",
"sources": [
{
"type": "mrz",
"id": null
},
{
"type": "ocr",
"id": null
}
],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "securityFeatures",
"sources": [],
"outcome": "passed",
"issues": [],
"performedBy": null,
"performedAt": null
},
{
"technique": "agentReview",
"sources": [],
"outcome": null,
"issues": [],
"performedBy": null,
"performedAt": null
}
],
"evidence": [
{
"type": "analysisReport",
"ref": {
"$ref": "vault",
"$id": "7634dfe5-8dda-43d9-927a-4f69c4be84ca"
}
},
{
"type": "documentFrontOriginalImage",
"ref": {
"$ref": "vault",
"$id": "e7389b6a-2d05-4a8f-9920-e47798c9f919"
}
},
{
"type": "documentBackOriginalImage",
"ref": {
"$ref": "vault",
"$id": "71541e7d-e1dc-4826-a700-8c606f4e2dd3"
}
}
]
}
],
"provider": "idnow",
"trustFramework": null,
"assuranceLevel": null,
"verifiedAt": "2026-02-10T14:05:30.000Z",
"verificationProcessId": "3a128c6d-4960-45fd-b4d1-5922f44a61be"
}