Skip to main content
GET
{base_url}
/
otk-service
/
v2
/
journey-details
/
:journeyToken
Journey Details
curl --request GET \
  --url https://api.example.com/{base_url}/otk-service/v2/journey-details/:journeyToken \
  --header 'accept: <accept>' \
  --header 'x-transaction-key: <x-transaction-key>'
{
  "result": {
    "success": true,
    "message": "Journey retrieved successfully",
    "data": {
        "journeyToken": "550e8400-e29b-41d4-a716-446655440000",
        "journeyType": "ONBOARDING",
        "currentStatus": "COMPLETED",
        "createJourneyConfig": {
            "consent": true,
            "skipSuccessPage": false,
            "documentsAllowed": ["emirates_id", "passport"],
            "documents": [
                { "type": "emirates_id", "captureMethod": "scan" }
            ],
            "nonVisitorOnboarding": false,
            "nfcVerification": false,
            "gestureQueue": ["blink"],
            "enhancedLiveness": false
        },
        "step": {
            "INIT": [{ "startTime": 1744916428786, "endTime": 1744916428786 }],
            "CONSENT": [{ "startTime": 1744916429521, "endTime": 1744916432080 }],
            "DOC_SELECTION": [{ "startTime": 1744916432500, "endTime": 1744916434000 }],
            "DOC_FRONT": [{ "startTime": 1744916434226, "endTime": 1744916438231 }],
            "DOC_CHECK": [{ "startTime": 1744916438500, "endTime": 1744916442000 }],
            "FACE_CAPTURE": [{ "startTime": 1744916454709, "endTime": 1744916458241 }],
            "COMPLETE": [{ "startTime": 1744916466505, "endTime": 1744916466508 }]
        },
        "capturedData": {
            "consent": true,
            "idType": "emirates_id",
            "emiratesIdNumber": "784199012345671",
            "gccIdNumber": null,
            "gccNationality": null,
            "passportNumber": null,
            "passportNationality": null,
            "passportType": null,
            "frontDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "backDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "selfie": "data:image/jpeg;base64,/9j/4AAQ...",
            "nfc": null
        },
        "documentExtraction": {
            "success": true,
            "name": "JOHN DOE",
            "idNumber": "784199012345671",
            "documentNumber": "I1234567",
            "nationality": "IND",
            "dob": "1990-01-15",
            "passportType": null,
            "expiryDate": "2030-03-09",
            "issueDate": "2020-03-10",
            "croppedFrontDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "croppedBackDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "attempts": 2
        },
        "selfieAnalysis": {
            "passiveLiveness": {
                "success": true,
                "livenessConfirmed": true
            },
            "faceMatch": {
                "success": true,
                "matched": true,
                "message": "Face match successful"
            },
            "attempts": 1
        },
        "verificationLevel": {
            "code": "UAEKYC-VL-PF1",
            "message": "Photo and Face Verification Level 1"
        },
        "createdAt": 1713296400000,
        "updatedAt": 1713296442000,
        "completedAt": 1713296442000,
        "startedAt": 1713296401000,
    },
    "meta": {
        "api": "/otk-service/v2/journey-details/:journeyToken",
        "timestamp": 1713296500000
    },
    "errors": [],
    "warnings": []
  },
  "signature": ""
}
Journey data is available for 24 hours after creation. Retrieve and store any data you need within this window.

Authentication

x-transaction-key
string
required
Your API key. Get your key →
accept
string
required
Must be application/json

Path Parameters

journeyToken
string
required
UUID v4 of the journey from the Create Journey API (36 characters).

Code Examples

curl "{base_url}/otk-service/v2/journey-details/{journeyToken}" \
  -H "accept: application/json" \
  -H "x-transaction-key: your-api-key"

Response Fields

Journey Status

