Selfie+ID Verification Powered by selfie.DONE as Standard Service
ID + Selfie Verification powered by selfie.DONE verifies a user's identity using a government-issued ID and Liveness, while enabling Jumio to reuse a previously verified identity when the user meets the required criteria.
selfie.DONE can reduce the need for users to repeatedly submit their identity documents, creating a faster and simpler verification experience while maintaining a secure verification process.
With selfie.DONE now available globally, this guide explains how to integrate this service for eligible use cases.
The workflow:
- Verifies that the government-issued ID is valid and authentic.
- Checks that the selfie is captured from a live person.
- Compares the selfie with the photo on the ID to confirm that they belong to the same person.
Step 1: Create or Update an Account
All Jumio Platform transactions are associated with an account. An account ID is a unique identifier used to associate transactions and credentials with a user.
If this is the first Jumio transaction for a user, create a new account. If the user already has an account, you can update the existing account to run the Identity and Selfie Verification workflow. For example, you may first perform a simpler verification, such as email or address verification, and then run Identity and Selfie Verification if the user passes the initial checks.
Create or update an account using the Accounts REST API.
Get the Workflow Details
The response from the Accounts API contains the information required to continue the verification workflow, including:
- Web Client URL and Authorization token – Use these to launch the Jumio Web Client for users completing the verification in a web browser.
- SDK authorization token (JWT) – Use this token to initialize the Jumio SDK in your mobile application.
- Credentials – Defines the documents and biometric information that are collected during the customer journey:
Jumio automatically creates and uploads a facemap during the customer journey when using the Jumio Web Client or mobile SDKs. Facemap upload is not supported when using the raw REST APIs.
Example Request and Response
The following example shows the account creation request and the corresponding API response.
Request Body
{
"customerInternalReference":"myCompany",
"callbackUrl":"https://portal.mycompany.com/callback",
"workflowDefinition": {
"key": 11313
}
}
Response Body
Details
{
"timestamp": "2022-11-28T23:45:02.536Z",
"account": {
"id": "<YOUR ACCOUNTID>"
},
"web": {
"href": "https://web.amer-1.jumio.ai/web/client?baseUrl=<WEB_URL>"
},
"sdk": {
"token": "token": "<YOUR SDK TOKEN>"
},
"workflowExecution": {
"id": "<WORKFLOW_EXECUTION_UUID>",
"credentials": [
{
"id": "<CREDENTIAL_UUID>",
"category": "ID",
"allowedChannels": [
"WEB",
"API",
"SDK"
],
"api": {
"token": "<YOUR_TOKEN>",
"parts": {
"front": "https://api.amer-1.jumio.ai/api/v1/accounts/<YOUR ACCOUNTID>/workflow-executions/<WORKFLOW_EXECUTION_UUID>/credentials/<CREDENTIAL_UUID>/parts/FRONT",
"back": "https://api.amer-1.jumio.ai/api/v1/accounts/<YOUR ACCOUNTID>/workflow-executions/<WORKFLOW_EXECUTION_UUID>/credentials/<CREDENTIAL_UUID>/parts/BACK"
},
"workflowExecution": "https://api.amer-1.jumio.ai/api/v1/accounts/<YOUR ACCOUNTID>/workflow-executions/<WORKFLOW_EXECUTION_UUID>"
}
},
{
"id": "<UUID>",
"category": "FACEMAP",
"allowedChannels": [
"WEB",
"SDK"
]
},
{
"id": "<UUID>",
"category": "SELFIE",
"allowedChannels": [
"WEB",
"SDK"
],
"api": {
"token": "<YOUR_TOKEN>",
"parts": {
"face": "https://api.amer-1.jumio.ai/api/v1/accounts/<YOUR ACCOUNTID>/workflow-executions/<WORKFLOW_EXECUTION_UUID>/credentials/<CREDENTIAL_UUID>/parts/FACE"
},
"workflowExecution": "https://api.amer-1.jumio.ai/api/v1/accounts/<YOUR ACCOUNTID>/workflow-executions/<WORKFLOW_EXECUTION_UUID>"
}
}
]
}
}
Step 2: Start the Customer Journey
The customer journey is usually managed by the Jumio Web Client and/or Mobile SDKs.
For ID + Selfie Verification powered by selfie.DONE, provide Prepared Data immediately after creating or updating the account. You can provide Prepared Data in parallel with starting the customer journey. Jumio uses the supplied data to determine whether an eligible previously verified identity can be reused.
If no eligible reusable identity is found, the transaction continues by requesting the user to scan their ID.
Upload Prepared Data
You can upload prepared data already collected from the end user, such as their name, date of birth, phone number, address, or email address.
For selfie.DONE, specific combinations of Prepared Data can be used to search for a reusable ID. Currently, user data options are available for selfie.DONE:
- Name + Date of Birth (Recommended – Global)
- Supported Country-Specific Identification Number + Address country code
- Name + Date of Birth + supported country-specific identification number + Address country code
Option 1: Using Name and Date of Birth (Recommended – Global)
Use the individual’s full name along with their date of birth. This search criterion is supported globally and is the recommended default for searches across all countries within your tenant account’s Accepted IDs configuration.
| Search Criteria | Applicable Countries | Required Fields in Prepared Data |
|---|---|---|
| Name + Date of Birth | IDs from all supported countries | firstName, middleName (if present on government-issued ID), lastName, dateOfBirth |
Example Request
{
"firstName": "pris****",
"middleName": "da***",
"lastName": "da*****",
"dateOfBirth": "1985-05-13"
}
Option 2: Using Country-specific Identification Number and Address Country Code
selfie.DONE supports identifier-based reusable ID search for specific countries using country-specific unique identifiers.
Identifier searches always use an exact match strategy.
| Search Criteria | Applicable Countries | Required Prepared Data Fields |
|---|---|---|
| CPF + Document Country | Brazil | personalNumber (CPF), addressCountry |
| CURP + Document Country | Mexico | personalNumber (CURP), addressCountry |
| PESEL + Document Country | Poland | personalNumber (PESEL), addressCountry |
| DNI + Document Country | Spain, Peru | personalNumber (DNI), addressCountry |
Best Practices
- Country-specific identification numbers (such as CPF or CURP, etc.) approach should be used when the collection and use of such identifiers is prevalent as part of the onboarding process in a country, and users are okay to provide them. Examples: CPF number in Brazil or CURP in Mexico, etc.
- Identifier-based searches are performed only if the Identification Number country is provided as part of the addressCountry field within the Prepared data.
- If the country is not provided as part of the addressCountry, the identifier search will not return a match, and the transaction will proceed with a standard ID verification flow.
Example Request
{
"personalNumber": "12345679",
"address": {
"country": "BRA"
}
}
Option 3: Using Name, Date of birth and a supported country-specific identification number
Remember, Jumio searches using Name + Date of Birth and Name + Date of Birth + Identification Number separately to increase the likelihood of finding a match.
Example Request
{
"firstName": "pris****",
"middleName": "da***",
"lastName": "da*****",
"dateOfBirth": "1985-05-13",
"personalNumber": "12345679",
"address": {
"country": "BRA"
}
}
Example Response
The response confirms that the Prepared Data was associated with the workflow execution.
{
"timestamp": "2026-09-21T06:45:22.158Z",
"account": {
"id": "<ACCOUNT_ID>"
},
"workflowExecution": {
"id": "<WORKFLOW_EXECUTION_UUID>"
},
"api": {
"token": "<YOUR_TOKEN>",
"parts": {},
"workflowExecution": "https://api.amer-1.jumio.ai/api/v1/accounts/<ACCOUNT_UUID>/workflow-executions/<WORKFLOW_EXECUTION_UUID>"
}
}
Step 3: Launch the Workflow
After creating or updating the account and providing the required Prepared Data, launch the verification workflow. Choose the integration method that matches your application.
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 Your Own Customer Journey
You can develop your own customer journey instead of using the Jumio Web Client or SDKs.
When using your own customer journey, you can manage the following steps:
- Guiding the end user through ID and Selfie capture.
- Obtaining the credential upload URLs and authorization token from the Account response.
- Uploading the supported credentials to Jumio.
- Finalizing the workflow after all required credentials have been uploaded.
- When implementing your own customer journey, you cannot upload a Facemap through the API.
- The Facemap credential supports only the WEB and SDK channels and does not contain an api object.
- Without a Facemap, the reliability of the Liveness capability may be reduced because Jumio offers only the Selfie credential available for Liveness evaluation.
Step 4: Complete the Customer Verification Journey
selfie.DONE uses Reusable ID as the ID acquisition type. The flow determines whether an ID that was previously verified by Jumio can be reused for the current transaction.
The flow is:
- Perform Liveness. The end user completes a Liveness check.
- Search for a reusable ID. If Liveness passes, Jumio searches for an eligible previously verified ID using the configured search criteria.
- Confirm reuse. If Jumio finds an eligible reusable ID, the end user can consent to reuse it.
- Continue verification. If the reusable ID is accepted, Jumio uses the previously verified ID.
- If no eligible reusable ID is found, or the user decides not to use it, the user is routed to the standard ID verification flow.
Current selfie.DONE implementation supports Web SDK and Mobile SDK channels; the API channel is not currently supported for the selfie.DONE journey.
Step 5: Understand the Verification Results
After the verification workflow is completed, retrieve the transaction results using the Retrieval APIs. The response contains the information required to evaluate the verification and determine the next action for the account. You can also view the transaction and its results in the Jumio Portal.
Verification Steps and Capabilities
When the customer verification journey has been completed successfully, the workflow is executed on the Jumio servers. Each capability renders an independent decision about the credentials it evaluates. The overall workflow decision is based on an evaluation of the capability decisions.
The response can contain results from the following capabilities:
| Capability | Description |
|---|---|
| Usability | Evaluates whether the credentials are suitable for further processing. |
| Classification | Identifies the type and characteristics of the document provided. |
| Extraction | Extracts relevant data from the government-issued ID. |
| Image Checks | Evaluates the government-issued ID for validity and authenticity. |
| Data Checks | Runs fraud checks against extracted data and applicable credentials. |
| Similarity | Compares the face in the Selfie with the photograph on the government-issued ID. |
| Liveness | Evaluates the user's liveness using the available biometric credentials. |
The capabilities that execute and the credentials they evaluate depend on the workflow configuration and the credentials collected during the customer journey.
Handling the Response
The Retrieval API response includes:
- Workflow information, including the workflow execution ID, status, definition key, user reference, and customer internal reference.
- Account information, including the Account ID.
- Transaction timestamps, including createdAt, startedAt, and completedAt.
- Credentials evaluated during the workflow, including credential IDs, categories, and available credential parts.
- The overall workflow decision and risk score.
- Reusable Identity information, when applicable, including information about the source and status of the reused ID.
- Capability results, including capability decisions, decision labels, credentials evaluated, and capability-specific data when available.
- Workflow steps, available through the URL in steps.href.
- Credential part URLs, which can be used to retrieve credential data or images when available.
- Rules and rule executions, when returned by the workflow response.
Reusable Identity Results
For selfie.DONE transactions, the response can identify when a previously verified ID was reused. For example:
{
"category": "ID",
"reusableIdentity": {
"source": "JUMIO",
"status": "ID_ACCEPTED"
}
}
Here,
- category identifies the credential as an ID.
- reusableIdentity.source identifies the source of the reusable identity. The values can be:
| Source | Description |
|---|---|
JUMIO | Reusable ID was provided by Jumio. |
LOCAL_PROVIDER | Reusable ID was provided by a local data source partner. Applicable only in Brazil. |
- reusableIdentity.status indicates the status of the reusable identity. The values are as follows:
| Status | Description |
|---|---|
ID_NOT_FOUND | No reusable ID was found for this transaction. |
ID_ACCEPTED | The user accepted the reusable ID shown on the ID Found screen. This indicates that a reusable ID was presented to the user. |
ID_NOT_ACCEPTED | The user declined the reusable ID shown on the ID Found screen and chose to perform a fresh ID scan. This indicates that a reusable ID was presented to the user. |
ERROR | A technical error occurred while processing the reusable identity. |
If no eligible reusable ID is found or the user does not accept the reuse, the workflow can continue with a standard ID scan. The response then contains the results associated with the ID verification performed during that transaction.
Example Retrieval API Response
The following example shows a completed selfie.DONE transaction. The response contains information about the workflow, account, credentials, reusable identity, overall decision, capabilities, lookups, and rules.
In the response, the decision object contains the overall workflow decision and risk score. The capabilities object contains the results returned by each capability, while the credentials array identifies the credentials evaluated during the workflow. Capability-specific data can provide additional verification information, such as extracted ID data, similarity results, or liveness results.
Details
{
"workflow": {
"id": "<UUID>",
"status": "PROCESSED",
"definitionKey": "11313",
"userReference": "tertiary",
"customerInternalReference": "Arizona",
"reportingCriteria": "Regional"
},
"account": {
"id": "<UUID>"
},
"createdAt": "2026-09-21T08:21:36.573Z",
"startedAt": "2026-09-21T08:22:48.371Z",
"completedAt": "2026-09-21T08:23:09.839Z",
"credentials": [
{
"id": "<UUID>",
"category": "DATA",
"parts": [
{
"classifier": "PREPARED_DATA",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/PREPARED_DATA"
}
]
},
{
"id": "<UUID>",
"category": "SELFIE",
"parts": [
{
"classifier": "FACE_CROPPED",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/FACE_CROPPED"
},
{
"classifier": "FACE",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/FACE"
}
]
},
{
"id": "<UUID>",
"category": "ID",
"reusableIdentity": {
"source": "JUMIO",
"status": "ID_ACCEPTED"
},
"parts": [
{
"classifier": "FRONT",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/FRONT"
},
{
"classifier": "BACK",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/BACK"
}
]
},
{
"id": "<UUID>",
"category": "FACEMAP",
"parts": [
{
"classifier": "FACEMAP"
},
{
"classifier": "LIVENESS_1",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/LIVENESS_1"
},
{
"classifier": "LIVENESS_3",
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/LIVENESS_3"
},
...........
]
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "PASSED"
},
"risk": {
"score": 0.0
}
},
"steps": {
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/workflow-executions/<UUID>/steps"
},
"capabilities": {
"extraction": [
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
},
"data": {
"type": "ID_CARD",
"subType": "NATIONAL_ID",
"issuingCountry": "BRA",
"firstName": "N/A",
"lastName": "Joe",
"dateOfBirth": "1962-03-14",
"documentNumber": "2686346XX",
"cpf": "731429611XX",
"currentAge": "64"
}
}
],
"classification": [
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
},
"data": {
"country": "BRA",
"type": "ID_CARD",
"subType": "NATIONAL_ID",
"printedDocumentName": "CARTEIRA DE IDENTIDADE",
"firstIssueDate": "2016-04-06",
"hasCryptoChip": false,
"isFoldable": false,
"isHandwritten": false,
"layout": "LANDSCAPE",
"material": "PAPER"
}
}
],
"similarity": [
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "SELFIE"
},
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "MATCH"
}
},
"data": {
"similarity": "MATCH"
}
}
],
"liveness": [
{
"id": "<UUID>",
"validFaceMapForAuthentication": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/credentials/<UUID>/parts/FACEMAP",
"credentials": [
{
"id": "<UUID>",
"category": "SELFIE"
},
{
"id": "<UUID>",
"category": "FACEMAP"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
},
"data": {
"type": "JUMIO_PREMIUM",
"predictedAge": 27,
"ageConfidenceRange": "19-40"
}
}
],
"dataChecks": [
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "NOT_EXECUTED",
"details": {
"label": "PRECONDITION_NOT_FULFILLED"
}
}
}
],
"imageChecks": [
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "SELFIE"
},
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "REJECTED",
"details": {
"label": "MANIPULATED_DOCUMENT"
},
"additionalInformation": "fuzzyDataMatchingFraudRule"
},
"data": {
"faceSearchFindings": {
"status": "DONE",
"findings": [
"29b3c3e1-6a83-........",
"8bfb9f15-c3c6-........",
"f0a4f3db-cf86-........",
"d9562614-28f5-........",
"57373245-e187-........",
"0e672369-188e-........",
"6376606b-fb52-........"
]
}
}
}
],
"usability": [
{
"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"
}
}
},
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "PASSED",
"details": {
"label": "OK"
}
}
}
],
"lookups": [
{
"id": "<UUID>",
"credentials": [
{
"id": "<UUID>",
"category": "SELFIE"
},
{
"id": "<UUID>",
"category": "DATA"
},
{
"id": "<UUID>",
"category": "ID"
}
],
"decision": {
"type": "REJECTED",
"details": {
"label": "REJECTED"
}
},
"data": {
"matchedTransactions": {
"totalHighRiskTransactions": 0,
"totalMediumRiskTransactions": 0,
"totalLowRiskTransactions": 2,
"earliestTransactionTime": "2025-10-16T13:10:06.973Z",
"latestTransactionTime": "2025-12-22T08:00:25.547Z",
"network": {
"highRiskTransactions": 0,
"mediumRiskTransactions": 0,
"lowRiskTransactions": 2,
"earliestTransactionTime": "2025-10-16T13:10:06.973Z",
"latestTransactionTime": "2025-12-22T08:00:25.547Z",
"transactions": [
"29b3c3e1-6a83-48d6-86d1-......",
"67c9dda4-f49b-4e4f-a4c8-....."
]
},
"associatedNetwork": {
"highRiskTransactions": 0,
"mediumRiskTransactions": 0,
"lowRiskTransactions": 0
}
},
"faceMatchedTransactions": {
"totalHighRiskTransactions": 0,
"totalMediumRiskTransactions": 0,
"totalLowRiskTransactions": 2,
"earliestTransactionTime": "2025-10-16T13:10:06.973Z",
"latestTransactionTime": "2025-12-22T08:00:25.547Z",
"network": {
"highRiskTransactions": 0,
"mediumRiskTransactions": 0,
"lowRiskTransactions": 2,
"earliestTransactionTime": "2025-10-16T13:10:06.973Z",
"latestTransactionTime": "2025-12-22T08:00:25.547Z",
"transactions": [
"29b3c3e1-6a83-48d6-86d1-........",
"67c9dda4-f49b-4e4f-a4c8-........"
]
},
"associatedNetwork": {
"highRiskTransactions": 0,
"mediumRiskTransactions": 0,
"lowRiskTransactions": 0
}
},
"matchedImagesTransactions": {
"totalHighRiskTransactions": 0,
"totalMediumRiskTransactions": 0,
"totalLowRiskTransactions": 1,
"earliestTransactionTime": "2026-09-16T07:53:33.027Z",
"latestTransactionTime": "2026-09-16T07:53:33.027Z",
"network": {
"highRiskTransactions": 0,
"mediumRiskTransactions": 0,
"lowRiskTransactions": 1,
"earliestTransactionTime": "2026-09-16T07:53:33.027Z",
"latestTransactionTime": "2026-09-16T07:53:33.027Z",
"transactions": [
"0e672369-188e-4224-9474-........"
]
},
"associatedNetwork": {
"highRiskTransactions": 0,
"mediumRiskTransactions": 0,
"lowRiskTransactions": 0
}
}
}
}
]
},
"rules": {
"href": "https://retrieval.amer-1.jumio.ai/api/v1/accounts/<UUID>/workflow-executions/<UUID>/rules",
"executions": [
{
"id": "<UUID>",
"startedAt": "2026-09-21T08:23:09.345Z",
"completedAt": "2026-09-21T08:23:09.821Z",
"rulesets": [
{
"id": "<UUID>",
"name": "Usability Rules Test",
"version": 1,
"score": 0,
"rulesNotMatched": [
{
"id": "<UUID>",
"name": "Usability ID Decision - Rejected",
"version": 1,
"score": 100
}
]
}
]
},
{
"id": "<UUID>",
"startedAt": "2026-09-21T08:23:08.811Z",
"completedAt": "2026-09-21T08:23:09.329Z",
"rulesets": [
{
"id": "<UUID>",
"name": "Jumio Master Ruleset 2",
"version": 1,
"score": 350,
"rulesMatched": [
{
"id": "<UUID>",
"name": "Image Checks Decision Type - Rejected",
"version": 1,
"score": 100
},
{
"id": "<UUID>",
"name": "Current Age to Predicted Age - gap is greater than 20",
"version": 1,
"score": 50
},
{
"id": "<UUID>",
"name": "Data Checks Decision Type - Not Executed",
"version": 1,
"score": 100
},
{
"id": "<UUID>",
"name": "Extraction ID Sub Type - National ID",
"version": 1,
"score": 0
},
{
"id": "<UUID>",
"name": "Image Checks Decision Label - Manipulated Document",
"version": 1,
"score": 100
}
],
"rulesNotMatched": [
{
"id": "<UUID>",
"name": "Phone Type - Invalid",
"version": 1,
"score": 50
},
......................
]
}
]
}
]
}
}