Skip to main content
Version: 4.0.5

Integration API OAuth2

Integrating with your System

Wire your backend to the cidaas ID validator: authorize with OAuth2, create validation processes, pass reference data, and read results.

Where is the API contract?

Request/response schemas, scopes, and error codes live in the OpenAPI reference: cidaas id-validator (also under APIs in the sidebar). This guide covers the integration path — app setup, when to send which fields, and how Document Data Matching uses custom_attributes.

1. App & scopes

Non-interactive app with process and result scopes.

Authorization

2. Create process

POST /id-val-srv/processes — start a case and get a user task URL.

Invocation

3. Read result

Webhook + GET …/idcases/{caseID}/result.

Completion

Complete Prerequisites (configuration, theme, webhook) before integrating.


Enabling communication​

cidaas uses applications for API authorization. In the Admin UI open Apps → App Settings → + Create New App.

Set App Type to Non-Interactive.

Choose a descriptive App Name (e.g. ID Validation Backoffice Application), then under App Settings → Scope select:

ScopePurpose
cidaas:idval_process_startCreate processes
cidaas:idval_process_readRead process status
cidaas:idval_result_readRead case results

Optional — manage configurations via API:

ScopePurpose
cidaas:idval_settings_writeCreate / update settings
cidaas:idval_settings_readRead settings
cidaas:idval_settings_deleteDelete settings

Fill Company Details and submit. Every secured ID validator request must include a valid Bearer token.


Obtaining an OAuth2 token​

Edit your app in the overview and copy Client ID and Client Secret.

Keep credentials private

Never publish Client ID + Client Secret. Anyone with both can mint valid tokens.

POST{{base_url}}/token-srv/token
{
"client_id": "{{client_id}}",
"client_secret": "{{client_secret}}",
"grant_type": "client_credentials",
"provider": "self"
}
{
"access_token": "eyJhbGciO...",
"expires_in": 86400,
"token_type": "Bearer",
"sub": "ANONYMOUS",
"sid": "8d3ce52a-906f-4308-9c6c-f3782cbffe38"
}

Use access_token as Authorization: Bearer … on ID validator calls. expires_in is in seconds (86400 ≈ 24h).


Creating an ID validation​

You need:

  1. An ID validation setting (validation_settings_id)
  2. A post-completion redirect_url
  3. Clarity on consent (in-flow vs. already obtained)
POST{{base_url}}/id-val-srv/processes
Scope: cidaas:idval_process_startAuth: Bearer token

Full request/response contract: Create ID validation (POST /id-val-srv/processes, operation create-process).

Minimal payload​

{
"validation_settings_id": "61df0ecd-dcc1-4025-8d35-d67d4bf14553",
"external_reference": "YourExternalReference",
"redirect_url": "https://example-eshop.com/age-verification",
"unique_user_id": "[email protected]",
"user_id_type": "email"
}

Depending on your setting you may also need custom_attributes and/or consents — see below. On success, redirect the user to data.user_task_url from the response (field details in the API reference).


Custom attributes​

custom_attributes is a key–value object. Keys must match the field_key values configured for Prevalidation and/or Document Data Matching. If either feature is enabled, every required field key must be present in the create-process payload.

How document data matching uses them​

Ground truth: values you send in custom_attributes are the reference.

After the scan, the ID validator extracts the mapped document fields and compares them to your payload. A mismatch fails or flags that matching step.

This is not face matching (selfie vs. document photo). Data matching is textual / MRZ attributes you already hold.

Configure fields in the Admin UI: Document data matching · mode guidance: Verification Modes.

Example — Document Data Matching only​

Only Family Name (surname) and Given Names (given_names) are enabled → supply those keys:

{
"validation_settings_id": "61df0ecd-dcc1-4025-8d35-d67d4bf14553",
"external_reference": "YourExternalReference",
"redirect_url": "https://example-eshop.com/age-verification",
"unique_user_id": "[email protected]",
"user_id_type": "email",
"custom_attributes": {
"given_names": "Hans",
"surname": "Hansemann"
}
}

Example — plus Prevalidation​

Add the Prevalidation key (e.g. customer_number) to the same object:

{
"validation_settings_id": "61df0ecd-dcc1-4025-8d35-d67d4bf14553",
"external_reference": "YourExternalReference",
"redirect_url": "https://example-eshop.com/age-verification",
"unique_user_id": "[email protected]",
"user_id_type": "email",
"custom_attributes": {
"given_names": "Hans",
"surname": "Hansemann",
"customer_number": "DE42018769"
}
}

Consent(s)​

Consent can be collected inside the ID validator UI, or earlier in your product.

If consent capture is disabled in the setting, include consents (at least one entry with name + url):

{
"validation_settings_id": "61df0ecd-dcc1-4025-8d35-d67d4bf14553",
"external_reference": "YourExternalReference",
"redirect_url": "https://example-eshop.com/age-verification",
"unique_user_id": "[email protected]",
"user_id_type": "email",
"custom_attributes": {
"given_names": "Hans",
"surname": "Hansemann",
"customer_number": "DE42018769"
},
"consents": [
{
"name": "processing-consent",
"url": "https://www.example.com/consents/id-validation"
}
]
}

Schema details: Consents in the API reference.


Obtaining the result​

After your webhook signals completion:

GET{{base_url}}/id-val-srv/idcases/{caseID}/result
Scope: cidaas:idval_result_read

Full result schema: API reference.

Most important: result.status

ValueMeaning
SUCCESSApproved — jwt_signature is also present
FAILEDRejected / failed

Media files​

Some result.task_results entries include image_urls (direct image URLs). Currently iddocanalysis and idfaceanalysis.

Review in Admin UI​

ID Validator → ID Validation Cases lists cases with status, document, history, and media.


Next steps​

1
Pick a mode

Verification Modes — security depth and document expectations.

2
Configure the setting

Configuration — theme, consent, prevalidation, data matching.

3
OpenAPI reference

cidaas id-validator — endpoints, schemas, scopes, errors.