Skip to main content

Quickstart Guide: ID + Selfie Verification

Follow these steps to authenticate, create or update account, launch identity verification workflows, and handle the response.

Prerequisites​

To retrieve your Credentials, log in to the portal and obtain your client ID and client secret. These are required to authenticate the /token endpoint.

Step-by-Step Process​

Step 1: Obtain an OAuth2 Bearer Token​

  • Generate an OAuth2 Bearer token by calling the /token endpoint with the POST HTTP method.
  • Use Basic Authentication with the client ID and client secret found in the settings section of your Jumio Portal.
  • Once obtained, include the token in the Authorization header for all subsequent API requests.
tip

Refer to the Authentication documentation for the specific endpoint to obtain this token.

Access Token URLs (OAuth2)​

Accept: application/json

Body (x-www-form-urlencoded)​

grant_type=client_credentials

Example Response​

{
"access_token": "<your_token>",
"expires_in": 3600,
"token_type": "Bearer"
}
note
  • OAuth 2.0 access tokens are valid for 60 minutes (3600 seconds) by default.
  • To avoid unnecessary authentication requests and reduce integration costs, do not call the /auth endpoint before every transaction. Instead, reuse the same access token until it expires, and request a new one only when needed.
  • For testing purposes, you can use Postman's built-in OAuth 2.0 authorization type (under the Authorization tab), which allows you to retrieve and manage tokens automatically across your requests or collections.
  • For a step-by-step walkthrough, check out this short video guide.

Step 2: Create or Update an Account​

Use the /accounts endpoint to initiate a new workflow for either a new or an existing user.

info

A workflow defines which Jumio services will process your user's credentials.

New User​

Existing User​

Header​

Accept: application/json

Example Request​

{
"customerInternalReference": "transaction_1234",
"workflowDefinition": {
"key": "10549" //ID + Selfie + Prepared Data
}
}

Example Response​

{
"timestamp": "ISO-8601 timestamp",
"account": {
"id": "string"
},
"web": {
"href": "https://hosted.jumio.com/...",
"successUrl": "https://yourapp.com/success",
"errorUrl": "https://yourapp.com/error"
},
"sdk": {
"token": "JWT token"
},
"workflowExecution": {
"id": "string",
"credentials": [
{
"id": "string",
"category": "ID | DATA | SELFIE | FACEMAP",
"label": "string",
"allowedChannels": ["WEB", "API", "SDK"],
"api": {
"token": "JWT token",
"workflowExecution": "https://api.jumio.ai/.../workflow-executions/{id}",
"parts": {
"front": "https://.../parts/FRONT",
"back": "https://.../parts/BACK",
"prepared_data": "https://.../parts/PREPARED_DATA",
"face": "https://.../parts/FACE"
}
}
}
]
}
}

Step 3: Launch the Workflow​

The account creation response provides three integration options:

Option 1: Use Jumio's Hosted Interface​

Use workflowExecution.web.href in one of these ways:

  • Redirect: Send users to the URL in a new browser tab
  • iFrame: Embed the experience in your webpage
  • WebView: Load the URL in a mobile app WebView component

<iframe src="https://hosted.jumio.com/workflow/abc123" width="100%" height="700"></iframe>

Option 2: Integrate Jumio SDKs​

Initialize the SDK using workflowExecution.sdk.token. Refer to the Jumio SDK documentation for implementation details.

Option 3: Build Custom Interface with API​

Use the workflowExecution.api.workflowExecution endpoint to upload images directly. You'll need to:

  • Upload front, back, and selfie images.
  • Finalize the workflow using the finalization endpoint.

For guidance on using this approach, contact Jumio support.

Step 4: Wait for the Callback​

Jumio will send a callback when the workflow is complete. This only includes No PII data/non-sensitive data status info, so proceed to retrieve full details. You can check the callback here.

note

Callback time varies by workflow—wait accordingly.

Step 5: Retrieve the Workflow Results​

Upon receiving the callback, consume the retrieval API with the GET HTTP method:

  • US: https://retrieval.amer-1.jumio.ai/api/v1/accounts/{accountId}/workflow-executions/{workflowExecutionId}
  • EU: https://retrieval.emea-1.jumio.ai/api/v1/accounts/{accountId}/workflow-executions/{workflowExecutionId}
  • SG: https://retrieval.apac-1.jumio.ai/api/v1/accounts/{accountId}/workflow-executions/{workflowExecutionId}

