Get session results
Retrieve the status and results of a flow session
Retrieve detailed information about a specific session, including its current status, outcome, and session results. When a session reaches a terminal state, the response includes a results field that surfaces typed references to the output datablocks — giving you a complete, self-contained answer in a single API call.
Endpoint
GET /api/v1/{environment}/sessions/{sessionId}
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | The unique identifier of the session |
environment | String | Yes | Environment name |
Request
No request body is required for this endpoint.
Headers
| Header | Type | Required | Description |
|---|---|---|---|
Authorization | string | Yes | Bearer token for authentication |
Response
Response parameters are described in the table below. See Response examples for sample payloads.
| Parameter | Type | Description |
|---|---|---|
sessionId | string | The unique identifier of the session |
sessionStatus | string | Current status. One of CREATED, RUNNING, EXPIRED, ERROR, ABORTED, or COMPLETED |
flowId | string | Flow identifier |
flowVersion | number | Version of the flow executed |
environment | string | Environment name |
subjectId | string | The original subjectId value provided in metadata when creating the session |
outcome | string | Final session outcome (e.g., accepted, rejected, NO_OUTCOME) |
createdAt | string | ISO 8601 timestamp when session was created |
startedAt | string | ISO 8601 timestamp when processing started (null if not started) |
updatedAt | string | ISO 8601 timestamp of last update |
completedAt | string | ISO 8601 timestamp when session reached a terminal state (COMPLETED, ERROR, ABORTED, or EXPIRED) (optional) |
expiresAt | string | ISO 8601 timestamp when session expires (optional) |
redirectUrl | string | Redirect URL for session completion (optional) |
state | string | State parameter for CSRF protection in redirect (optional) |
lastStep | object | Information about the last executed step (optional, present whenever at least one step has been executed) |
lastStep.stepId | string | Unique identifier of the last step |
lastStep.stepType | string | Type of the last step (e.g., END, DOC_ID:v2, CHOICE) |
lastStep.stepDescription | string | Human-readable description of the step (as configured in the flow). Empty string if not set. |
lastStep.verdict | string | Last step verdict (e.g., completed, failed) |
results | object | References to the output datablocks produced by the workflow. An empty object {} when the session has not yet reached a terminal state (CREATED, RUNNING), or when terminal but no step produced output. Keys are datablock type names. |
results.<type> | object | A typed reference to a datablock. The key is the datablock type (e.g., documentVerification). |
results.<type>.type | string | Reference discriminator. Always "dataBlock". |
results.<type>.id | string | The dataBlockId of the referenced datablock. Fetch its content via GET /v1/{environment}/sessions/{sessionId}/datablocks. |
Example
curl https://api.eu.platform.idnow.io/api/v1/live/sessions/0197c55f-5af6-7e3d-af9b-f2359b104be8 \
-H "Authorization: Bearer YOUR_API_KEY"
Response examples
Session in progress (results: {})
{
"sessionId": "0197c55f-5af6-7e3d-af9b-f2359b134be8",
"sessionStatus": "RUNNING",
"flowId": "0197c55f-5af6-7e3d-af9b-f2359b154be8",
"flowVersion": 1,
"environment": "live",
"subjectId": "subj_8f3a2c91b47d4e6b",
"outcome": "NO_OUTCOME",
"createdAt": "2025-01-07T10:30:00.000Z",
"startedAt": "2025-01-07T10:30:00.000Z",
"updatedAt": "2025-01-07T10:30:05.000Z",
"lastStep": {
"stepId": "step_start_001",
"stepDescription": "Session initialization",
"verdict": "success"
},
"results": {}
}
Session completed (results populated)
{
"sessionId": "0197c55f-5af6-7e3d-af9b-f2359b134be8",
"sessionStatus": "COMPLETED",
"flowId": "0197c55f-5af6-7e3d-af9b-f2359b154be8",
"flowVersion": 1,
"environment": "live",
"subjectId": "subj_8f3a2c91b47d4e6b",
"outcome": "accepted",
"createdAt": "2025-01-07T10:30:00.000Z",
"startedAt": "2025-01-07T10:30:00.000Z",
"updatedAt": "2025-01-07T10:35:00.000Z",
"completedAt": "2025-01-07T10:35:00.000Z",
"lastStep": {
"stepId": "step_end_001",
"stepDescription": "Final step",
"verdict": "completed"
},
"results": {
"documentVerification": {
"type": "dataBlock",
"id": "0197c55f-5af6-7e3d-af9b-f2359b200be1"
},
"pepAndSanctionsResults": {
"type": "dataBlock",
"id": "0197c55f-5af6-7e3d-af9b-f2359b200be2"
},
"comparisonResults": {
"type": "dataBlock",
"id": "0197c55f-5af6-7e3d-af9b-f2359b200be3"
}
}
}
Notes
- Response implements data minimization by default for GDPR compliance
- The
lastStepobject is optional and provides context about the most recently executed step - The
resultsfield is always present in the response as an object. It is an empty object{}when the session has not yet reached a terminal state (CREATED,RUNNING). Once terminal (COMPLETED,ERROR,ABORTED, orEXPIRED), it contains a record of datablock references — or an empty object{}if no step produced output. resultscontains references, not inline content. Each value is a typed pointer{ "type": "dataBlock", "id": "..." }whereidmatches thedataBlockIdreturned by the/datablocksendpoint. Fetch full datablock content viaGET /v1/{environment}/sessions/{sessionId}/datablocks.- Data block access is separated to allow granular access control