Skip to main content
POST
/
otk-service
/
create-journey-url
Create Journey
curl --request POST \
  --url https://uaekyc-proxy.uaekyc-docs.workers.dev/otk-service/create-journey-url \
  --header 'Content-Type: application/json' \
  --header 'x-transaction-key: <api-key>' \
  --data '
{
  "journeyType": "ONBOARDING",
  "documentsAllowed": [
    "passport"
  ],
  "gestures": [
    "blink"
  ],
  "consent": true,
  "skipSuccessPage": false,
  "skipResultPage": false,
  "nfcVerification": false,
  "nonVisitorOnboarding": false
}
'
{
    "result": {
        "journeyToken": "550e8400-e29b-41d4-a716-446655440000",
        "expiresIn": "600",
        "expiresAt": 1713300000000
    },
    "success": true,
    "signature": ""
}
Journey Tokens expire in 10 minutes. Initialize the SDK immediately after creation.

Journey Types

The journeyType field determines the verification flow. Choose based on your use case:
First-time identity verification for new customers who have not been previously verified on the platform.Use case: A bank onboarding a new customer — the user presents their Emirates ID, passport, or GCC ID for the first time, completes liveness detection, and their identity is registered in the system.
  • No prior user identifier is needed
  • All configured document types are available
  • Liveness gestures (blink or smile) can be required

Authentication

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

Request Body

journeyType
string
required
Type of verification journey: ONBOARDING, REKYC, AUTHORISE, or ONE_TO_MANY.
documentsAllowed
string[]
Document types the user can present: passport, emirates_id, gcc_id. When omitted, all types permitted for your org are used.
Only include types subscribed for your organization — unsubscribed types will cause the request to fail.
gestures
string[]
Active liveness gestures. Maximum 1 per journey: blink or smile. Omitting this skips active liveness entirely.
Show a consent page before the journey begins.
skipSuccessPage
boolean
default:"false"
Skip the success page when verification completes.
skipResultPage
boolean
default:"false"
Skip the result page at the end of the verification flow.
nfcVerification
boolean
default:"false"
Enables NFC-based verification for the journey. Currently supported for passport documents only.
nonVisitorOnboarding
boolean
default:"false"
Special onboarding flag. Only applies to clients with this feature enabled. Read more →

User Identifiers (REKYC & AUTHORISE)

For REKYC and AUTHORISE journeys, provide one of the following to identify the user. For REKYC, this is optional (skips document capture). For AUTHORISE, it is required.
emiratesIdNumber
string
Emirates ID number. Format: 784XXXXXXXXXXXX (15 digits starting with 784). Hyphens are auto-stripped.
uaeKycId
string
Unique UAE KYC identifier returned by the Customer Details API and Get Certificate API.
uidNumber
integer
UDB person number (also known as Unified Database number). A unique identifier assigned to individuals in the UAE’s Unified Database system.
passportDetails
object
Passport-based identification.
gccDetails
object
GCC ID-based identification.

Code Examples

curl -X POST "{base_url}/otk-service/create-journey-url" \
-H "Content-Type: application/json" \
-H "x-transaction-key: your-api-key" \
-d '{
  "journeyType": "ONBOARDING",
  "gestures": ["blink"],
  "consent": true,
  "documentsAllowed": ["emirates_id", "passport", "gcc_id"],
  "skipSuccessPage": false,
  "skipResultPage": false,
  "nonVisitorOnboarding": false
}'

Response Fields

Success Response

FieldTypeDescriptionPresence
result.journeyTokenstringUnique token to initialize the SDK (UUID v4, 36 characters).Always present
result.expiresInstringToken validity in seconds. Default: 600 (10 minutes).Always present
result.expiresAtintegerAbsolute expiry timestamp (epoch milliseconds).Always present
signaturestringCryptographic signature for response verification.Always present
successbooleanOptional

Error Response

FieldTypeDescriptionPresence
codestringMachine-readable error code.Always present
typestringError category.Optional
messagestringHuman-readable error message.Always present
signaturestringCryptographic signature for response verification.Optional

Next Steps

1
Save the journeyToken in your backend
2
Store it on your server — you’ll need it for the Journey Details API, Customer Details API, and Get Certificate API.
3
Pass the token to the SDK immediately
4
The token expires in 10 minutes. Pass it to the Web, Android, or iOS SDK to start the verification flow. Generate a new token for each session.
5
Do not reuse journey tokens
6
Each journeyToken is single-use. Once a journey is started, completed, or expired, the token cannot be reused.
7
Verify the response signature
8
Use the signature field to verify response integrity before processing.
{
    "result": {
        "journeyToken": "550e8400-e29b-41d4-a716-446655440000",
        "expiresIn": "600",
        "expiresAt": 1713300000000
    },
    "success": true,
    "signature": ""
}

Authorizations

x-transaction-key
string
header
required

Body

application/json
journeyType
enum<string>
default:ONBOARDING
required

Set automatically to ONBOARDING for this journey type.

Available options:
ONBOARDING
documentsAllowed
enum<string>[]

Document types the user can present. When omitted, all types permitted for your org are used.

Available options:
passport,
emirates_id,
gcc_id
gestures
enum<string>[]

Active liveness gestures. Maximum 1 per journey. Omitting this skips active liveness entirely.

Maximum array length: 1
Available options:
blink,
smile

Show a consent page before the journey begins.

skipSuccessPage
boolean
default:false

Skip the success page when verification completes.

skipResultPage
boolean
default:false

Skip the result page at the end of the verification flow.

nfcVerification
boolean
default:false

Enables NFC-based verification for the journey. Currently supported for passport documents only.

nonVisitorOnboarding
boolean
default:false

Special onboarding flag. Only applies to clients with this feature enabled.

Response

Journey created successfully

result
object
signature
string

Cryptographic signature for response verification.

Example:

""