Document Verification API - Detailed Documentation
The Document Verification API enables the submission and verification of identification documents through a multi-step journey or a single-step process. It also includes optional checks for age verification and disability assessment.API Playground:
- /openJourney
- /addImage
- /verify
- /verify/age
- /verifySingle
You can try the openJourney endpoint here.
Endpoints Overview
- Document Verification with Journey Build-Up:
- Open a verification journey.
- Upload document images (front, back, selfie).
- Initiate document verification.
 
- Single-Step Verification:
- Upload all images in a single request.
- Get instant verification results.
 
- Age and Disability Check:
- Verify user eligibility based on age or disability percentage.
 
- Error Handling & Codes:
- Standardized error messages for seamless integration.
 
Authentication
To access the Address Verification API, authentication is required. A Bearer Token must be included in every request.- Tokens are valid for 60 minutes and must be refreshed after expiration.
- Refer to the Authentication for detailed steps on obtaining a token.
- Include the token in the Authorizationheader as follows:
API Base URL
1. Document Verification with Journey Build-Up (Upcoming)
Description
This section covers the multi-step approach, where you first open a journey, then upload documents in steps, and finally call the verification endpoint(s).1.1 Open Journey
Endpoint
POST/openJourney
Description
Starts a new verification journey where the customer can submit documents in steps.Required Headers
| Header | Value | 
|---|---|
| Content-Type | application/json | 
| Authorization | Bearer yourAccessToken | 
Request Body Parameters
None required (optional metadata can be included).
Response Structure
Response Structure
Response Structure
| Parameter | Type | Required | Description | 
|---|---|---|---|
| journeyId | string | Yes | Unique identifier for the verification journey. | 
| passThroughData | object | No | Optional metadata to be carried through the journey. | 
Example Response
1.2 Add Image (Upcoming)
Endpoint
POST/addImage
Description
After opening a journey, you can upload an image representing the front/back of an ID or a selfie. Adds an image (front, back, or selfie) to the ongoing journey. Images can be submitted as base64-encoded strings or as file uploads.Request Body Parameters
Request Body Parameters
Request Body Parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
| journeyId | String | Yes | Unique identifier for the verification journey. | 
| imageName | String | Yes | Name of the uploaded image file. | 
| imageSide | String | Yes | Specifies which side of the document (front, back, selfie). | 
| storeOnly | Boolean | No | If true, stores the image without classification. | 
| imageData | String | Yes | Base64-encoded image or multipart file. | 
| passThroughData | Object | No | Custom metadata (e.g., user ID). | 
Example Request
Example Request with Multiple Images
1.3 Verify (Upcoming)
Endpoint
POST/verify
Description
Once you’ve uploaded all relevant images, you can call this endpoint to verify them. Initiates the verification of all images submitted in this journey. Returns a detailed verification result (see response structure below).Required Headers
| Header | Value | 
|---|---|
| Content-Type | application/json | 
| Authorization | Bearer yourAccessToken | 
Request Body Parameters
Request Body Parameters
Request Body Parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
| journeyId | String | Yes | Unique identifier for the verification journey. | 
Response Structure
Response Structure
Response Structure
| Parameter | Type | Description | 
|---|---|---|
| journeyId | String | Unique identifier for the verification journey. | 
| status | String | Status of the verification process (e.g., verificationComplete). | 
| identitySubject | Object | Contains extracted identity details from the document. | 
| identitySubject.type | String | Type of identity subject (e.g., "person"). | 
| identitySubject.fullName | String | Full name as extracted from the document. | 
| identitySubject.nameStructure | Object | Breakdown of the name details. | 
| identitySubject.nameStructure.firstName | String | First name of the individual. | 
| identitySubject.nameStructure.lastName | String | Last name of the individual. | 
| identitySubject.nameStructure.nativeFullName | String | Native full name of the individual. | 
| identitySubject.gender | String | Gender ( M,F, orX). | 
| identitySubject.nationality | String | Nationality code (ISO 3166, e.g., "DE"). | 
| identitySubject.dob | String | Date of birth ( YYYY/MM/DD). | 
| identitySubject.addressSingleLine | String | Extracted address in single-line format. | 
| identitySubject.email | String | Extracted email (if available). | 
| identitySubject.mobileNumber | String | Extracted mobile number (if available). | 
| authoritativeData | Object | Contains verified details from the identity document. | 
| authoritativeData.identityDocument | Object | Identity document details. | 
| authoritativeData.identityDocument.type | String | Type of document ( passport,IDCard, etc.). | 
| authoritativeData.identityDocument.idNumber | String | Document ID number. | 
| authoritativeData.identityDocument.issuingCountry | String | Country that issued the document. | 
| authoritativeData.identityDocument.expeditor | String | Issuing authority (e.g., "BH Neunkirchen"). | 
| authoritativeData.identityDocument.expirationDate | String | Expiry date of the document ( YYYY/MM/DD). | 
| authoritativeData.identityDocument.verificationChannel | String | How verification was performed ( optical,manual, etc.). | 
| proofOfWork | Object | Contains metadata related to proof of verification. | 
| proofOfWork.type | String | Type of proof (e.g., "image"). | 
| proofOfWork.titleOfProof | String | Title describing the proof (e.g., "IDFront"). | 
| proofOfWork.timestampOfProof | String | Timestamp when the proof was collected ( YYYY/MM/DDTHH:MM:SSZ). | 
| auditTrail | Object | Contains logging details about the verification process. | 
| auditTrail.workId | String | Unique ID of the verification attempt. | 
| auditTrail.workStatus | String | Status of the work ( PASS,FAIL). | 
| auditTrail.workStartTst | String | Timestamp when the verification started. | 
| auditTrail.workEndTst | String | Timestamp when the verification ended. | 
| auditTrail.workResult | String | Summary of the verification result. | 
| fraudAlerts | Object | Contains fraud detection-related data. | 
| fraudAlerts.fraudAlertDetail | Array | List of detected fraud alerts (if any). | 
| fraudAlerts.aggregateFraudAlertScore | Number | Overall fraud risk score ( 0 = no risk). | 
| croppedImages | Object | Cropped images extracted from the document. | 
| croppedImages.front | String | Base64-encoded image of the front side. | 
| croppedImages.portrait | String | Base64-encoded portrait image from the document. | 
| croppedImages.signature | String | Base64-encoded signature image. | 
| croppedImages.back | String | Base64-encoded image of the back side. | 
| croppedImages.selfie | String | Base64-encoded selfie image (if applicable). | 
Example Request
Example Response
1.4 Verify with Age and Disability Check (Upcoming)
Endpoint
POST/verify/age
Description
Performs an optional age/disability verification after documents are submitted. Checks if the user meets certain age or disability thresholds. Note:ageFrom and ageTo are mutually exclusive—do not use both in the same request.
Required Headers
| Header | Value | 
|---|---|
| Content-Type | application/json | 
| Authorization | Bearer yourAccessToken | 
Request Body Parameters
Request Body Parameters
Request Body Parameters
| Parameter | Type | Description | 
|---|---|---|
| ageFrom | Number | Minimum age for eligibility (can’t combine with ageTo). | 
| ageTo | Number | Maximum age for eligibility (can’t combine with ageFrom). | 
| minDisabilityPercentage | Number | Minimum disability percentage required for eligibility. | 
Response Structure
Response Structure
Response Structure
| Parameter | Type | Description | 
|---|---|---|
| journeyId | String | Unique identifier for the verification journey. | 
| status | String | Status of the verification process ( ageAndDisabilityVerificationComplete). | 
| ageResult | String | Indicates if the individual meets the age requirement ( yesorno). | 
| disabilityResult | String | Indicates if the individual meets the disability criteria ( eligibleornot eligible). | 
Example Request
Example Response
2. Single-Step Verification
Description
This section describes the single-step approach, bypassing the journey creation. You must provide all images in one request.2.1 Verify in One Step
Endpoint
POST/verifySingle
Description
Bypasses the journey build-up and processes all images in one request. No feedback is provided if pages are missing—all must be submitted at once.Required Headers
| Header | Value | 
|---|---|
| Content-Type | application/json | 
| Authorization | Bearer yourAccessToken | 
Request Body Parameters
Request Body Parameters
Request Body Parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
| images | Array | Yes | List of image objects for verification. | 
| imageName | String | Yes | Name of the uploaded image. | 
| imageSide | String | Yes | Specifies document side ( front,back, etc.). | 
| imageData | String | Yes | Base64-encoded image data (or file upload via multipart). | 
Response Structure
Response Structure
Response Structure
| Parameter | Type | Description | 
|---|---|---|
| journeyId | String | Unique identifier for the verification journey. | 
| status | String | Status of the verification process (e.g., verificationComplete). | 
| identitySubject | Object | Contains extracted identity details from the document. | 
| identitySubject.type | String | Type of identity subject (e.g., "person"). | 
| identitySubject.fullName | String | Full name as extracted from the document. | 
| identitySubject.nameStructure | Object | Breakdown of the name details. | 
| identitySubject.nameStructure.firstName | String | First name of the individual. | 
| identitySubject.nameStructure.lastName | String | Last name of the individual. | 
| identitySubject.nameStructure.nativeFullName | String | Native full name of the individual. | 
| identitySubject.gender | String | Gender ( M,F, orX). | 
| identitySubject.nationality | String | Nationality code (ISO 3166, e.g., "DE"). | 
| identitySubject.dob | String | Date of birth ( YYYY/MM/DD). | 
| identitySubject.addressSingleLine | String | Extracted address in single-line format. | 
| identitySubject.email | String | Extracted email (if available). | 
| identitySubject.mobileNumber | String | Extracted mobile number (if available). | 
| authoritativeData | Object | Contains verified details from the identity document. | 
| authoritativeData.identityDocument | Object | Identity document details. | 
| authoritativeData.identityDocument.type | String | Type of document ( passport,IDCard, etc.). | 
| authoritativeData.identityDocument.idNumber | String | Document ID number. | 
| authoritativeData.identityDocument.issuingCountry | String | Country that issued the document. | 
| authoritativeData.identityDocument.expeditor | String | Issuing authority (e.g., "BH Neunkirchen"). | 
| authoritativeData.identityDocument.expirationDate | String | Expiry date of the document ( YYYY/MM/DD). | 
| proofOfWork | Object | Contains metadata related to proof of verification. | 
| proofOfWork.type | String | Type of proof (e.g., "image"). | 
| proofOfWork.titleOfProof | String | Title describing the proof (e.g., "IDFront"). | 
| proofOfWork.timestampOfProof | String | Timestamp when the proof was collected ( YYYY/MM/DDTHH:MM:SSZ). | 
| fraudAlerts | Object | Contains fraud detection-related data. | 
| fraudAlerts.fraudAlertDetail | Array | List of detected fraud alerts (if any). | 
| fraudAlerts.aggregateFraudAlertScore | Number | Overall fraud risk score ( 0 = no risk). | 
| croppedImages | Object | Cropped images extracted from the document. | 
| croppedImages.front | String | Base64-encoded image of the front side. | 
| croppedImages.portrait | String | Base64-encoded portrait image from the document. | 
| croppedImages.signature | String | Base64-encoded signature image. | 
| croppedImages.back | String | Base64-encoded image of the back side. | 
| croppedImages.selfie | String | Base64-encoded selfie image (if applicable). | 
Example Request
Error Handling & Codes
Below is how the Document Verification API handles errors. This section is divided into:- General HTTP Status Codes - which apply across all endpoints.
- Generic Error Response Structure - the standard JSON format returned in error cases.
- Endpoint-Specific Error Scenarios - a reference table detailing common error codes for each endpoint.
General HTTP Status Codes
| HTTP Status | Meaning | Description | 
|---|---|---|
| 200 | OK | Request succeeded. See response body for details. | 
| 400 | Bad Request | The request was invalid or missing required parameters. | 
| 401 | Unauthorized | Authentication failed or the user lacks valid credentials. | 
| 403 | Forbidden | The user does not have permission to perform this operation. | 
| 404 | Not Found | Resource or endpoint not found. | 
| 422 | Unprocessable Entity | The request is understood, but cannot be processed (e.g., malformed base64 or missing data). | 
| 429 | Too Many Requests | Rate limit exceeded. | 
| 500 | Internal Server Error | A generic server-side error occurred. | 
Generic Error Response Structure
When an error occurs (i.e., a4xx or 5xx status code), the API returns a JSON body with the following format:
Response Structure
Response Structure
Response Structure
| Field | Type | Description | 
|---|---|---|
| errorCode | String | A short code identifying the specific error scenario, e.g., invalidImageData. | 
| errorMessage | String | A human-readable description of the error. | 
| details | Object | Additional context (e.g., invalid field, expected values vs. actual). | 
Example Response
- errorCodeis particularly useful for programmatic checks in client applications.
- errorMessageshould help developers quickly understand what went wrong.
- detailscan be omitted if no extra info is needed.
Endpoint-Specific Error Scenarios
Each endpoint may have unique validation or domain-specific constraints. The table below summarizes common error codes per endpoint. All error responses conform to the Generic Error Response Structure above.| Endpoint | Error Code | HTTP Status | Error Message | Description | 
|---|---|---|---|---|
| /openJourney | journeyAlreadyExists | 400 | A journey already exists for this user/session. | Occurs if the client tries to open a new journey while one is still active. | 
| /addImage | invalidImageData | 400 | Base64 string is malformed or missing. | Triggered if imageDatais not valid base64 or is absent. | 
| journeyNotFound | 404 | No active journey with the given journeyId. | The provided journeyIddoes not exist or has already been closed. | |
| /verify | journeyNotFound | 404 | No active journey with the given journeyId. | Attempted verification on an invalid or missing journeyId. | 
| missingImages | 422 | Required images (front/back/selfie) were not all provided. | Verification could not be completed because essential images are missing. | |
| /verify/age | mutuallyExclusive | 400 | ageFromandageTocannot both be specified. | The request included both ageFromandageTo, which is not allowed. | 
| journeyNotFound | 404 | No active journey with the given journeyId. | As above. | |
| /verifySingle | missingImages | 422 | Not all necessary images (front/back) were provided. | Single-step verification requires all images in a single request. | 
| invalidImageData | 400 | Base64 string is malformed or missing. | Same as above, but specifically applies to single-step scenarios. | 
Handling Errors
- Check the HTTP status code returned from the API.
- Parse the JSON if the status code indicates an error (4xxor5xx).
- Use errorCodeto determine the type of error (e.g.,JOURNEY_NOT_FOUND), and handle it in your client application (e.g., show a specific user message).
- Look at errorMessagefor a human-readable explanation of the issue.
- Examine detailsif present, to get more granular context (e.g., which field triggered the error).