Once you receive the response from the Retrieval API, parse it to:

  • Determine the final status (e.g., passed, rejected, etc.). Learn more about risk scores here.
  • Review the extracted document data.
  • Take the appropriate next steps based on the results.

Example Response​

Details
{
"workflow": {
"id": "UUID",
"status": "PROCESSED",
"definitionKey": "10011",
"userReference": "MyUser",
"customerInternalReference": "transaction_1234"
},
"account": {
"id": "UUID"
},
"createdAt": "2022-11-28T23:45:02.528Z",
"startedAt": "2022-11-28T23:50:37.221Z",
"completedAt": "2022-11-28T23:50:55.232Z",
"credentials": [
{
"id": "UUID",
"category": "SELFIE",
"parts": [
{
"classifier": "FACE",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/FACE"
}
],
"consent": {
"decisionAccepted": true,
"collectedBy": "CUSTOMER"
}
},
{
"id": "UUID",
"category": "FACEMAP",
"parts": [
{
"classifier": "FACEMAP"
},
{
"classifier": "LIVENESS_1",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/LIVENESS_1"
},
{
"classifier": "LIVENESS_3",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/LIVENESS_3"
},
{
"classifier": "LIVENESS_2",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/LIVENESS_2"
},
{
"classifier": "LIVENESS_5",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/LIVENESS_5"
},
{
"classifier": "LIVENESS_4",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/LIVENESS_4"
},
{
"classifier": "LIVENESS_6",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/LIVENESS_6"
}
],
"consent": {
"decisionAccepted": true,
"collectedBy": "CUSTOMER"
}
},
{
"id": "UUID",
"category": "ID",
"parts": [
{
"classifier": "FRONT",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/FRONT"
},
{
"classifier": "BACK",
"href": "https://retrieval.amer-1.jumio.ai/.../parts/BACK"
}
],
"consent": {
"decisionAccepted": true,
"collectedBy": "CUSTOMER"
}
}
],
"decision": {
"type": "WARNING",
"details": {
"label": "WARNING"
},
"risk": {
"score": 50.0
}
},
"consent": {
"obtained": "yes",
"obtainedAt": "2022-11-28T23:50:40.136Z"
},
"steps": {
"href": "https://retrieval.amer-1.jumio.ai/.../steps"
},
"capabilities": {
"extraction": [
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
},
"data": {
"type": "DRIVING_LICENSE",
"subType": "REGULAR_DRIVING_LICENSE",
"issuingCountry": "USA",
"firstName": "JOHN JACOB",
"lastName": "SMITH",
"dateOfBirth": "1969-01-18",
"expiryDate": "2025-01-18",
"issuingDate": "2019-12-26",
"documentNumber": "N1234567",
"state": "CA",
"gender": "M",
"currentAge": "54"
}
}
],
"similarity": [
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "SELFIE"
},
{
"id": "UUID",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "MATCH"
}
},
"data": {
"similarity": "MATCH"
}
}
],
"liveness": [
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "SELFIE"
},
{
"id": "UUID",
"category": "FACEMAP"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
},
"data": {
"type": "JUMIO_STANDARD",
"predictedAge": 44,
"ageConfidenceRange": "14-67"
}
}
],
"dataChecks": [
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
}
}
],
"imageChecks": [
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "SELFIE"
},
{
"id": "UUID",
"category": "ID"
}
],
"decision": {
"type": "WARNING",
"details": {
"label": "REPEATED_FACE"
}
},
"data": {
"faceSearchFindings": {
"status": "DONE",
"findings": [
"22771260-8cb0-42a2-a38a-d8f853063cc2",
"27232651-4b18-4cf1-8d4a-df0451abc717",
"9541ae91-834e-4914-a30d-6534fed4eb6d",
"9414413d-2c76-44d2-9052-8876fa327a02"
]
}
}
}
],
"usability": [
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
}
},
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "FACEMAP"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
}
},
{
"id": "UUID",
"credentials": [
{
"id": "UUID",
"category": "SELFIE"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
}
}
]
}
}

For further details, advanced use cases, or support with customization, please refer to the complete API documentation or contact Jumio support.