# Supplemental endpoints
# Getting similar applicants (duplicates) check result
Using this method, you can fetch a list of entities with similar data of one particular applicant after its check. All attributes below are nullable.
GET /resources/checks/latest?type=SIMILAR_SEARCH&applicantId={applicantId}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
# RESPONSE
Response represents a singleton list of checks
with information on similar applicants
Name | Type | Description |
---|---|---|
answer | String | Duplicates check answer (GREEN /RED /YELLOW ). |
createdAt | Date | Time and date of the latest duplicate check result. |
similarSearchInfo | Object | Duplicate search data. |
# similarSearchInfo
ATTRIBUTES
Name | Type | Description |
---|---|---|
answer | String | Duplicates check answer (GREEN /RED /YELLOW ). |
duplicateApplicantHits | List of Objects | List of data about a particular match. |
# duplicateApplicantHits
ELEMENT ATTRIBUTES
Name | Type | Description |
---|---|---|
applicantId | String | Applicant Id of the matched applicant. |
matchedFields | List of Strings | List of matched json fields from applicant info. |
types | List of Strings | List of match criteria (text /image ). |
# Example request
curl -X GET \
'https://api.sumsub.com/resources/checks/latest?type=SIMILAR_SEARCH&applicantId=5eea3f5204f940217bcbc03d'
# Example response
{
"checks": [
{
"answer": "RED",
"createdAt": "2023-01-17 13:17:38",
"similarSearchInfo": {
"answer": "RED",
"duplicateApplicantHits": [
{
"applicantId": "61badd2937955c000144613d",
"matchedFields": [
"info.lastName",
"info.firstName",
"info.idDocs.ID_CARD",
"info.dob"
],
"types": [
"text",
"image"
]
}
]
}
}
]
}
# Getting result from tin (SSN) check
Using this method, you can get data that was extracted from external sources using applicant's TIN (SSN).
GET /resources/checks/latest?type=TIN&applicantId={applicantId}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
# RESPONSE
Response represents a singleton list of checks
Name | Type | Description |
---|---|---|
answer | String | Сheck answer (GREEN /RED /YELLOW ). |
createdAt | Date | Time and date of the latest tin check result. |
extractedDoc | Object | External check source data. |
# extractedDoc
ATTRIBUTES
Name | Type | Description |
---|---|---|
addresses | List of Objects | List of addresses extracted from external check sources. |
# addresses
ELEMENT ATTRIBUTES
Name | Type | Description |
---|---|---|
country | String | Alpha-3 country code. |
postCode | String | Postal code. |
town | String | Town or city name. |
street | String | Street name. |
buildingNumber | String | Building number. |
subStreet | String | Additional street information. |
state | String | State name if applicable. |
startDate | Date | Date of starting using address as residential. |
endDate | Date | Date of changing residential address. |
# Example request
curl -X GET \
'https://api.sumsub.com/resources/checks/latest?type=TIN&applicantId=5eea3f5204f940217bcbc03d'
# Example response
{
"checks": [
{
"answer": "GREEN",
"createdAt": "2023-04-17 12:47:21",
"extractedDoc": [{
"street": "1157 BOLENS CREEC RD",
"state": "NC",
"buildingNumber": "1157",
"town": "BURNSVILLE",
"postCode": "28714-7602",
"startDate": "1996-03-01 00:00:00",
"endDate": "2016-10-07 00:00:00",
"country": "USA",
}]
}
]
}
# Generating WebSDK external link for particular user
POST /resources/sdkIntegrations/levels/{levelName}/websdkLink?ttlInSecs={lifetime}&externalUserId={externalUserId}&lang={lang}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
levelName | String | Yes | Applicant level name that you can set up at the dashboard. |
ttlInSecs | Integer | Yes | Link lifetime in seconds. |
externalUserId | String | Yes | External User ID - unique user identifier on your side. |
lang | String | No | WebSDK texts language in ISO 639-1 format. |
# RESPONSE
Name | Type | Description |
---|---|---|
url | String | Verification link. |
# Example request
curl -X POST \
'https://api.sumsub.com/resources/sdkIntegrations/levels/basic-kyc-level/websdkLink?ttlInSecs=1800&externalUserId=304775ty&lang=en' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{ }'
# Example response
{
"url": "https://api.sumsub.com/idensic/l/#/lPDnIKwzmxPfDohk"
}
# Sending verification status email to an applicant
Method below will send email about current verification status to the indicated within applicant email address.
POST /resources/applicants/{applicantId}/verificationStatusEmail
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
# Example request
curl -X POST \
'https://api.sumsub.com/resources/applicants/60b8ce73460647000145384e/verificationStatusEmail'
# Example response
{
"ok": 1
}
# Getting applicant events log
Using this method, you can take a look at activity within particular applicant.
GET /resources/applicantTimeline/{applicantId}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
# RESPONSE
Name | Type | Description |
---|---|---|
applicant | String | Contains data of a similar applicant. |
items | Array of Objects | Array of activity events. |
items.ts | String | Timestamp of an event |
items.activity | String | Type of activity that affected on applicant status. |
items.ipInfo | Object | Contains IP addresses and locations. |
items.trackingData | Object | Contains an IP address and source of the activity (WebSDK, msdk, dashboard). |
# Example request
curl -X GET \
'https://api.sumsub.com/resources/applicantTimeline/60b8ce73460647000145384e'
# Example response
{
"applicantId" : "60b8ce73460647000145384e",
"items" : [ {
"id" : "60cb2bb54152840001b09b8a",
"ts" : "2021-06-17 11:02:13",
"activity" : "moderator:completed:review",
"subjectName" : "Backoffice",
"country" : "SWE",
"reviewAnswer" : "GREEN",
"elapsedSincePendingMs" : 148469
}, {
"id" : "60cb2b207bbfc20001ff8336",
"ts" : "2021-06-17 10:59:44",
"trackingData" : {
"ip" : "217.211.151.118",
"xClientId" : "WebSDK"
},
"ipInfo" : {
"ip" : "217.211.151.118",
"countryCode2" : "SE",
"countryCode3" : "SWE",
"city" : "Bromma",
"zipCode" : "168 54",
"lat" : 59.35,
"lon" : 17.9167,
"asn" : 3301,
"asnOrg" : "Telia Company AB",
"riskyAsn" : false
},
"userAgentInfo" : {
"uaPlatform" : "Android",
"uaBrowser" : "Chrome",
"uaDeviceType" : "Mobile Phone",
"uaBrowserVersion" : "0.0"
},
"activity" : "applicant:changed:status",
"subjectName" : "UserId",
"country" : "SWE",
"status" : "pending"
}, {
"id" : "60cb2b1d4152840001b0883f",
"ts" : "2021-06-17 10:59:41",
"trackingData" : {
"ip" : "217.211.151.118",
"xClientId" : "WebSDK"
},
"ipInfo" : {
"ip" : "217.211.151.118",
"countryCode2" : "SE",
"countryCode3" : "SWE",
"city" : "Bromma",
"zipCode" : "168 54",
"lat" : 59.35,
"lon" : 17.9167,
"asn" : 3301,
"asnOrg" : "Telia Company AB",
"riskyAsn" : false
},
"userAgentInfo" : {
"uaPlatform" : "Android",
"uaBrowser" : "Chrome",
"uaDeviceType" : "Mobile Phone",
"uaBrowserVersion" : "0.0"
},
"activity" : "user:added:idDoc",
"subjectName" : "UserId",
"country" : "SWE",
"imageId" : "665222684",
"idDocType" : "SELFIE"
}, {
"id" : "60cb2af46623af0001798a4c",
"ts" : "2021-06-17 10:59:00",
"trackingData" : {
"ip" : "217.211.151.118",
"xClientId" : "WebSDK"
},
"ipInfo" : {
"ip" : "217.211.151.118",
"countryCode2" : "SE",
"countryCode3" : "SWE",
"city" : "Bromma",
"zipCode" : "168 54",
"lat" : 59.35,
"lon" : 17.9167,
"asn" : 3301,
"asnOrg" : "Telia Company AB",
"riskyAsn" : false
},
"userAgentInfo" : {
"uaPlatform" : "Android",
"uaBrowser" : "Chrome",
"uaDeviceType" : "Mobile Phone",
"uaBrowserVersion" : "0.0"
},
"activity" : "user:added:idDoc",
"subjectName" : "UserId",
"country" : "SWE",
"imageId" : "750640317",
"idDocType" : "PASSPORT"
}, {
"id" : "60cb2ada44894a000169bb34",
"ts" : "2021-06-17 10:58:34",
"trackingData" : {
"ip" : "104.248.138.23",
"xClientId" : "API"
},
"ipInfo" : {
"ip" : "104.248.138.23",
"countryCode2" : "DE",
"countryCode3" : "DEU",
"city" : "Frankfurt am Main",
"zipCode" : "60313",
"lat" : 50.1188,
"lon" : 8.6843,
"asn" : 14061,
"asnOrg" : "DIGITALOCEAN-ASN",
"riskyAsn" : true
},
"userAgentInfo" : {
"uaPlatform" : "Unknown",
"uaBrowser" : "Guzzle Http Client",
"uaDeviceType" : "Unknown",
"uaBrowserVersion" : "0.0"
},
"activity" : "user:created:applicant",
"subjectName" : "APP-Token Api",
"country" : "SWE"
} ]
}
# Generating applicant pdf report
Allows generating and fetching Applicant Summary report in pdf format.
Make sure to get a response from the first request before you call another one.
GET /resources/applicants/{applicantId}/summary/report?report={reportType}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
reportType | Integer | Yes | Type of the report. Depends on the type of an applicant can be applicantReport for individuals or companyReport for companies. |
lang | String | Yes | Language of the report (en /pt ). |
# RESPONSE
Binary content representing a pdf report.
# Example request:
curl -X GET \
'https://api.sumsub.com/resources/applicants/60f6f9ab7bbfc20001eca91d/summary/report?report=applicantReport&lang=en'
# Getting the list of available levels
To get the full structured view of applicant levels list, via API, you should perform the following request.
GET /resources/applicants/-/levels
# RESPONSE
JSON representation of the applicant levels list with its settings.
# Example request:
curl -X GET \
'https://api.sumsub.com/resources/applicants/-/levels'
# Example response:
{
"list" : {
"items" : [ {
"id" : "608febf45814660009e22a14",
"name" : "basic-kyc-level",
"requiredIdDocs" : {
"docSets" : [ {
"idDocSetType" : "IDENTITY",
"types" : [ "ID_CARD", "DRIVERS", "PASSPORT", "RESIDENCE_PERMIT" ],
"subTypes" : [ "FRONT_SIDE", "BACK_SIDE" ]
}, {
"idDocSetType" : "SELFIE",
"types" : [ "SELFIE" ],
"videoRequired" : "passiveLiveness"
} ]
},
"websdkFlowId" : "608febf45814660009e22a16",
"msdkFlowId" : "608febf45814660009e22a18",
"createdAt" : "2021-05-03 12:26:28",
"createdBy" : "Service",
"modifiedAt" : "2021-09-08 09:18:53"
} ],
"totalItems" : 1
}
}
# Changing applicant data
If you want to change an applicant's data, you can issue a PATCH
request instead of creating a new applicant, which is highly discouraged. This method, patches the fields in the info
key of the applicant.
PATCH /resources/applicants/{applicantId}/info
# REQUEST ARGUMENTS
The body must contain only those fields that you intend to change. Null fields will be ignored. If you want to unset some fields, provide these in the unsetFields
query parameter. Check the info
attribute above for the list of supported fields.
Name | Type | Required | Description |
---|---|---|---|
#{body} | Object | Yes | Field in the info attribute that should be changed. |
applicantId | String | Yes | Applicant ID. |
unsetFields | String | No | Comma-separated list of fields to unset. |
# RESPONSE
A patched info
entity endpoint could be quite damaging if misused, please check that it returns expected results on the test environment — it's a client's responsibility to treat their applicants well 😃
# Example request
curl -X PATCH \
'https://api.sumsub.com/resources/applicants/5b76df770a975a1404cbcb60/info' \
-H 'Content-Type: application/json' \
-d '{
"firstName" : "Andrew",
"dob" : "1990-05-01"
}'
# Example response
{
"firstName": "Andrew",
"dob": "1990-05-01",
"country": "GBR",
"idDocs": [
{
"idDocType": "PASSPORT",
"country": "GBR",
"number": ""
},
{
"idDocType": "DRIVERS",
"country": "GBR"
}
]
}
# Getting liveness result
If you'd like to get result of the liveness check of a particular applicant, this method may help.
GET /resources/checks/latest?type=FACE_LIVELINESS&applicantId={applicantId}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
# RESPONSE
Contains a list of Liveness checks.
Name | Type | Optional | Description |
---|---|---|---|
checks | Array of Objects | No | List of objects containing results of liveness check. |
Name | Type | Optional | Description | Available values |
---|---|---|---|---|
answer | String | No | Answer on overall Liveness check | GREEN/YELLOW/RED/ERROR. |
id | String | No | Liveness check ID. |
# Example request
curl -X GET \
'https://api.sumsub.com/resources/checks/latest?type=FACE_LIVELINESS&applicantId=5b76df770a975a1404cbcb60'
# Example response
{
"checks": [
{
"answer": "GREEN",
"checkType": "FACE_LIVELINESS",
"createdAt": "2023-02-17 10:06:44",
"id": "800c2988-15ab-4b26-a633-9fef4b16d7b6"
}
]
}
# Getting facemap video from liveness check result
If you are interested in receiving a video snippet of liveness check result, you should use this method.
GET /resources/applicants/{applicantId}/info/facemap/video?checkId={checkId}
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant ID. |
checkId | String | No | Liveness check ID (see above). |
# RESPONSE
Binary content representing a video (video/mp4
format in the most cases). The Content-Type
response header precisely describes the response mime-type.
If only one frame or less were captured during liveness check, this method will return an exception
# Example request
curl -X GET \
'https://api.sumsub.com/resources/applicants/5b76df770a975a1404cbcb60/info/facemap/video?checkId=800c2988-15ab-4b26-a633-9fef4b16d7b6'
# Getting current similar applicants
Using this method you can fetch a list of entities with similar data or face of one particular applicant.
GET /resources/applicants/{applicantId}/similar/byTextAndFace
If you'd like to get a list of similar applicant found only by text info, you can call
GET /resources/applicants/{applicantId}/similar/byText
Please, make sure to consider rate limiter factor for these endpoints:
/similar/byTextAndFace
- 7 requests per 10 seconds/similar/byText
- 10 requests per 10 seconds
# REQUEST ARGUMENTS
Name | Type | Required | Description |
---|---|---|---|
applicantId | String | Yes | Applicant id |
# RESPONSE
Name | Type | Description |
---|---|---|
applicant | Object | Contains data of a similar applicant |
matchedFields | Array | Array of matched applicant data fields (e.g. info.lastName ) |
exactMatch | Boolean | true if the data matches exactly |
blacklisted | Boolean | Indicates if user is in our blocklist or not |
types | Array | The match type (text - based on textual data, image - based on face match) |
# Example request
curl -X GET \
'https://api.sumsub.com/resources/applicants/5eea3f5204f940217bcbc03d/byTextAndFace'
# Example response
{
"similarApplicants": [
{
"applicant": {
"id": "5ee8ff2453d48655913daa60",
"createdAt": "2020-06-16 17:19:32",
"key": "VMQFJZRXEVHTQWF",
"clientId": "coolclientid",
"inspectionId": "5ee8ff2453d48655913daa61",
"externalUserId": "032ebe8b-957d-48b5-8faf-5156bfc8924e",
"info": {
"firstName": "JOHN",
"firstNameEn": "JOHN",
"middleName": "SMITH",
"middleNameEn": "SMITH",
"dob": "1998-04-21",
"country": "GBR",
"idDocs": [
{
"idDocType": "PASSPORT",
"country": "PHL",
"firstName": "JOHN",
"firstNameEn": "JOHN",
"middleName": "SMITH",
"middleNameEn": "SMITH",
"issuedDate": "2018-01-15",
"validUntil": "2028-01-14",
"number": "P5614709A"
}
]
},
"requiredIdDocs": {
"docSets": [
{
"idDocSetType": "IDENTITY",
"types": [
"PASSPORT",
"DRIVERS",
"ID_CARD"
]
},
{
"idDocSetType": "SELFIE",
"types": [
"SELFIE"
]
}
]
},
"review": {
"elapsedSincePendingMs": 217181,
"elapsedSinceQueuedMs": 182368,
"reprocessing": true,
"createDate": "2020-06-18 19:09:54+0000",
"reviewDate": "2020-06-18 19:13:31+0000",
"startDate": "2020-06-18 19:10:29+0000",
"reviewResult": {
"reviewAnswer": "GREEN"
},
"reviewStatus": "completed",
"priority": 0,
"autoChecked": false
},
"type": "individual"
},
"matchedFields": [
"info.lastName",
"info.firstName",
"info.idDocs.PASSPORT"
],
"exactMatch": true,
"blacklisted": false,
"types": [
"text",
"image"
]
},
{
"applicant": {
"id": "5eebf94404f940217bdfb336",
"createdAt": "2020-06-18 23:31:16",
"key": "VMQFJZRXEVHTQWF",
"clientId": "coolclientid",
"inspectionId": "5eebf94404f940217bdfb337",
"externalUserId": "231aa876-91e2-4dbb-98c3-ce39a6aa8ace",
"info": {
"country": "GBR",
"idDocs": [
{
"idDocType": "PASSPORT",
"country": "PHL",
"firstName": "JOHN SMITH",
"firstNameEn": "JOHN SMITH",
"issuedDate": "2018-01-15",
"issueAuthority": "DFA MANILA",
"validUntil": "2028-01-14",
"number": "P5614709A",
"dob": "1998-04-21"
}
]
},
"applicantPlatform": "Unknown",
"requiredIdDocs": {
"docSets": [
{
"idDocSetType": "IDENTITY",
"types": [
"PASSPORT",
"DRIVERS",
"ID_CARD"
]
},
{
"idDocSetType": "SELFIE",
"types": [
"SELFIE"
]
}
]
},
"review": {
"elapsedSincePendingMs": 307881,
"elapsedSinceQueuedMs": 150777,
"reprocessing": true,
"createDate": "2020-06-18 23:32:16+0000",
"reviewDate": "2020-06-18 23:37:24+0000",
"startDate": "2020-06-18 23:34:53+0000",
"reviewResult": {
"moderationComment": "Your application was rejected because you have already submitted your documents on another account. Please, contact our support team: [email protected]",
"clientComment": "Duplicate.",
"reviewAnswer": "RED",
"rejectLabels": [
"REGULATIONS_VIOLATIONS",
"DUPLICATE"
],
"reviewRejectType": "FINAL"
},
"reviewStatus": "completed",
"priority": 0,
"autoChecked": false
},
"type": "individual"
},
"matchedFields": [
"info.idDocs.PASSPORT"
],
"exactMatch": true,
"blacklisted": false,
"types": [
"text",
"image"
]
},
{
"applicant": {
"id": "5ed9d6a8206111453d4d3f81",
"createdAt": "2020-06-05 05:22:48",
"key": "VMQFJZRXEVHTQWF",
"clientId": "coolclientid",
"inspectionId": "5ed9d6a8206111453d4d3f82",
"externalUserId": "a6362071-456b-4b64-ae74-a12a372a14c9",
"info": {
"firstName": "John",
"firstNameEn": "John",
"lastName": "Smith",
"lastNameEn": "Smith",
"dob": "1990-12-25",
"country": "CAN",
"idDocs": [
{
"idDocType": "ID_CARD",
"country": "CAN",
"firstName": "John",
"firstNameEn": "John ",
"lastName": "Smith",
"lastNameEn": "Smith",
"issuedDate": "2018-08-18",
"validUntil": "2020-08-18",
"number": "6446244946",
"dob": "1990-12-25"
}
]
},
"requiredIdDocs": {
"docSets": [
{
"idDocSetType": "IDENTITY",
"types": [
"PASSPORT",
"DRIVERS",
"ID_CARD"
]
},
{
"idDocSetType": "SELFIE",
"types": [
"SELFIE"
]
}
]
},
"review": {
"elapsedSincePendingMs": 7442550,
"elapsedSinceQueuedMs": 1082209,
"reprocessing": true,
"createDate": "2020-06-07 07:56:57+0000",
"reviewDate": "2020-06-07 10:00:59+0000",
"startDate": "2020-06-07 09:42:57+0000",
"reviewResult": {
"reviewAnswer": "GREEN"
},
"reviewStatus": "completed",
"priority": 0,
"autoChecked": false
},
"type": "individual"
},
"matchedFields": [],
"exactMatch": false,
"blacklisted": false,
"types": [
"text",
"image"
]
}
],
"totalCnt": 3
}