Introduction to v3
This content applies to the legacy v3 products. Documentation for the current Jumio Platform is available at Jumio Documentation.
The Jumio v3 (Legacy) Platform API allows you to manage your user journeys. It allows you to create and update accounts for your users, prompt them to provide data such as a photo ID and selfie, and get identity verification results in real time so you can complete their onboarding.
The v3 Platform API is user-based and highly flexible, allowing various workflows that can be easily combined into a single user journey. Each workflow defines a single transaction executing a series of specific tasks, such as data extraction and a liveness check. Multiple workflows can be executed on the same account. Your workflows can execute functionality from several Jumio products, including:
ID Verification: Is this photo ID valid? Identity Verification: Is this person who they say they are? The following diagram shows several possible workflows:

Some functionalities described in this document might be unavailable, depending on the scope of your license with Jumio. Contact your Jumio Solutions Engineer if you have any questions.
Implementation Steps:
Account Creation Account Update Data Acquisition Finalization
Authentication and Encryption
API calls are protected using either HTTP Basic Authentication or OAuth2.
⚠️ Never share your API token, API secret, or OAuth2 credentials with anyone — not even Jumio Support! The Account Management Service initiates the acquisition process and returns:
either a JSON Web Token (JWT), which can be used to authenticate to the Jumio backend system to use with the SDK or Redirect-URLs, which can be used to upload documents using the other channels At the moment, your Basic Auth credentials are constructed using your API token as the User ID and your API secret as the password. You can view and manage your API token and secret in the Customer Portal under:
Settings > API credentials > API Users
OAuth2
Your new OAuth2 credentials are constructed using your API token as the Client ID and your API secret as the Client secret. You can view and manage your API token and secret in the Customer Portal under:
Settings > API credentials > OAuth2 Clients Client ID and Client secret are used to generate an OAuth2 access token. OAuth2 has to be activated for your account. Contact your Jumio Account Manager for activation.
Access Token URL (OAuth2) US: https://auth.amer-1.jumio.ai/oauth2/token EU: https://auth.emea-1.jumio.ai/oauth2/token SG: https://auth.apac-1.jumio.ai/oauth2/token The TLS Protocol is required to securely transmit your data, and we strongly recommend using the latest version. For information on cipher suites supported by Jumio during the TLS handshake see supported cipher suites.
ℹ️ Calls with missing, incorrect or suspicious headers or parameter values will result in HTTP status code 400 Bad Request Error or 403 Forbidden
Examples
Request Access Token
curl --location --request POST 'https://auth.amer-1.jumio.ai/oauth2/token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-raw 'grant_type=client_credentials' \
--basic --user CLIENT_ID:CLIENT_SECRET
Response
{
"access_token": "YOUR_ACCESS_TOKEN",
"expires_in": 3600,
"token_type": "Bearer"
}
Access Token Timeout
Your OAuth2 access token is valid for 60 minutes. After the token lifetime is expired, it is necessary to generate a new access token.
Workflow Transaction Token Timeout
The token lifetime is set to 30 minutes per default. It can be configured via the Jumio Customer Portal and can be overwritten using the API call (tokenLifetime). Within this token lifetime the token can be used to initialize the SDK, API or Web journey.
As soon as the workflow (transaction) starts, a 15 minutes session timeout starts. For each action performed (capture image, upload image) the session timeout will reset, and the 15 minutes will start again.
Account Creation
Create a new account for your end user by using the following API endpoint and below mentioned request headers and request body:
HTTP Request Method: POST
US: https://account.amer-1.jumio.ai/api/v1/accounts EU: https://account.emea-1.jumio.ai/api/v1/accounts SG: https://account.apac-1.jumio.ai/api/v1/accounts
Request Headers
The following fields are required in the header section of your Request
Accept: application/json
Content-Type: application/json
Content-Length: see RFC-7230
Authorization: see RFC6749
User-Agent: YourCompany YourApp/v1.0
⚠️ Jumio requires the User-Agent value to reflect your business or entity name for API troubleshooting. ℹ️ Calls with missing or suspicious headers, suspicious parameter values, or without OAuth2 will result in HTTP status code 403 Forbidden
Request Body
The body of your initiate API request allows you to:
provide your own internal tracking information for the user and transaction. specify what user information is captured and by which method. preset options to enhance the user journey. Values set in your API request will override the corresponding settings configured in the Customer Portal.
(Mandatory parameters in bold.)
| Parameter | Type | Max. Length | Notes |
|---|---|---|---|
| customerInternalReference | string | 100 | Customer internal reference for linking the request in the customer backend (must not contain any PII) |
| workflowDefinition | object | – | Definition of the specific documents required to execute the workflow capabilities |
| userConsent2 | object | – | User consent required where facial recognition or biometric data processing is used. Possible values: See userConsent |
| workflowDefinition.key | object | – | Key of the workflow definition to execute. See Workflow Definition Keys |
| workflowDefinition.credentials | array (object) | – | Optional. Customize the acquiring and workflow process. See workflowDefinition.credentials for possible values |
| workflowDefinition.capabilities | object | – | Optional. Customize the acquiring and workflow process. See workflowDefinition.capabilities for possible values |
| userReference1 | string | 100 | Reference for the end user in the customer backend (must not contain any PII) |
| reportingCriteria | string | 255 | Additional information provided by the customer for searching and aggregation purposes |
| callbackUrl | string | 255 | Callback URL for this request. Overrides the callback URL set in the Customer Portal |
| tokenLifetime | string | – | Valid period unit: s (seconds), m (minutes), h (hours), d (days). Minimum: 5m, Maximum: 60d, Default: 30m. Overrides Authorization token lifetime in the Customer Portal. Example: 1d, 30m, 600s |
| web | object | – | Parameters relevant only for the Web channel |
| web.successUrl | string | 255 | URL to redirect the end user after a successful web acquisition. Overrides success URL in the Customer Portal |
| web.errorUrl | string | 255 | URL to redirect the end user after a failed web acquisition. Overrides error URL in the Customer Portal |
| web.locale | string | 5 | Renders content in the specified language. Overrides default locale in the Customer Portal. See supported locale values |
1 Mandatory request parameter for Workflow 32: ID Verification, Identity Verification, Screening.. 2 Mandatory for End-User Consent even if the user is not based in USA.
Request workflowDefinition.credentials
| Parameter | Type | Max. Length | Notes |
|---|---|---|---|
| category | string | – | Type of credential. Possible values: ID, FACEMAP, DOCUMENT, SELFIE |
| country | object | – | Defines the countries applicable for the workflow. Possible values: country.predefinedType, country.values |
| country.predefinedType | string | – | Determines how the country is presented to the end user. Possible values: DEFINED (default: end user cannot change), RECOMMENDED (preselected but user can change) |
| country.values | array (string) | – | List of applicable countries. At least one ISO 3166-1 alpha-3 country code must be defined for the workflow. Example: USA, BRA, DEU |
| type | object | – | Defines the credential type(s) used in the workflow. Possible values: type.predefinedType, type.values |
| type.predefinedType | object | – | Determines how the document type is presented to the end user. Possible values: DEFINED (default: user cannot change), RECOMMENDED (preselected but user can change) |
| type.values | array (string) | – | List of credential types allowed for the workflow. Possible values: • If category = ID: ID_CARD, DRIVING_LICENSE, PASSPORT, VISA • If category = FACEMAP: IPROOV_STANDARD (Web + SDK only), IPROOV_PREMIUM (Workflow 3: ID & Identity Verification Web + SDK / Workflow 9: Authentication SDK / Workflow 16: Authentication On Premise SDK), JUMIO_STANDARD |
1 Web channel: Only supports predefined country and type when both are provided. Also only a single country and a single type must be specified, a list of presets is not supported for Web.
Request workflowDefinition.capabilities
| Parameter | Type | Max. Length | Notes |
|---|---|---|---|
| watchlistScreening | object | – | Configuration options for the Watchlist Screening capability. Possible values: watchlistScreening.additionalProperties |
| watchlistScreening.additionalProperties | string | – | Provide request options for the Watchlist Screening capability. |
Request userConsent
| Parameter | Type | Max. Length | Notes |
|---|---|---|---|
| userIp | string | – | Current IP address of the end-user used during the verification. |
| userLocation | object | – | End-user location details. Possible values: userLocation.country, userLocation.state. |
| userLocation.country | string | 3 | Current country based on the end-user’s location during verification. Possible values: ISO 3166-1 alpha-3 country codes. |
| userLocation.state | string | 100 | Current state/province as per end-user location. Applicable only in countries with states (e.g., USA, CAN, AUS). For USA, CAN, AUS: provide alpha-2 state code (without country & hyphen), e.g., IL (Illinois), NSW (New South Wales). For other countries, any string if applicable. |
| consent | object | – | End-user consent details. Possible values: consent.obtained, consent.obtainedAt. |
| consent.obtained | string | – | Indicates whether end-user consent was obtained. Possible values: yes (consent given), no (consent not given), na (not applicable). Mandatory if userLocation.country = USA. |
| consent.obtainedAt | string | – | UTC timestamp when consent was obtained. Format: YYYY-MM-DDThh:mm:ss.SSSZ. Mandatory if consent.obtained = yes. |
1 Mandatory for End-User Consent even if the user is not based in USA. 2 Mandatory for End-User Consent if userLocation.country = USA / consent.obtained = yes
Response
Unsuccessful requests will return HTTP status code 400 Bad Request, 401 Unauthorized, 403 Forbidden or 404 Not Found (in case of a failed update scenario) if the scan is not available.
Successful requests will return HTTP status code 200 OK along with a JSON object containing the information described below.
| Parameter | Type | Notes |
|---|---|---|
| timestamp | string | UTC timestamp of the response. Format: YYYY-MM-DDThh:mm:ss.SSSZ. |
| account | object | Account details. Possible values: account.id. |
| account.id | string | UUID of the account. |
| sdk | object | SDK parameters (only relevant for SDK channel). Possible values: sdk.token. |
| sdk.token | string | JWT token for performing any SDK action. |
| workflowExecution | object | Workflow execution details. Possible values: workflowExecution.id, workflowExecution.credentials. |
| workflowExecution.id | string | UUID of the workflow. |
| workflowExecution.credentials | array (object) | Credential response objects. See workflowExecution.credentials. |
| web | object | Web parameters (only relevant for WEB channel). Possible values: web.href, web.successUrl, web.errorUrl. |
| web.href | string | URL for accessing the workflow in the browser. |
| web.successUrl | string | URL where the browser redirects the user after a successful web acquisition journey (defined in Customer Portal or overwritten in initiate call). |
| web.errorUrl | string | URL where the browser redirects the user after a failed web acquisition journey (defined in Customer Portal or overwritten in initiate call). |
esponse workflowExecution.credentials
| Parameter | Type | Notes |
|---|---|---|
| id | string | UUID of the credential. |
| category | string | Possible values: ID, FACEMAP, DOCUMENT, SELFIE. |
| country | object | Define at least one ISO 3166-1 alpha-3 country code for the workflow definition. Possible values: ISO 3166-1 alpha-3 country code. |
| type | object | Define the credential type codes. Possible values: ID_CARD, DRIVING_LICENSE, PASSPORT, VISA. |
| allowedChannels | array | Channels supported to upload this credential. Possible values: WEB, API, SDK. |
| api | object | Available actions for API calls (some actions may be unavailable). Only relevant for the API channel. Possible values: api.token, api.parts, api.workflowExecution. |
| api.token | string | JWT token for performing any API action. Only relevant for the API channel. |
| api.parts | object | Href to manage parts of the credential. Possible values: FRONT, BACK, FACE, FACEMAP. Only relevant for the API channel. |
| api.workflowExecution | string | Href to manage the acquisition and workflow processing. Only relevant for the API channel. |
Examples
Initiate Account
curl --location --request POST 'https://account.amer-1.jumio.ai/api/v1/accounts' \
--header 'Content-Type: application/json' \
--header 'User-Agent: User Demo' \
--header 'Authorization: Bearer
YOUR_ACCESS_TOKEN' \
--data-raw '{
"customerInternalReference": "CUSTOMER_REFERENCE",
"workflowDefinition": {
"key": 2,
"credentials": [
{
"category": "ID",
"country": {
"predefinedType": "DEFINED",
"values": ["USA", "CAN", "AUT", "GBR"]
},
"type": {
"predefinedType": "DEFINED",
"values": ["DRIVING_LICENSE", "ID_CARD"]
}
}
],
"capabilities": {
"watchlistScreening": {
"additionalProperties": "string"
}
}
},
"callbackUrl": "YOUR_CALLBACK_URL",
"userReference": "YOUR_USER_REFERENCE",
"userConsent": {
"userIp": "226.80.211.232",
"userLocation": {
"country": "USA",
"state": "IL"
},
"consent": {
"obtained": "yes",
"obtainedAt": "2022-07-20T17:20:35.000Z"
}
}
}'
Account Update
After you have created an account for an end user, you can use this API to update that account. You will use this API endpoint for every new workflow (transaction) you need to initialize for that end user.
Updating an account is very similar to creating one; the request headers and body are the same in both cases. The difference is that you pass the accountId to the endpoint and use PUT instead of POST.
Request
HTTP Request Method: PUT
US: https://account.amer-1.jumio.ai/api/v1/accounts/<accountId>
EU: https://account.emea-1.jumio.ai/api/v1/accounts/<accountId>
SG: https://account.apac-1.jumio.ai/api/v1/accounts/<accountId>
Request Headers Please refer to Account Create section above.
Request Body Please refer to Account Create section above.
Response Please refer to Account Create section above.
Examples
Request
curl --location --request PUT 'https://account.amer-1.jumio.ai/api/v1/accounts/<accountId>' \
--header 'Content-Type: application/json' \
--header 'User-Agent: User Demo' \
--header 'Authorization: Bearer
YOUR_ACCESS_TOKEN' \
--data-raw '{
"customerInternalReference": "CUSTOMER_INTERNAL_REFERENCE",
"workflowDefinition": {
"key": 2,
"credentials": [
{
"category": "FACEMAP",
"type": {
"values": ["IPROOV_STANDARD", "JUMIO_STANDARD"]
}
},
{
"category": "ID",
"type": {
"values": ["DRIVING_LICENSE", "ID_CARD", "PASSPORT"]
},
"country": {
"values": ["USA", "CAN", "AUT"]
}
}
]
},
"userConsent": {
"userIp": "226.80.211.232",
"userLocation": {
"country": "AUT"
}
}
}
Response
{
"timestamp": "2021-05-28T09:17:50.240Z",
"account": {
"id": "11111111-1111-1111-1111-aaaaaaaaaaaa"
},
"web": {
"href": "https://mycompany.web.amer-1.jumio.ai/web/v4/app?authorizationTokenxxx&locale=es",
"successUrl": "https://www.yourcompany.com/success",
"errorUrl": "https://www.yourcompany.com/error"
},
"sdk": {
"token": "xxx"
},
"workflowExecution": {
"id": "22222222-2222-2222-2222-aaaaaaaaaaaa",
"credentials": [
{
"id": "33333333-3333-3333-aaaaaaaaaaaa",
"category": "ID",
"allowedChannels": [
"WEB",
"API",
"SDK"
],
"api": {
"token": "xxx",
"parts": {
"front": "https://api.amer-1.jumio.ai/api/v1/accounts/11111111-1111-1111-1111-aaaaaaaaaaaa/workflow-executions/22222222-2222-2222-2222-aaaaaaaaaaaa/credentials/33333333-3333-3333-aaaaaaaaaaaa/parts/FRONT",
"back": "https://api.amer-1.jumio.ai/api/v1/accounts/11111111-1111-1111-1111-aaaaaaaaaaaa/workflow-executions/22222222-2222-2222-2222-aaaaaaaaaaaa/credentials/33333333-3333-3333-aaaaaaaaaaaa/parts/BACK"
},
"workflowExecution": "https://api.amer-1.jumio.ai/api/v1/accounts/11111111-1111-1111-1111-aaaaaaaaaaaa/workflow-executions/22222222-2222-2222-2222-aaaaaaaaaaaa"
}
}
]
}
}
Implementation Steps: Sequence Diagram

