Download OpenAPI specification:Download
With ID Scan, you can verify your customer's identity by letting them scan their identity document using a mobile device, like a passport or a driver's license. An advanced OCR engine abstracts data from their document and detects the customer as a living human being via their device's camera.
Create a new transaction. To get notified about status updates, configure a webhook via the /webhooks endpoint. For the event structure see the Webhook Events section.
| expiresIn | integer [ 3600 .. 86400 ] Default: 3600 The time in seconds after which a transaction should expire. |
| tasks required | Array of strings (TaskType) Items Enum: "document_scan" "face_liveness" "face_match" The tasks to be performed by the user. The |
object (Settings) | |
| locale | string (Locale) Default: "en-US" Enum: "en-US" "nl-NL" "fr-FR" "it-IT" The language of the ID Scan process. Currently supports English, Dutch, French. |
| mobileOnly | boolean Default: false When this is set to true, the user must complete the transaction on their mobile device. |
| returnUrl | string Default: null The URL to redirect the user to after the transaction is completed. The |
| scanReturnUrl | string Default: null The URL to redirect the user to in case the transaction is transferred to a mobile device (by scanning the QR code) and the transaction is completed. The |
{- "tasks": [
- "document_scan"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "pending",
- "tasks": [
- "document_scan"
], - "settings": {
- "documentScan": {
- "allowedExpiration": 90,
- "captureSources": [
- "camera",
- "file"
], - "redactFields": [
- "personal_number"
], - "minimumAge": 16,
- "maximumAge": 80,
- "requireBothSides": false,
- "desiredFields": [
- "personal_number"
], - "validateFields": [
- "personal_number"
], - "extractFields": [
- "document_number",
- "date_of_birth",
- "document_image",
- "portrait"
]
}
}, - "locale": "en-US",
- "mobileOnly": false,
- "returnUrl": null,
- "scanReturnUrl": null,
- "expires": "2019-08-24T14:15:22Z",
- "created": "2019-08-24T14:15:22Z"
}Get all transactions
| since required | string <date-time> Example: since=2026-01-01T00:00:00Z Filter transactions created after this date (inclusive). This date may not be older than 1 year. |
| until required | string <date-time> Example: until=2026-02-01T00:00:00Z Filter transactions created before this date (exclusive). |
| pageSize | number [ 1 .. 100 ] Default: 20 The number of items per page |
| cursor | string The pointer to the next item in the data set, returned by the previous request. |
{- "nextCursor": "0ETuixXmBflbB8voRanDsw",
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "pending",
- "created": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "completed": "2019-08-24T14:15:22Z",
- "tasks": [
- {
- "type": "document_scan",
- "state": "pending",
- "attempts": 3,
- "attemptsInvoiced": 1
}
]
}
]
}Retrieve the details of a transaction by its ID.
| transactionId required | string Unique identifier for the transaction |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "pending",
- "created": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "completed": "2019-08-24T14:15:22Z",
- "tasks": [
- {
- "type": "document_scan",
- "documentScans": [
- {
- "created": "2019-08-24T14:15:22Z",
- "code": null,
- "score": 0.99,
- "source": "camera",
- "linked": true,
- "files": [
]
}
], - "state": "pending",
- "attempts": 3,
- "attemptsInvoiced": 1
}
]
}Retrieve the results for a completed transaction.
| transactionId required | string <uuid> A unique identifier for the transaction. |
| resultId required | string <uuid> This result ID can be obtained from the |
| includeRawImages | boolean Default: false Example: includeRawImages=true If set to true, a url to download the raw images will be added to the result |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "pending",
- "tasks": [
- {
- "type": "string",
- "result": [
- {
- "field": "personal_number",
- "validity": "valid",
- "comparison": "match",
- "locale": "nl-NL",
- "values": [
- {
- "source": "visual",
- "value": "NLD"
}
]
}
], - "files": [
], - "state": "pending",
- "attempts": 1,
- "score": 0.99
}
]
}Retrieve an audit report of a completed transaction.
Can specify the type of report using the type query parameter.
Simple reports are always available to be retrieved.
Extended audit reports contain all documents and will be sealed, only retrievable within transaction validity.
| transactionId required | string <uuid> A unique identifier for the transaction. |
| resultId required | string <uuid> This result ID can be obtained from the |
| type | string (AuditReportType) Default: "simple" Enum: "simple" "extended" Specify the type of audit report. Defaults to Simple audit report already exists and can always be retrieved. Extended audit report can be requested within the ID Scan transaction validity. |
{- "status": 401,
- "message": "Unauthorized"
}Manage the webhooks that receive notifications when the state of a transaction or task changes.
Add a webhook
| url required | string <uri> The URL must begin with |
| events | Array of strings (WebhookType) Default: ["transaction.state.updated","task.state.updated"] Items Enum: "transaction.state.updated" "task.state.updated" The subscribed webhook events. |
object or null The custom HTTP headers sent with each request to the webhook URL. The value is |
{- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}, - "updated": "2019-08-24T14:15:22Z",
- "created": "2019-08-24T14:15:22Z"
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}, - "updated": "2019-08-24T14:15:22Z",
- "created": "2019-08-24T14:15:22Z"
}
]Retrieve a webhook
| webhookId required | string <uuid> A unique identifier for the webhook. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}, - "updated": "2019-08-24T14:15:22Z",
- "created": "2019-08-24T14:15:22Z"
}Update a webhook
| webhookId required | string <uuid> A unique identifier for the webhook. |
| url required | string <uri> The URL must begin with |
| events | Array of strings (WebhookType) Default: ["transaction.state.updated","task.state.updated"] Items Enum: "transaction.state.updated" "task.state.updated" The subscribed webhook events. |
object or null The custom HTTP headers sent with each request to the webhook URL. The value is |
{- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}, - "updated": "2019-08-24T14:15:22Z",
- "created": "2019-08-24T14:15:22Z"
}Delete a webhook
| webhookId required | string <uuid> A unique identifier for the webhook. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "events": [
- "transaction.state.updated",
- "task.state.updated"
], - "headers": {
- "My-Custom-Header": "Example"
}, - "updated": "2019-08-24T14:15:22Z",
- "created": "2019-08-24T14:15:22Z"
}Events sent to your webhook URL when the state of a transaction or task changes. Webhooks are subscribed to via the Webhooks endpoints.
The state of a transaction is updated. For example, from pending to completed. The resultId is only present when the state is completed. This event is sent by default.
Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.
| id required | string <uuid> A unique identifier for the event. |
| created required | string <date-time> The date the event was created. |
| type required | string The type of the event. Value: "transaction.state.updated" |
required | object |
{- "id": "b041a287-bc92-4469-801e-ae1a39c08f6e",
- "type": "transaction.state.updated",
- "created": "2026-01-01T00:00:00+00:00",
- "transaction": {
- "id": "b659c273-954e-43cf-893a-0f74a7f87153",
- "state": "completed",
- "resultId": "e6b7ce66-df56-4316-bb36-3d014ed84636"
}
}The state of a task is updated. For example, from pending to completed. This event is sent by default.
Your server implementation should return a 2xx HTTP status code if the event was received successfully. The response body is ignored.
| id required | string <uuid> A unique identifier for the event. |
| created required | string <date-time> The date the event was created. |
| type required | string The type of the event. Value: "task.state.updated" |
required | object |
required | object |
{- "id": "c36f5fc9-b412-4aeb-9cbd-bdb6cdca581f",
- "type": "task.state.updated",
- "created": "2026-01-01T00:00:00+00:00",
- "transaction": {
- "id": "b659c273-954e-43cf-893a-0f74a7f87153",
- "state": "pending"
}, - "task": {
- "type": "document_scan",
- "state": "completed"
}
}Configure how transactions behave, such as which image quality checks are enforced for document scans.
{- "documentScan": {
- "imageQualityChecks": {
- "glare": false,
- "focus": false,
- "resolution": false,
- "color": false,
- "perspective": false,
- "bounds": false,
- "moire": false,
- "portrait": false,
- "handwritten": false,
- "brightness": false,
- "occlusion": false
}
}
}Update the configuration. Only the provided values are changed; omitted values keep their current setting.
object (DocumentScanConfig) Configuration applied to document scan tasks. | |||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
{- "documentScan": {
- "imageQualityChecks": {
- "glare": false,
- "focus": false,
- "resolution": false,
- "color": false,
- "perspective": false,
- "bounds": false,
- "moire": false,
- "portrait": false,
- "handwritten": false,
- "brightness": false,
- "occlusion": false
}
}
}{- "documentScan": {
- "imageQualityChecks": {
- "glare": false,
- "focus": false,
- "resolution": false,
- "color": false,
- "perspective": false,
- "bounds": false,
- "moire": false,
- "portrait": false,
- "handwritten": false,
- "brightness": false,
- "occlusion": false
}
}
}