Get Journey API
Get a Journey
Retrieves the current status and captured results of a journey. Use this to poll for status, or to fetch full results after receiving a Callbacks.
curl --location 'https://onetouch-preproduction.signzy.app/otk-service/v1/get-journey/<journeyId>' \
--header 'x-api-key: <api_key>' \
--header 'Content-Type: application/json'GET <endpoint>/otk-service/v1/get-journey/<journeyId>Headers: x-api-key: <your-api-key>
Example response:
{
"success": true,
"message": "Journey retrieved successfully.",
"data": {
"journey_id": "7QZY374O30",
"flow_id": "17d7d5c6-0f92-4cd5-93ce-2d7461ce4440",
"name": "John Doe",
"current_status": "COMPLETED",
"step": "COMPLETE",
"created_at": "2026-07-29T10:30:00Z",
"updated_at": "2026-07-29T10:42:00Z",
"is_pii_deleted": false,
"payload": {
"data": {
"createdAt": 1769678200000,
"completedAt": 1769678920000,
"currentStatus": "COMPLETED",
"step": "COMPLETE",
"deletionTimeLimit": 129600,
"userInfo": {
"name": { "firstName": "John", "lastName": "Doe" },
"emailAddress": "[email protected]",
"phoneNumber": "+919999999999"
},
"documentIntelligence": {
"extractedFields": { "names": "JOHN DOE", "...": "further OCR/document verification fields" }
},
"digilockerDetails": {
"details": { "userDetails": { "name": "JOHN DOE" } }
}
}
},
"status": { "lookup_id": "e57d26ff-d91d-410e-b8b6-c7160019fc24", "name": "In Progress" },
"assigned_to": { "user_id": "b4b2e4e7-45ce-4e72-8716-879ce632b093", "name": "Jane Reviewer" },
"risk_level": { "lookup_id": "99bb8192-2b83-4b8e-85de-6636a575e4a7", "name": "Medium" },
"category": { "lookup_id": "fbd869e8-f000-4296-ad0c-aea62dfbde14", "name": "Verification" },
"change_history": [
{
"change_id": "8befaa0b-7200-4767-8a9c-7f645e9b4202",
"changed_by": { "user_id": "b4b2e4e7-45ce-4e72-8716-879ce632b093", "name": "Jane Reviewer" },
"changed_at": "2026-07-29T11:00:00Z",
"status": { "lookup_id": "e57d26ff-d91d-410e-b8b6-c7160019fc24", "name": "In Progress" },
"priority": "High",
"comments": "Escalated for manual review"
}
]
}
}Parameter | Type | Description | Expected values |
|---|---|---|---|
journey_id | string | Unique ID for this journey. | e.g. 7QZY374O30 |
flow_id | string (UUID) | The Flow this journey was created from. | — |
name | string | The user's display name, if it could be determined from what they submitted. Empty/absent if nothing was captured yet or if is_pii_deleted is true. | free text |
current_status | string | The automated verification state — this is the one to check to know if the journey is finished. | NOT STARTED, IN PROGRESS, COMPLETED, TERMINATED, ABANDONED |
step | string | Which step of the flow the user is currently on (or finished at). | see step values below |
created_at | string (ISO 8601) | When the journey/link was created. | — |
updated_at | string (ISO 8601) | When the journey record last changed. | — |
started_at | string (ISO 8601) or null | When the user opened the link and began the flow. null if they haven't started yet. | — |
completed_at | string (ISO 8601) or null | When the journey reached a terminal status. null while still in progress. | — |
is_pii_deleted | boolean | true once this user's personal data has been purged (per your data-retention setting or a manual deletion) — at that point name and most of payload are cleared too. | true / false |
payload.data | object | The full raw data captured during the journey — user-submitted info, document/selfie verification results. Its exact shape depends on what your Flow captures; see below. | — |
status | object or absent | A case-management status your team assigned this journey to during manual review — distinct from current_status. Only present if someone on your team has reviewed/annotated it. | { "lookup_id": string, "name": string } |
assigned_to | object or absent | The teammate currently assigned to review this journey. | { "user_id": string, "name": string } |
risk_level | object or absent | Risk classification set during manual review. | { "lookup_id": string, "name": string } |
category | object or absent | Case category set during manual review. | { "lookup_id": string, "name": string } |
change_history | array or absent | Audit trail of manual review actions taken on this journey (status/priority/risk/category changes, comments, attachments). Empty if it's never been reviewed. | see below |
incident_id | string or absent | Present once this journey has been promoted to a case for investigation. | — |
payload.data — captured journey fields (selected)
Only returned on the single-journey response, not on the list/search response. Fields present depend entirely on what your Flow is configured to capture — treat this as "here's what you might see," not a fixed schema.
Field | Type | Description |
|---|---|---|
payload.data.createdAt | number (epoch ms) | Creation time, as milliseconds — a duplicate of the top-level created_at in a different format. |
payload.data.completedAt | number (epoch ms) | Completion time, same caveat. |
payload.data.currentStatus / .step | string | Duplicates of the top-level fields. |
payload.data.deletionTimeLimit | number | Minutes until this journey's personal data is automatically deleted. |
payload.data.userInfo | object | Whatever user details were captured or pre-filled: name.firstName/.lastName, emailAddress, phoneNumber, and any other fields your Flow collects. |
payload.data.documentIntelligence.extractedFields | object | Fields extracted from the submitted ID document (OCR + verification). Shape depends on document type/country. |
payload.data.digilockerDetails.details.userDetails.name | string | User's name as verified via DigiLocker, when that verification path was used (India flows). |
change_history[] fields
Field | Type | Description |
|---|---|---|
change_id | string | Unique ID for this history entry. |
changed_by | object | Who made the change — { "user_id": string, "name": string }. |
changed_at | string (ISO 8601) | When the change was made. |
status, risk_level, category | object | New value set by this change, if that field was changed — same {lookup_id, name} shape as above. |
priority | string | New priority set by this change, if changed. Priority only ever appears here — it isn't a top-level journey field. |
assigned_to | object | New assignee, if reassigned by this change. |
comments | string | Reviewer's note, if one was added. |
attachment | string (URL) | Link to an uploaded file, if one was attached. |
Journey status values (current_status)
Value | Meaning |
|---|---|
NOT STARTED | Link generated, user hasn't opened it yet |
IN PROGRESS | User is actively going through the flow |
COMPLETED | User finished all steps successfully |
TERMINATED | Verification was stopped (e.g. retry limit exceeded) |
ABANDONED | User left partway through and didn't return or the session is timed out based on the given session expiry field |
COMPLETED, TERMINATED, and ABANDONED are terminal — the journey won't change state again after reaching one of them, and that's when your callback (if configured) fires.
Journey step values (step)
INIT → CONSENT → COUNTRY_SELECTION → DOC_SELECTION → DOC_FRONT → DOC_BACK →DOC_CHECK → (DOC_REJECT if the document fails checks) → LIVENESS_CONSENT → FACE_CAPTURE→ COMPLETE. Steps not enabled on your Flow are skipped. RETRIES_EXCEEDED,SESSION_TIMED_OUT, and JOURNEY_EXPIRED indicate the journey ended early for those reasons.
Full API Response
{
"flow": {
"flowId": "<flow ID>",
"version": 1
},
"processingConfig": {
"callbackUrl": "https://callback-url",
"authKeyForCallback": "<auth-key>",
"redirectTime": 10,
"language":"en",
"successRedirectUrl": "",
"failureRedirectUrl": "",
"journeyLinkValidity": 3600,
"journeySessionExpiry":600,
},
"capturedData": {
"images": {
"frontDoc": "https://persist.signzy.tech/sample1.jpeg",
"backDoc": "https://persist.signzy.tech/sample2.jpeg",
"selfie": "https://persist.signzy.tech/sample3.jpeg"
},
"consent": true, // consent on 1st instruction page
"livenessConsent": false, // consent on selfie analysis instruction page
"country": "US", // country selected by user
"idType": "Driving License" // document selected by user
},
"matchPercentage": {
"dateOfBirthMatch": "NA",
"addressMatch": "NA",
"fullNameMatch": "NA"
},
"documentIntelligence": {
"completeStatus": {
"detailsOptical": {
"docType": "True",
"expiry": "True",
"imageQA": "False",
"mrz": "None",
"overallStatus": "True",
"pagesCount": 2,
"security": "True",
"text": "True",
"vds": "None"
},
"optical": "True",
"overallStatus": "True", // Overall result of document intelligence
"message": "Document validated successfully",// depends on the overall staus and flag triggered
"severity": "NA", // Flag triggered severity
"portrait": "None",
"rfid": "None"
},
"imageQuality": {
"result": false,
"frontIdCheck": {
"ImageGlares": false,
"ImageFocus": true,
"ImageResolution": false,
"ImageColorness": "NA",
"Perspective": true,
"Bounds": true,
"Portrait": true,
"Brightness": "NA"
},
"backIdCheck": {
"ImageGlares": false,
"ImageFocus": true,
"ImageResolution": false,
"ImageColorness": "NA",
"Perspective": true,
"Bounds": true,
"Portrait": true,
"Brightness": "NA"
}
},
"extractedFieldErrors": [], // Contains details about OCR issues and any mismatches between data extracted from OCR and data from the barcode/MRZ
"authenticityCheck": {
"frontAuthenticityCheckList": {
"photoEmbedType": [
{
"ElementResult": true,
"ElementDiagnose": "PASS",
"ElementType": "FACE_PRESENCE",
"Image": null,
"EtalonImage": null
}
],
"IMAGE_PATTERN": [
{
"ElementResult": true,
"ElementDiagnose": "PASS",
"ElementType": "BLANK",
"Image": "https://persist.signzy.tech/api/files/979758139/download/74e88976d2f34f31af205db4a14ec8d5f65cf348df5147a18e2a4bfa2ef27427.png",
"EtalonImage": "https://persist.signzy.tech/api/files/979758140/download/1a52df165f6945a78e53f15a38d7d43b6175b8acf95e44429bc574fab89c2009.png"
}
],
"liveness": [
{
"ElementResult": true,
"ElementDiagnose": "PASS",
"ElementType": "LIVENESS_ELECTRONIC_DEVICE",
"Image": null,
"EtalonImage": null
}
]
},
"backAuthenticityCheckList": {
"IMAGE_PATTERN": [
{
"ElementResult": true,
"ElementDiagnose": "PASS",
"ElementType": "BLANK",
"Image": "https://persist.signzy.tech/api/files/979758145/download/01ee3f2e4b47441793dbeab0fe855f3c2895a920592140e98e61dae206032380.png",
"EtalonImage": "https://persist.signzy.tech/api/files/979758146/download/95c43da026204281a5e799d97873026a05059bedc05043238999d3670a744ab5.png"
},
{
"ElementResult": true,
"ElementDiagnose": "PASS",
"ElementType": "CONTACT_CHIP_CLASSIFICATION",
"Image": "https://persist.signzy.tech/api/files/979758144/download/426a5e427b7c4abea5d6f7ba7386272eb5b3396711e6448bb4b1fc9100f4ff96.png",
"EtalonImage": "https://persist.signzy.tech/api/files/979758147/download/1059678e44c9439b9c45bec2c95f54fdc68370993da64129a1aa62ee8d8e369e.png"
}
]
}
},
"graphicFields": {
"fieldList": [
[
{
"fieldType": "PORTRAIT",
"value": "https://persist.signzy.tech/sample6.png",
"docSide": "FRONT",
"source": "VISUAL",
"containerType": "VISUAL_GRAPHICS"
}
],
[
{
"fieldType": "SIGNATURE",
"value": "https://persist.signzy.tech/sample7.png",
"docSide": "FRONT",
"source": "VISUAL",
"containerType": "VISUAL_GRAPHICS"
}
],
[
{
"fieldType": "GHOST_PORTRAIT",
"value": "https://persist.signzy.tech/sample8.png",
"docSide": "FRONT",
"source": "VISUAL",
"containerType": "VISUAL_GRAPHICS"
}
],
[
{
"fieldType": "SIGNATURE",
"value": "https://persist.signzy.tech/api/files/979758129/download/6350a71b93624d9ea44bd20e931ecae11b3e354d411d43c8b70715ca0b54a97c.png",
"docSide": "FRONT",
"source": "VISUAL",
"containerType": "VISUAL_GRAPHICS"
}
],
[
{
"fieldType": "GHOST_PORTRAIT",
"value": "https://persist.signzy.tech/api/files/979758128/download/563086621ab1420ba0d9265facd2ad8661a0c75f2eaa49c3aabdeb558a64c3da.png",
"docSide": "FRONT",
"source": "VISUAL",
"containerType": "VISUAL_GRAPHICS"
}
],
[
{
"fieldType": "CROPPED_DOCUMENT",
"value": "https://persist.signzy.tech/api/files/979758135/download/baa0ae2446c046f197e4c868700ced3a41ef5f21ec744d87a12b06ee40631fb1.png",
"docSide": "FRONT",
"source": "VISUAL",
"containerType": "DOCUMENT_IMAGE"
},
{
"fieldType": "CROPPED_DOCUMENT",
"value": "https://persist.signzy.tech/api/files/979758136/download/6961e7acd86741d7876302647f44f9b4b456d18f0cd0434fbb50ed3e208611b5.png",
"docSide": "BACK",
"source": "VISUAL",
"containerType": "DOCUMENT_IMAGE"
}
]
]
]
},
"predictedIdTypeFront": {
"DocumentName": "United Arab Emirates - Resident Id Card (2021) (Golden Card) #2",
"FDSIDList": {
"ICAOCode": "ARE",
"dCountryName": "United Arab Emirates",
"dDescription": "Resident Identity Card",
"dFormat": 0,
"dMRZ": false,
"dType": 224,
"dYear": "2021",
"isDeprecated": false
},
"P": 0.9670456647872925
},
"predictedIdTypeBack": {
"DocumentName": "United Arab Emirates - Resident Id Card (2021) (Golden Card) Side B",
"FDSIDList": {
"ICAOCode": "ARE",
"dCountryName": "United Arab Emirates",
"dDescription": "Resident Identity Card",
"dFormat": 0,
"dMRZ": true,
"dType": 224,
"dYear": "2021",
"isDeprecated": false
},
"P": 0.9594634771347045
},
"idExpired": "False",
"extractedFields": {
"RemainderTerm": "29",
"DL Endorsed": "NONE",
"Document Class Code": "IL",
"RemainderTerm": "98",
"Issuing State Name": "United Arab Emirates",
"Age at Issue": "24",
"Age": "26",
"names": "John Doe",
"Surname And Given Names": "اجو",
"Final Checkdigit": "",
"Nationality Code": "IND",
"Date of Expiry Checkdigit": "1",
"Date of Expiry": "dd/mm/yyyy",
"Date of Birth Checkdigit": "7",
"MRZ Strings": "xxxxxxxxxxx",
"Issuing State Code": "ARE",
"Document Number": "123456789",
"Document Number Checkdigit": "0",
"Sex": "ذكر",
"Date of Birth": "dd/mm/yyyy",
"Optional Data CheckDigit": "3",
"Identity Card Number": "xxxxxxx",
"Optional Data": "xxxxx",
"Nationality": "India",
"Years Since Issue": "1",
"Date of Issue": "dd/mm/yyyy",
"Place of Issue": "دبي",
"Profession": "بدون عمل",
"firstName": "John Doe",
"Given Names": "John Doe",
"lastName": "Doe",
"Surname": "Doe",
"MRZ Type": "ID-1"
},
"attempts": 2 // attempt number of document analysis
},
"selfieAnalysis": {
"passiveLiveliness": {
"status": "200",
"liveness": true,
"score": 0.99
},
"faceMatch": {
"status": "200",
"verified": true,
"message": "Verification completed with positive result",
"matchPercentage": "99.00%"
},
"additionalFaceChecks": {
"maskDetection": {
"status": "200",
"result": {
"found": false,
"confidence": 0
}
},
"faceCoverDetection": {
"status": "200",
"result": {
"isFaceCovered": false,
"faceGears": []
}
}
},
"attempts": 3
},
"_id": "<unique db id>",
"clientId": "<client Id>",
"userId": "<user ID>",
"journeyId": "<journey ID >",
"currentStatus": "COMPLETED",
"step": "COMPLETE",
"message": "Journey Completed",
"callbackSent": true,
"mobileStatus": false,
"userInfo": {
"phoneNumber": "",
"externalReferenceId": "",
"dateOfBirth": "",
"emailAddress": "",
"name": {
"firstName": "",
"lastName": ""
},
"address": {
"street": "",
"street2": "",
"city": "",
"region": "",
"postalCode": "",
"country": ""
},
"id": {
"idType": "",
"country": ""
}
},
//External API ( based on flow configuration)
"externalApiResponses": [
{
"API": "Resident_Id_Card_Verification",
"Input": {
"Emirates ID Number": "<eid number>",
"Date of Birth": "<dob>",
"Current Nationality": "india"
},
"Response": {
"emiratesIdNumber": <eid number>,
"dateOfBirth": "<dob>",
"currentNationality": "india",
"issueDate": "<date>",
"expiryDate": "<date>",
"eidCardNumber": "<number>",
"overallStatus": "True" // based on response
}
}
],
"ipAddresses": {
"<ip address>": {
"asn": "<asn>",
"isp": "<isp>",
"countryCode": "IND",
"region": "MAHARASHTRA",
"city": "MUMBAI",
"organization": "<organization>",
"latitude": "19.76",
"longitude": "72.87",
"isCrawler": "false",
"timezone": "IST, Asia/Kolkata",
"mobile": "false",
"host": "<host>",
"proxy": "false",
"vpn": "false",
"tor": "false",
"recentAbuse": "false",
"botStatus": "false",
"fraudScore": "0",
"address": "<address>
}
}
"createdAt": 1721541339746,
"startedAt": 1721541345038,
"completedAt": 1721541398034,
"_deleted": false,
"deletionTimeLimit": 1576800, // set based on automatic data deletion setting
"updatedAt": "2024-07-21T05:56:38.041Z",
"__v": 0
}
}
}