Workflow Descriptions
Workflow Definition Keys
| Definition Key | Name | Description |
|---|---|---|
| 1 | ID Capture and Storage | Captures a government-issued ID document and stores the extracted data. |
| 2 | ID Verification | Verifies a government-issued ID document and returns: (a) whether the document is valid, and (b) the data extracted from the document. |
| 3 | ID and Identity Verification | Verifies a photo ID document and returns: (a) whether the document is valid, and (b) the extracted data. Also compares the user’s face with the ID photo and performs a liveness check to confirm the person is physically present. |
| 5 | Similarity to Existing ID | Matches a user’s selfie to the face from a previously verified and stored ID document. |
| 6 | Standalone Liveness | Captures a user’s face to verify that the person is physically present and not presenting a photo or other spoofed image. |
| 9 | Authentication | Compares a user’s facemap to an existing facemap captured during a previous workflow (for example, Workflow 3 or Workflow 6). |
| 16 | Authentication on Premise | Compares a user’s facemap to an existing facemap stored on the customer side. The facemap must have been captured during a previous workflow (for example, Workflow 3 or Workflow 6) and can be retrieved using the Retrieval API with the validFaceMapForAuthentication parameter. |
| 20 | Similarity of Two Images | Matches user photos across two IDs, two selfies, or a selfie and an ID photo to verify they belong to the same person. |
| 32 | ID Verification, Identity Verification, Screening | Verifies a photo ID document and returns: (a) whether the document is valid, and (b) extracted data. Also performs face comparison, liveness detection, and checks whether the user appears on any sanctions lists. |
Workflows are specified using the key attribute in the workflowDefinition object:
"workflowDefinition": {
"key": DEFINITION_KEY,
"credentials": []
}