Skip to main content
POST
/
otk-service
/
v2
/
create-journey
Create Journey V2
curl --request POST \
  --url https://uaekyc-proxy.uaekyc-docs.workers.dev/otk-service/v2/create-journey \
  --header 'Content-Type: application/json' \
  --header 'x-transaction-key: <api-key>' \
  --data '
{
  "journeyType": "ONBOARDING",
  "sdkConfig": {
    "skipConsentPage": false,
    "skipSuccessPage": false,
    "skipFailurePage": false,
    "gesture": "blink",
    "documents": [
      {
        "type": "emirates_id",
        "captureMethod": "scan"
      }
    ]
  },
  "verificationConfig": {
    "nonVisitorOnboarding": false,
    "nfcVerification": false
  }
}
'
{
  "success": true,
  "message": "Journey Token has been created successfully",
  "data": {
    "journeyToken": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "expiresAt": 1699209856789
  },
  "meta": {
    "serverTimestamp": 1699209856789,
    "journeyType": "ONBOARDING",
    "createdAt": 1699209856789
  },
  "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 identifier is needed — must be empty or omitted
  • 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

The V2 API groups related fields into logical sections: identifier, sdkConfig, and verificationConfig.
{
  "journeyType": "ONBOARDING", // ONBOARDING, REKYC, AUTHORISE, ONE_TO_MANY
  "identifier": {
    "uaeKycId": "13903"
  },
  "sdkConfig": {
    "skipConsentPage": false,
    "skipSuccessPage": false,
    "skipFailurePage": true,
    "gesture": "blink",
    "documents" : [
        {
          "type": "emirates_id",
          "captureMethod": "scan"
        },
        {
          "type": "gcc_id",
          "captureMethod": "manual_input"
        },
        {
          "type": "passport",
          "captureMethod": "all"
        }
    ]
  },
  "verificationConfig": {
    "nonVisitorOnboarding" : true,
    "nfcVerification" : true
  }
}
journeyType
string
required
Type of verification journey: ONBOARDING, REKYC, AUTHORISE, or ONE_TO_MANY.

identifier (Conditional)

The identifier object contains pre-filled user identification information.
Mutual Exclusivity Rule: Only one identifier can be provided at a time. Providing multiple identifiers will result in a validation error.
Journey TypeIdentifier Required?Validation Rule
ONBOARDINGNoMust be empty or omitted
ONE_TO_MANYNoMust be empty or omitted
REKYCOptionalIf provided, must have exactly one identifier
AUTHORISERequiredMust have exactly one identifier
identifier
object
Pre-filled user identification information.

sdkConfig (Optional)

Configuration for SDK UI/UX behavior and controls. All fields are optional. If not provided, SDK uses default behavior or organization level settings.
sdkConfig
object
SDK configuration object.

verificationConfig (Optional)

Configuration for verification strategy, document requirements, and verification level. Organization configuration may restrict available verification levels.
verificationConfig
object
Verification configuration object.

Code Examples

curl -X POST "{base_url}/otk-service/v2/create-journey" \
-H "Content-Type: application/json" \
-H "x-transaction-key: your-api-key" \
-d '{
  "journeyType": "ONBOARDING",
  "sdkConfig": {
    "skipConsentPage": false,
    "skipSuccessPage": false,
    "skipFailurePage": false,
    "gesture": "blink",
    "documents": [
      {
        "type": "emirates_id",
        "captureMethod": "scan"
      },
      {
        "type": "passport",
        "captureMethod": "all"
      }
    ]
  },
  "verificationConfig": {
    "nonVisitorOnboarding": false,
    "nfcVerification": false
  }
}'

Response Fields

Success Response

FieldTypeDescriptionPresence
successbooleanAlways true for successful requests.Always present
data.journeyTokenstring (UUID)Unique journey identifier.Always present
data.expiresAtnumberAbsolute expiry timestamp (epoch milliseconds).Always present
messagestring"Journey created successfully"Always present
meta.serverTimestampnumberServer timestamp (epoch milliseconds).Always present
meta.journeyTypestringEcho of requested journey type.Always present
meta.createdAtnumberJourney creation timestamp (epoch milliseconds).Always present
signaturestringCryptographic signature for response verification.Always present

Error Response

FieldTypeDescriptionPresence
successbooleanAlways false for error responses.Always present
dataobjectEmpty object {}.Always present
messagestringHuman-readable error message.Always present
errorsobject[]Array of error objects.Always present
errors[].codestringMachine-readable error code.Always present
errors[].typestringError category.Optional
errors[].messagestringError message.Always present
meta.serverTimestampnumberServer timestamp (epoch milliseconds).Always present
meta.journeyTypestringEcho of requested journey type.Optional
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.
{
  "success": true,
  "message": "Journey Token has been created successfully",
  "data": {
    "journeyToken": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "expiresAt": 1699209856789
  },
  "meta": {
    "serverTimestamp": 1699209856789,
    "journeyType": "ONBOARDING",
    "createdAt": 1699209856789
  },
  "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
sdkConfig
object

Configuration for SDK UI/UX behavior and controls.

verificationConfig
object

Configuration for verification strategy.

Response

Journey created successfully

success
boolean

Always true for successful requests.

Example:

true

message
string

Success message.

Example:

"Journey Token has been created successfully"

data
object
meta
object
signature
string

Cryptographic signature for response verification.

Example:

""