FieldTypeDescriptionData Availability
result.data.journeyTokenstringUnique identifier for this journey (UUID v4, 36 characters).Always present
result.data.journeyTypestringType of journey: ONBOARDING, REKYC, AUTHORISE, or ONE_TO_MANY.Always present
result.data.currentStatusstringCurrent journey status. Use this to determine your next action (see table below).Always present
result.data.createdAtnumberJourney creation timestamp (epoch milliseconds).Always present
result.data.startedAtnumberJourney start timestamp (epoch milliseconds).Optional — present after journey starts
result.data.completedAtnumberJourney completion timestamp (epoch milliseconds).Optional — present after journey completes
result.data.updatedAtnumberLast update timestamp (epoch milliseconds).Always present
result.meta.apistringThe API endpoint that was called.Always present
result.meta.timestampnumberServer timestamp (epoch milliseconds).Always present
result.errorsobject[]Filtered errors (type JOURNEY or AI only). Empty array when no errors.Always present
result.warningsobject[]Filtered warnings (type JOURNEY or AI only). Empty array when no warnings.Always present
signaturestringCryptographic signature for response verification.Always present
Journey Status Values:
StatusDescriptionAction
NOT STARTEDToken created, user hasn’t begunWait for user
IN PROGRESSUser is in the verification flowPoll again after a short delay
COMPLETEDJourney finished successfullyFetch Customer Details
REJECTEDVerification failedCheck errors array in Journey Details and Customer Details APIs
ABANDONEDUser did not complete the journey and the token expiredCreate a new journey
ADJUDICATEDUser has been verified using manual review. This is a final status — no further status change will occur.Fetch Customer Details
BLOCKEDBlocked by policy rulesCheck errors for details
EXPIREDJourney token was created but the SDK was never invoked and the token expiredCreate a new journey

Journey Configuration (result.data.createJourneyConfig)

FieldTypeDescriptionData Availability
result.data.createJourneyConfig.consentbooleanWhether user consent is required.Optional
result.data.createJourneyConfig.skipConsentPagebooleanWhether consent page is skipped.Optional
result.data.createJourneyConfig.skipSuccessPagebooleanWhether the success page was skipped.Always present
result.data.createJourneyConfig.skipResultPagebooleanWhether the result page was skipped.Always present
result.data.createJourneyConfig.skipFailurePagebooleanWhether the failure page was skipped.Always present
result.data.createJourneyConfig.gestureQueuestring[]Active liveness gestures requested (e.g., ["blink"]). Empty array if no gesture was selected.Always present
result.data.createJourneyConfig.documentsAllowedstring[]Document types permitted (e.g., ["emirates_id", "passport"]).Always present
result.data.createJourneyConfig.documentsobject[]Document configs with type and captureMethod.Always present
result.data.createJourneyConfig.emiratesIdNumberstringEmirates ID number, if provided during journey creation (15 digits starting with 784).Conditional — only if provided
result.data.createJourneyConfig.passportDetailsobjectPassport details, if provided during creation.Conditional — only if provided
result.data.createJourneyConfig.gccDetailsobjectGCC details, if provided during creation.Conditional — only if provided
result.data.createJourneyConfig.uaeKycIdstringUAE KYC ID, if provided during creation.Conditional — only if provided
result.data.createJourneyConfig.uidNumberintegerUID number, if provided during creation.Conditional — only if provided
result.data.createJourneyConfig.nonVisitorOnboardingbooleanWhether non-visitor onboarding mode was enabled.Always present
result.data.createJourneyConfig.nfcVerificationbooleanWhether NFC verification was enabled.Always present
result.data.createJourneyConfig.enhancedLivenessbooleanEnhanced liveness flag.Always present

Step Timestamps (result.data.step)

Timing data for each step of the verification flow. The steps present depend on the current journey status — only steps that have been reached will appear. All steps should be treated as optional.
StepDescriptionData Availability
INITJourney initialization.Optional — depends on journey status
CONSENTUser consent screen.Optional — depends on journey status
DOC_SELECTIONDocument type selection.Optional — depends on journey status
DOC_FRONTFront document capture.Optional — depends on journey status
DOC_BACKBack document capture.Optional — depends on journey status
DOC_CHECKDocument validation & AI processing.Optional — depends on journey status
FACE_CAPTURESelfie / face capture.Optional — depends on journey status
NFCNFC chip reading.Optional — depends on journey status
COMPLETEJourney completion.Optional — depends on journey status
REJECTJourney rejection.Optional — depends on journey status
Each step entry is an array of attempt objects in the following format:
[{ "startTime": 1744916428786, "endTime": 1744916428786 }]
Both startTime and endTime are Unix timestamps in milliseconds.

