Download OpenAPI specification:Download
Frontend Capture API — endpoints used by mobile Apps and the IDV redirect web to collect data.
Authentication
POST /api/v1/session: Authorization: Bearer with a Keycloak access tokenCreates a frontend session for the onboarding flow.
Gateway must inject x-org-id header before forwarding the request.
Returns a sessionToken (JWT) that must be passed as X-Session-Token on GET /info and POST /submit.
Also returns the ordered steps[] list and nextStep (first step to render).
Call GET /info to retrieve locale and branding URLs before starting submissions.
Error codes:
NO_ACTIVE_FLOW (400) — customer has no active flow configuredSANDBOX_LIMIT_REACHED (403) — sandbox time or verification limit exceeded| x-org-id required | string Organization ID injected by gateway |
object | |
| workflowId | string Requested workflow ID. Defaults to the customer's default workflow if omitted. |
| enrolmentCustomerId | string ID of the customer that is targeted with this workflow. |
{- "configuration": {
- "locale": "string"
}, - "workflowId": "string",
- "enrolmentCustomerId": "string"
}{- "nextStep": {
- "component": "string",
- "requiresFile": true,
- "skippable": true,
- "step": "string"
}, - "sessionToken": "string",
- "steps": [
- {
- "component": "string",
- "requiresFile": true,
- "skippable": true,
- "step": "string"
}
], - "workflowId": "string"
}Returns locale, branding URLs and the ordered workflow step list for this session.
Call this once after POST /session before starting step submissions.
Error codes:
SESSION_NOT_FOUND (404) — session token is missing or expiredINVALID_TOKEN (401) — token signature is invalid| x-session-token required | string JWT session token obtained from POST /session |
{- "locale": "string",
- "logoUrl": "string",
- "rejectedUrl": "string",
- "steps": [
- {
- "component": "string",
- "requiresFile": true,
- "skippable": true,
- "step": "string"
}
], - "unverifiedUrl": "string",
- "verifiedUrl": "string"
}Advances the session through the current workflow step.
The server reads the current step from the session — the client never sends a step name.
Set cancel: true to abort from any step. The captured data is deleted and the session ends.
Business-logic errors are returned as HTTP 200 with an error object in the body. The nextStep always indicates where the flow is now (step id only — resolve metadata from session steps[]).
On a tenant that stores records, the outcome may still be settling when the captures are complete: nextStep.step is then enrolment_pending rather than complete, so the client can show a pending state, and the final result arrives on the configured callback. On a tenant that stores nothing, the result is delivered on the callback and is not included in this response.
Error codes (4xx/5xx):
SESSION_NOT_FOUND (404) — session token is missing or expiredINVALID_TOKEN (401) — token signature is invalid| x-session-token required | string JWT session token obtained from POST /session |
boolean or "true" (string) or "false" (string) Abort the verification. When | |
boolean or "true" (string) or "false" (string) Abort the workflow if the step performed on a phone after redirect aborts. | |
string or string or any Image or NFC data capture in the proprietary format from the capture components — required when the current step's | |
| redirectToken | string If the process continues after redirection on the phone, provide the redirection token here to continue the session. |
number or string Number of steps to skip from the current position. Only steps whose |
{- "cancel": true,
- "clearRedirectToken": true,
- "file": "File",
- "redirectToken": "string",
- "skipSteps": 1
}{- "error": {
- "code": "string",
- "details": { },
- "message": "string",
- "requestId": "string",
- "retryable": true
}, - "nextStep": {
- "step": "string",
- "data": { }
}
}Returns the full Digital Identity data of the run this session performed: the extracted fields plus an images object whose property names are the slot names accepted by GET /api/v1/result/images/{slot}.
Session-scoped by design: the identity is resolved from the session token alone, so a client can never address another run, and no tenant-wide Customer API credentials are needed. That is what lets a native mobile app without a backend receiver render its own result screen.
Works for successful and rejected runs, and also mid-flow — the identity belongs to the session either way.
The session token lives on the user device, so treat anything read here as a display value and confirm the verification server-side from the callback before granting access.
Error codes:
SESSION_EXPIRED (401) — the session token is invalid or expiredNOT_FOUND (404) — the session no longer existsRESULT_NOT_FOUND (404) — the identity of this session does not exist in the customer store yetRESULT_SOURCE_NOT_CONFIGURED (503) — the result source is not configured on this deploymentRESULT_SOURCE_ERROR (502) — the result source returned an unexpected error| x-session-token required | string JWT session token obtained from POST /session |
{- "identity_id": "string",
- "customer_id": "string",
- "decision": "string",
- "state": "string",
- "status": "string",
- "workflow_name": "string",
- "name": "string",
- "given_name": "string",
- "surname": "string",
- "date_of_birth": "2019-08-24",
- "date_of_birth_raw": "string",
- "date_of_expiry": "2019-08-24",
- "document_number": "string",
- "issuing_country": "string",
- "personal_number": "string",
- "place_of_birth": "string",
- "chip_data": null,
- "images": {
- "document_front": "string",
- "document_back": "string",
- "document_portrait": "string",
- "document_chip_portrait": "string",
- "selfie": "string",
- "selfie_crop": "string",
- "selfie_raw": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Streams one captured image of the Digital Identity of this session, addressed by slot name. The identity id comes from the session itself, so a client can never read the images of another run.
Supports If-None-Match: pass back the ETag from a previous response to receive 304 Not Modified instead of the bytes.
Error codes:
SESSION_EXPIRED (401) — the session token is invalid or expiredRESULT_NOT_FOUND (404) — no image is stored in that slot for this runRESULT_SOURCE_ERROR (502) — the result source returned an unexpected error| slot required | string Enum: "document_front" "document_back" "document_portrait" "document_chip_portrait" "selfie" "selfie_crop" "selfie_raw" Image slot name — one of the property names of the |
| x-session-token required | string JWT session token obtained from POST /session |
| If-None-Match | string ETag of a previously fetched copy of this image. |
{- "error": {
- "code": "string",
- "details": { },
- "message": "string",
- "requestId": "string",
- "retryable": true
}
}