Captured Data (result.data.capturedData)

This object is optional — it can be an empty object {} or omitted entirely depending on the journey status. Fields with null values indicate the corresponding step has not been reached yet. Additional fields appear depending on the document capture path.
FieldTypeDescriptionData Availability
result.data.capturedData.frontDocstring (Base64) | nullJPEG. Base64-encoded front side of the captured document.Optional - present if front side has been successfully captured
result.data.capturedData.backDocstring (Base64) | nullJPEG. Base64-encoded back side of the captured document.Optional - present if back side has been successfully captured
result.data.capturedData.selfiestring (Base64) | nullJPEG. Base64-encoded selfie image.Optional - present if selfie has been successfully captured
result.data.capturedData.nfcobject | nullLatest NFC attempt data. null if NFC step not performed.Optional
result.data.capturedData.consentbooleanWhether the user gave consent.Optional
result.data.capturedData.idTypestringDocument type selected: emirates_id, passport, or gcc_id.Optional
result.data.capturedData.emiratesIdNumberstringEmirates ID number.Optional — Customer inputs Emirates ID
result.data.capturedData.gccIdNumberstringGCC ID number.Optional — Customer inputs GCC ID Details
result.data.capturedData.gccNationalitystringGCC nationality.Optional — Customer inputs GCC ID Details
result.data.capturedData.passportNumberstringPassport number.Optional — Customer inputs Passport Details
result.data.capturedData.passportNationalitystringPassport nationality.Optional — Customer inputs Passport Details
result.data.capturedData.passportTypestringPassport type.Optional — Customer inputs Passport Details

Document Extraction (result.data.documentExtraction)

This object is optional — it can be an empty object {} or omitted entirely.
FieldTypeDescriptionData Availability
result.data.documentExtraction.croppedFrontDocstring (Base64) | nullJPEG. Base64-encoded cropped front document image.Optional
result.data.documentExtraction.croppedBackDocstring (Base64) | nullJPEG. Base64-encoded cropped back document image.Optional
result.data.documentExtraction.successbooleanWhether extraction was successful.Always Present after extraction
result.data.documentExtraction.namestringFull name extracted from the document (up to 200 characters).Optional
result.data.documentExtraction.idNumberstringID number extracted from the document (up to 20 characters).Present after successful extraction
result.data.documentExtraction.documentNumberstringExtracted document number.Optional
result.data.documentExtraction.nationalitystringNationality code (ISO 3166-1 alpha-3, 3 characters).Optional
result.data.documentExtraction.dobstringDate of birth (YYYY-MM-DD, 10 characters).Optional
result.data.documentExtraction.expiryDatestringDocument expiry date (YYYY-MM-DD).Optional
result.data.documentExtraction.issueDatestringDocument issue date (YYYY-MM-DD).Optional
result.data.documentExtraction.passportTypestring | nullPassport type code (e.g., P for ordinary). null for non-passport documents.Optional
result.data.documentExtraction.attemptsnumberNumber of document capture attempts.Always Present after extraction

Selfie Analysis (result.data.selfieAnalysis)

This object is optional — it can be an empty object {} or omitted entirely. Fields populate as the journey progresses.
FieldTypeDescriptionData Availability
result.data.selfieAnalysis.passiveLivenessobjectPassive liveness check result.Optional - present after selfie capture
result.data.selfieAnalysis.passiveLiveness.successbooleanWhether passive liveness check completed.Optional — present after selfie capture
result.data.selfieAnalysis.passiveLiveness.livenessConfirmedbooleanWhether the face was confirmed as a live person (not a photo/screen).Optional — present after selfie capture
result.data.selfieAnalysis.faceMatch.successbooleanWhether face matching completed.Optional — COMPLETED or REJECTED only
result.data.selfieAnalysis.faceMatch.matchedbooleanWhether the selfie matched the document photo.Optional — COMPLETED or REJECTED only
result.data.selfieAnalysis.faceMatch.messagestringAdditional message (empty if successful).Optional — COMPLETED or REJECTED only
result.data.selfieAnalysis.attemptsintegerNumber of selfie capture attempts.Optional — present after selfie capture

Verification Level (result.data.verificationLevel)

This object is always present in the response. It is an empty object {} until the journey reaches COMPLETED status, at which point code and message are populated.
FieldTypeDescriptionData Availability
result.data.verificationLevel.codestringVerification level code (e.g., UAEKYC-VL-PF1, up to 20 characters). See Verification Level Codes.Optional — COMPLETED only
result.data.verificationLevel.messagestringHuman-readable description of the verification result (up to 200 characters).Optional — COMPLETED only

Next Steps

1
Check currentStatus
2
Use the status to decide your next action. If COMPLETED, proceed to fetch customer details and the certificate.
3
Save the verificationLevel.code
4
Store the verification level code in your system for compliance audits. See Verification Level Codes.
5
Persist data within 24 hours
6
Journey data expires after 24 hours. Extract and store any fields you need into your own database.
7
Verify the response signature
8
Use the signature field to verify response integrity before processing.
{
  "result": {
    "success": true,
    "message": "Journey retrieved successfully",
    "data": {
        "journeyToken": "550e8400-e29b-41d4-a716-446655440000",
        "journeyType": "ONBOARDING",
        "currentStatus": "COMPLETED",
        "createJourneyConfig": {
            "consent": true,
            "skipSuccessPage": false,
            "documentsAllowed": ["emirates_id", "passport"],
            "documents": [
                { "type": "emirates_id", "captureMethod": "scan" }
            ],
            "nonVisitorOnboarding": false,
            "nfcVerification": false,
            "gestureQueue": ["blink"],
            "enhancedLiveness": false
        },
        "step": {
            "INIT": [{ "startTime": 1744916428786, "endTime": 1744916428786 }],
            "CONSENT": [{ "startTime": 1744916429521, "endTime": 1744916432080 }],
            "DOC_SELECTION": [{ "startTime": 1744916432500, "endTime": 1744916434000 }],
            "DOC_FRONT": [{ "startTime": 1744916434226, "endTime": 1744916438231 }],
            "DOC_CHECK": [{ "startTime": 1744916438500, "endTime": 1744916442000 }],
            "FACE_CAPTURE": [{ "startTime": 1744916454709, "endTime": 1744916458241 }],
            "COMPLETE": [{ "startTime": 1744916466505, "endTime": 1744916466508 }]
        },
        "capturedData": {
            "consent": true,
            "idType": "emirates_id",
            "emiratesIdNumber": "784199012345671",
            "gccIdNumber": null,
            "gccNationality": null,
            "passportNumber": null,
            "passportNationality": null,
            "passportType": null,
            "frontDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "backDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "selfie": "data:image/jpeg;base64,/9j/4AAQ...",
            "nfc": null
        },
        "documentExtraction": {
            "success": true,
            "name": "JOHN DOE",
            "idNumber": "784199012345671",
            "documentNumber": "I1234567",
            "nationality": "IND",
            "dob": "1990-01-15",
            "passportType": null,
            "expiryDate": "2030-03-09",
            "issueDate": "2020-03-10",
            "croppedFrontDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "croppedBackDoc": "data:image/jpeg;base64,/9j/4AAQ...",
            "attempts": 2
        },
        "selfieAnalysis": {
            "passiveLiveness": {
                "success": true,
                "livenessConfirmed": true
            },
            "faceMatch": {
                "success": true,
                "matched": true,
                "message": "Face match successful"
            },
            "attempts": 1
        },
        "verificationLevel": {
            "code": "UAEKYC-VL-PF1",
            "message": "Photo and Face Verification Level 1"
        },
        "createdAt": 1713296400000,
        "updatedAt": 1713296442000,
        "completedAt": 1713296442000,
        "startedAt": 1713296401000,
    },
    "meta": {
        "api": "/otk-service/v2/journey-details/:journeyToken",
        "timestamp": 1713296500000
    },
    "errors": [],
    "warnings": []
  },
  "signature": ""
}