Without OCR Verification
Every verification request received from the end-user or Shufti Pro customer is assessed on certain parameters (discussed in detail below) by Shufti Pro’s intelligent system. These parameters allow Shufti Pro to:
- Identify its customers.
- Check the authenticity of the client’s credentials.
- Read the client’s data.
- Decide what information is being sent to perform a certain verification.

Verification Request
On-site verification means that Shufti Pro will be interacting directly with end-user and will be responsible for data collection in order to perform Identity verification. Shufti Pro customer will only be notified about the verification status via Shufti Pro Back Office.
Shufti Pro collects the image or video proofs from end-users. In the verification request, Shufti Pro customer specifies the keys for the parameters to be verified. Shufti Pro extracts the required information from the provided document and then the verification form is automatically filled with the extracted information. This reduces the manual work for the end-user. Next, Shufti Pro’s intelligently driven system verifies the provided documents for authenticity. Please consult this Document for Onsite with OCR verifications.
OCR is offered on the following services: (Document and Address) but Shufti Pro customers can also avail other non-OCR services such as Face & Phone Verification along with these OCR services.
Shufti Pro offers following services in On-site verification: (Face, Document, Document Two, Address, Consent, Phone, Email Verification, Background Checks, and Enhance Due Diligence)
- Http
- Javascript
- PHP
- Python
- Ruby
- Java
- cURL
- C#
- Go
//POST / HTTP/1.1
//Host: api.shuftipro.com
//Content-Type: application/json
//Authorization: Basic NmI4NmIyNzNmZjM0ZmNlMTlkNmI4WJRTUxINTJHUw==
//replace "Basic" with "Bearer in case of Access Token"
{
"reference" : "5667456341",
"callback_url" : "http://www.example.com/",
"email" : "[email protected]",
"country" : "GB",
"language" : "EN",
"verification_mode" : "any",
"ttl" : 60,
"face": {
"proof": ""
},
"document" : {
"proof" : "",
"additional_proof" : "",
"supported_types" : ["id_card","driving_license","passport"],
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"dob" : "1980-11-12",
"age" : 18,
"issue_date" : "1990-09-07",
"expiry_date" : "2050-10-10",
"gender" : "M",
"document_number" : "0989-7752-6291-2387",
"allow_offline" : "1",
"allow_online" : "1"
},
"address" : {
"proof" : "",
"supported_types" : ["id_card","bank_statement"],
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"full_address" : "3339 Maryland Avenue, Largo, Florida",
"address_fuzzy_match":"1",
"issue_date" : "1990-09-07"
},
"consent":{
"proof" : "",
"supported_types" : ["handwritten","printed"],
"text" : "My name is John Doe and I authorise this transaction of $100/- Date: July 15, 2020",
"allow_offline" : "1",
"allow_online" : "1"
},
"phone": {
"phone_number" : "+4400000000",
"random_code" : "23234",
"text" : "Your verification code is 23234"
},
"email_verify": {
"email" : "[email protected]"
},
"background_checks": {
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"dob" : "1980-11-12"
}
}
let payload = {
reference : `SP_REQUEST_${Math.random()}`,
callback_url : "https://yourdomain.com/profile/sp-notify-callback",
redirect_url : "https://yourdomain.com/site/sp-redirect",
country : "GB",
language : "EN",
verification_mode : "any",
ttl : 60,
}
//Use this key if you want to perform face verification
payload['face'] = {
proof : "",
allow_offline : "1",
};
//Use this key if you want to perform document verification
payload['document'] = {
name : {
first_name : 'Your first name',
middle_name : 'Your middle name',
last_name : 'You last name',
fuzzy_match : '1'
},
proof : '',
additional_proof : '',
dob : '1992-10-10',
age : 18,
document_number : '2323-5629-5465-9990',
expiry_date : '2025-10-10',
issue_date : '2015-10-10',
allow_offline : '1',
allow_online : '1',
supported_types : ['id_card','passport'],
gender : ''
}
//Use this key if you want to perform address verification
payload['address'] = {
name : {
first_name : 'Your first name',
middle_name : 'Your middle name',
last_name : 'You last name',
fuzzy_match : '1'
},
proof : '',
full_address : 'your address',
address_fuzzy_match : '1',
issue_date : '2015-10-10',
supported_types : ['utility_bill','passport','bank_statement']
}
//Use this key if you want to perform background checks verification
payload['background_checks'] = {
name : {
first_name : 'Your first name',
middle_name : 'Your middle name',
last_name : 'You last name',
},
dob : '1994-01-01',
}
//Use your Shufti Pro account client id and secret key
var token = btoa("YOUR_CLIENT_ID:YOUR_SECRET_KEY"); //BASIC AUTH TOKEN
// if Access Token
//var token = "YOUR_ACCESS_TOKEN";
//Dispatch request via fetch API or with whatever else which best suits for you
fetch('https://api.shuftipro.com/',
{
method : 'post',
headers : {
'Accept' : 'application/json',
'Content-Type' : 'application/json',
'Authorization' : 'Basic ' +token // if access token then replace "Basic" with "Bearer"
},
body: JSON.stringify(payload)
})
.then(function(response) {
return response.json();
}).then(function(data) {
if (data.event && data.event === 'request.pending') {
createIframe(data.verification_url)
}
});
//Method used to create an Iframe
function createIframe(src) {
let iframe = document.createElement('iframe');
iframe.style.position = 'fixed';
iframe.id = 'shuftipro-iframe';
iframe.name = 'shuftipro-iframe';
iframe.allow = "camera";
iframe.src = src;
iframe.style.top = 0;
iframe.style.left = 0;
iframe.style.bottom = 0;
iframe.style.right = 0;
iframe.style.margin = 0;
iframe.style.padding = 0;
iframe.style.overflow = 'hidden';
iframe.style.border = "none";
iframe.style.zIndex = "2147483647";
iframe.width = "100%";
iframe.height = "100%";
iframe.dataset.removable = true;
document.body.appendChild(iframe);
}
<?php
$url = 'https://api.shuftipro.com/';
//Your Shufti Pro account Client ID
$client_id = 'YOUR-CLIENT-ID';
//Your Shufti Pro account Secret Key
$secret_key = 'YOUR-SECRET-KEY';
//OR Access Token
//$access_token = 'YOUR-ACCESS-TOKEN';
$verification_request = [
'reference' => 'ref-'.rand(4,444).rand(4,444),
'country' => 'GB',
'language' => 'EN',
'email' => '[email protected]',
'callback_url' => 'https://yourdomain.com/profile/notifyCallback',
'verification_mode' => 'any',
'ttl' => 60,
];
//Use this key if you want to perform face verification
$verification_request['face'] = [
'proof' => '',
'allow_offline' => '1',
'allow_online' => '1',
];
//Use this key if you want to perform document verification
$verification_request['document'] =[
'name' => [
'first_name' => 'Your first name',
'middle_name' => 'Your middle name',
'last_name' => 'You last name',
'fuzzy_match' => '1'
],
'proof' => '',
'additional_proof' => '',
'dob' => '1992-10-10',
'age' => 18,
'document_number' => '2323-5629-5465-9990',
'expiry_date' => '2025-10-10',
'issue_date' => '2015-10-10',
'allow_offline' => '1',
'allow_online' => '1',
'supported_types' => ['id_card','passport'],
'gender' => ''
];
//Use this key if you want to perform address verification
$verification_request['address'] = [
'name' => [
'first_name' => 'Your first name',
'middle_name' => 'Your middle name',
'last_name' => 'You last name',
'fuzzy_match' => '1'
],
'proof' => '',
'full_address' => 'your address',
'address_fuzzy_match' => '1',
'issue_date' => '2015-10-10',
'supported_types' => ['utility_bill','passport','bank_statement']
];
//Use this key if you want to perform consent verification
$verification_request['consent'] =[
'proof' => '',
'text' => 'some text for consent verification',
'supported_types' => ['handwritten'],
'allow_offline' => '1',
'allow_online' => '1',
];
//Use this key if you want to perform phone verification
$verification_request['phone'] =[
'phone_number' => '+1378746734',
'random_code' => '9977',
'text' => 'Your verification code is 9977'
];
//Use this key if you want to perform email verification
$verification_request['email_verify'] =[
'email' => '[email protected]'
];
//Use this key if you want to perform aml/background checks verification
$verification_request['background_checks'] = [
'name' => [
'first_name' => 'Your first name',
'middle_name' => 'Your middle name',
'last_name' => 'You last name'
],
'dob' => '1992-10-10',
];
$auth = $client_id.":".$secret_key; // remove this in case of Access Token
$headers = ['Content-Type: application/json'];
// if using Access Token then add it into headers as mentioned below otherwise remove access token
// array_push($headers, 'Authorization : Bearer ' . $access_token);
$post_data = json_encode($verification_request);
//Calling Shufti Pro request API using curl
$response = send_curl($url, $post_data, $headers, $auth); // remove $auth in case of Access Token
//Get Shufti Pro API Response
$response_data = $response['body'];
//Get Shufti Pro Signature
$exploded = explode("\n", $response['headers']);
// Get Signature Key from Hearders
$sp_signature = null;
foreach ($exploded as $key => $value) {
if (strpos($value, 'signature: ') !== false || strpos($value, 'Signature: ') !== false) {
$sp_signature=trim(explode(':', $exploded[$key])[1]);
break;
}
}
//Calculating signature for verification
// calculated signature functionality cannot be implement in case of access token
$calculate_signature = hash('sha256',$response_data.$secret_key);
$decoded_response = json_decode($response_data,true);
$event_name = $decoded_response['event'];
if($event_name == 'request.pending'){
if($sp_signature == $calculate_signature){
$verification_url = $decoded_response['verification_url'];
echo "Verification url :" . $verification_url;
}else{
echo "Invalid signature :" . $response_data;
}
}else{
echo "Error :" . $response_data;
}
function send_curl($url, $post_data, $headers, $auth){ // remove $auth in case of Access Token
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERPWD, $auth); // remove this in case of Access Token
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); // remove this in case of Access Token
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$html_response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($html_response, 0, $header_size);
$body = substr($html_response, $header_size);
curl_close($ch);
return ['headers' => $headers,'body' => $body];
}
?>
import requests, base64, json, hashlib
from random import randint
'''
Python 2
--------
import urllib2
Python 3
--------
import urllib.request
urllib.request.urlopen(url).read()
'''
url = 'https://api.shuftipro.com/'
callback_url = 'https://yourdomain.com/profile/notifyCallback'
# Your Shufti Pro account Client ID
client_id = 'YOUR-CLIENT-ID'
# Your Shufti Pro account Secret Key
secret_key = 'YOUR-SECRET-KEY'
# OR Access Token
# access_token = 'YOUR-ACCESS-TOKEN';
verification_request = {
'reference' : 'ref-{}{}'.format(randint(1000, 9999), randint(1000, 9999)),
'country' : 'GB',
'language' : 'EN',
'email' : '[email protected]',
'callback_url' : callback_url,
'verification_mode' : 'any',
'ttl' : 60,
}
# Use this key if want to perform face verification
verification_request['face'] = {}
# Use this key if want to perform document verification
verification_request['document'] = {
'name' : {
'first_name' : 'Your first name',
'middle_name' : 'Your middle name',
'last_name' : 'Your last name',
'fuzzy_match' : '1'
},
'proof' : '',
'additional_proof' : '',
'dob' : '1992-10-10',
'age' : 18,
'document_number' : '2323-5629-5465-9990',
'expiry_date' : '2025-10-10',
'issue_date' : '2015-10-10',
'allow_offline' : '1',
'allow_online' : '1',
'supported_types' : ['id_card','passport'],
'gender' : ''
}
# Use this key if want to perform address verification
verification_request['address'] = {
'name' : {
'first_name' : 'Your first name',
'middle_name' : 'Your middle name',
'last_name' : 'Your last name',
'fuzzy_match' : '1'
},
'proof' : '',
'full_address' : 'your address',
'address_fuzzy_match' : '1',
'issue_date' : '2015-10-10',
'supported_types' : ['utility_bill','passport','bank_statement']
}
# Use this key if want to perform consent verification
verification_request['consent'] = {
'proof' : '',
'text' : 'some text for consent verification',
'supported_type': ['handwritten'],
'allow_offline' : '1',
'allow_online' : '1',
}
# Use this key if want to perform phone verification
verification_request['phone'] = {
'phone_number' : '+1378746734',
'random_code' : '9977',
'text' : 'Your verification code is 9977'
}
# Use this key if want to perform email verification
verification_request['email_verify'] = {
'email' : '[email protected]'
}
# Calling Shufti Pro request API using python requests
auth = '{}:{}'.format(client_id, secret_key)
b64Val = base64.b64encode(auth.encode()).decode()
# if access token
# b64Val = access_token
# replace "Basic with "Bearer" in case of Access Token
response = requests.post(url,
headers={"Authorization": "Basic %s" % b64Val, "Content-Type": "application/json"},
data=json.dumps(verification_request))
# Calculating signature for verification
# calculated signature functionality cannot be implement in case of access token
calculated_signature = hashlib.sha256('{}{}'.format(response.content.decode(), secret_key).encode()).hexdigest()
# Get Shufti Pro Signature
sp_signature = response.headers.get('Signature','')
# Convert json string to json object
json_response = json.loads(response.content)
# Get event returned
event_name = json_response['event']
print (json_response)
if event_name == 'request.pending':
if sp_signature == calculated_signature:
verification_url = json_response['verification_url']
print ('Verification URL: {}'.format(verification_url))
else:
print ('Invalid signature: {}'.format(response.content))
require 'uri'
require 'net/http'
require 'base64'
require 'json'
url = URI("https://api.shuftipro.com/")
# Your Shufti Pro account Client ID
CLIENT_ID = "YOUR-CLIENT-ID"
# Your Shufti Pro account Secret Key
SECRET_KEY = "YOUR-SECRET-KEY"
# if access token
# ACCESS_TOKEN = "YOUR-ACCESS-TOKEN"
verification_request = {
reference: "Ref-"+ (0...8).map { (65 + rand(26)).chr }.join,
callback_url: "https://yourdomain.com/profile/notifyCallback",
email: "[email protected]",
country: "GB",
language: "EN",
redirect_url: "http://www.example.com",
verification_mode: "any",
ttl: 60,
}
# Use this key if you want to perform document verification with OCR
verification_request["document"] = {
supported_types: ["id_card","driving_license","passport"],
name: {
first_name: "Johon",
last_name: "Livone"
},
proof: "",
additional_proof: "",
dob: "1990-10-10",
age: 18,
issue_date: "2015-10-10",
expiry_date: "2025-10-10",
document_number: "1234-1234-ABC",
allow_offline: "1",
allow_online: "1",
gender: ''
}
# Use this key if you want to perform address verification with OCR
verification_request["address"] = {
supported_types: ["id_card","bank_statement"],
name: {
first_name: "Johon",
last_name: "Livone"
},
issue_date: "2015-10-10",
full_address: "Candyland Avenue",
address_fuzzy_match: "1"
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
header_auth = Base64.strict_encode64("#{CLIENT_ID}:#{SECRET_KEY}")
# if Access Token
# header_auth = ACCESS_TOKEN
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic #{header_auth}" # replace "Basic" with "Bearer" in case of access token
request.body = verification_request.to_json
response = http.request(request)
response_headers = response.instance_variable_get("@header")
response_data = response.read_body
sp_signature = !(response_headers['signature'].nil?) ? response_headers['signature'].join(',') : ""
# calculated signature functionality cannot be implement in case of access token
calculated_signature = Digest::SHA256.hexdigest response_data + SECRET_KEY
if sp_signature == calculated_signature
puts response_data
else
puts "Invalid signature"
end
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import javax.net.ssl.HttpsURLConnection;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.shuftipro.com/";
String CLIENT_ID = "CLIENT_ID";
String SECRET_KEY = "SECRET_KEY";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
// Add request header
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
String basicAuth = "Basic " + Base64.getEncoder().encodeToString((CLIENT_ID + ":" + SECRET_KEY).getBytes(StandardCharsets.UTF_8));
con.setRequestProperty("Authorization", basicAuth);
String payload = "{\n \"reference\": \"5667456341\",\n \"callback_url\": \"http://www.example.com/\",\n \"email\": \"[email protected]\",\n \"country\": \"GB\",\n \"language\": \"EN\",\n \"verification_mode\": \"any\",\n \"ttl\": 60,\n \"face\": {\n \"proof\": \"\"\n },\n \"document\": {\n \"proof\": \"\",\n \"additional_proof\": \"\",\n \"supported_types\": [\n \"id_card\",\n \"driving_license\",\n \"passport\"\n ],\n \"name\": {\n \"first_name\": \"John\",\n \"middle_name\": \"Middleman\",\n \"last_name\": \"Doe\"\n },\n \"dob\": \"1980-11-12\",\n \"age\": 18,\n \"issue_date\": \"1990-09-07\",\n \"expiry_date\": \"2050-10-10\",\n \"gender\": \"M\",\n \"document_number\": \"0989-7752-6291-2387\",\n \"allow_offline\": \"1\",\n \"allow_online\": \"1\"\n },\n \"address\": {\n \"proof\": \"\",\n \"supported_types\": [\n \"id_card\",\n \"bank_statement\"\n ],\n \"name\": {\n \"first_name\": \"John\",\n \"middle_name\": \"Middleman\",\n \"last_name\": \"Doe\"\n },\n \"full_address\": \"3339 Maryland Avenue, Largo, Florida\",\n \"address_fuzzy_match\": \"1\",\n \"issue_date\": \"1990-09-07\"\n },\n \"consent\": {\n \"proof\": \"\",\n \"supported_types\": [\n \"handwritten\",\n \"printed\"\n ],\n \"text\": \"My name is John Doe and I authorise this transaction of $100/- Date: July 15, 2020\",\n \"allow_offline\": \"1\",\n \"allow_online\": \"1\"\n },\n \"phone\": {\n \"phone_number\": \"+4400000000\",\n \"random_code\": \"23234\",\n \"text\": \"Your verification code is 23234\"\n },\n \"background_checks\": {\n \"name\": {\n \"first_name\": \"John\",\n \"middle_name\": \"Middleman\",\n \"last_name\": \"Doe\"\n },\n \"dob\": \"1980-11-12\"\n }\n}";
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(payload);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Payload : " + payload);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
System.out.println(in.toString());
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Print the response
System.out.println(response.toString());
}
}
curl --location --request POST 'https://api.shuftipro.com' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic NmI4NmIyNzNmZjM0ZmNlMTlkNmI4WJRTUxINTJHUw==' \
--data-raw '{
"reference" : "5667456341",
"callback_url" : "http://www.example.com/",
"email" : "[email protected]",
"country" : "GB",
"language" : "EN",
"verification_mode" : "any",
"ttl" : 60,
"face": {
"proof": ""
},
"document" : {
"proof" : "",
"additional_proof" : "",
"supported_types" : ["id_card","driving_license","passport"],
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"dob" : "1980-11-12",
"age" : 18,
"issue_date" : "1990-09-07",
"expiry_date" : "2050-10-10",
"gender" : "M",
"document_number" : "0989-7752-6291-2387",
"allow_offline" : "1",
"allow_online" : "1"
},
"address" : {
"proof" : "",
"supported_types" : ["id_card","bank_statement"],
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"full_address" : "3339 Maryland Avenue, Largo, Florida",
"address_fuzzy_match":"1",
"issue_date" : "1990-09-07"
},
"consent":{
"proof" : "",
"supported_types" : ["handwritten","printed"],
"text" : "My name is John Doe and I authorise this transaction of $100/- Date: July 15, 2020",
"allow_offline" : "1",
"allow_online" : "1"
},
"phone": {
"phone_number" : "+4400000000",
"random_code" : "23234",
"text" : "Your verification code is 23234"
},
"email_verify": {
"email" : "[email protected]"
},
"background_checks": {
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"dob" : "1980-11-12"
}
}
'
var client = new RestClient("https://api.shuftipro.com");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Basic NmI4NmIyNzNmZjM0ZmNlMTlkNmI4WJRTUxINTJHUw==");
var body = @"{" + "\n" +
@" ""reference"" : ""5667456341""," + "\n" +
@" ""callback_url"" : ""http://www.example.com/""," + "\n" +
@" ""email"" : ""[email protected]""," + "\n" +
@" ""country"" : ""GB""," + "\n" +
@" ""language"" : ""EN""," + "\n" +
@" ""verification_mode"" : ""any""," + "\n" +
@" ""ttl"" : 60," + "\n" +
@" ""face"": {" + "\n" +
@" ""proof"": """"" + "\n" +
@" }," + "\n" +
@" " + "\n" +
@" ""document"" : {" + "\n" +
@" ""proof"" : """"," + "\n" +
@" ""additional_proof"" : """"," + "\n" +
@" ""supported_types"" : [""id_card"",""driving_license"",""passport""]," + "\n" +
@" ""name"" : {" + "\n" +
@" ""first_name"" : ""John""," + "\n" +
@" ""middle_name"" : ""Middleman""," + "\n" +
@" ""last_name"" : ""Doe""" + "\n" +
@" }," + "\n" +
@" ""dob"" : ""1980-11-12""," + "\n" +
@" ""age"" : 18," + "\n" +
@" ""issue_date"" : ""1990-09-07"", " + "\n" +
@" ""expiry_date"" : ""2050-10-10""," + "\n" +
@" ""gender"" : ""M""," + "\n" +
@" ""document_number"" : ""0989-7752-6291-2387""," + "\n" +
@" ""allow_offline"" : ""1""," + "\n" +
@" ""allow_online"" : ""1""" + "\n" +
@" }," + "\n" +
@" " + "\n" +
@" ""address"" : {" + "\n" +
@" ""proof"" : """"," + "\n" +
@" ""supported_types"" : [""id_card"",""bank_statement""]," + "\n" +
@" ""name"" : {" + "\n" +
@" ""first_name"" : ""John""," + "\n" +
@" ""middle_name"" : ""Middleman""," + "\n" +
@" ""last_name"" : ""Doe""" + "\n" +
@" }," + "\n" +
@" ""full_address"" : ""3339 Maryland Avenue, Largo, Florida""," + "\n" +
@" ""address_fuzzy_match"":""1""," + "\n" +
@" ""issue_date"" : ""1990-09-07""" + "\n" +
@" }," + "\n" +
@" " + "\n" +
@" ""consent"":{" + "\n" +
@" ""proof"" : """"," + "\n" +
@" ""supported_types"" : [""handwritten"",""printed""]," + "\n" +
@" ""text"" : ""My name is John Doe and I authorise this transaction of $100/- Date: July 15, 2020""," + "\n" +
@" ""allow_offline"" : ""1""," + "\n" +
@" ""allow_online"" : ""1""" + "\n" +
@" }," + "\n" +
@" " + "\n" +
@" ""phone"": {" + "\n" +
@" ""phone_number"" : ""+4400000000""," + "\n" +
@" ""random_code"" : ""23234""," + "\n" +
@" ""text"" : ""Your verification code is 23234""" + "\n" +
@" }," + "\n" +
@"" + "\n" +
@" ""email_verify"": {" + "\n" +
@" ""email"" : ""[email protected]""" + "\n" +
@" }," + "\n" +
@"" + "\n" +
@" ""background_checks"": {" + "\n" +
@" ""name"" : {" + "\n" +
@" ""first_name"" : ""John""," + "\n" +
@" ""middle_name"" : ""Middleman""," + "\n" +
@" ""last_name"" : ""Doe""" + "\n" +
@" }," + "\n" +
@" ""dob"" : ""1980-11-12""" + "\n" +
@" }" + "\n" +
@"}" + "\n" +
@"" + "\n" +
@"";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.shuftipro.com"
method := "POST"
payload := strings.NewReader(`{
"reference" : "5667456341",
"callback_url" : "http://www.example.com/",
"email" : "[email protected]",
"country" : "GB",
"language" : "EN",
"verification_mode" : "any",
"ttl" : 60,
"face": {
"proof": ""
},
"document" : {
"proof" : "",
"additional_proof" : "",
"supported_types" : ["id_card","driving_license","passport"],
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"dob" : "1980-11-12",
"age" : 18,
"issue_date" : "1990-09-07",
"expiry_date" : "2050-10-10",
"gender" : "M",
"document_number" : "0989-7752-6291-2387",
"allow_offline" : "1",
"allow_online" : "1"
},
"address" : {
"proof" : "",
"supported_types" : ["id_card","bank_statement"],
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"full_address" : "3339 Maryland Avenue, Largo, Florida",
"address_fuzzy_match":"1",
"issue_date" : "1990-09-07"
},
"consent":{
"proof" : "",
"supported_types" : ["handwritten","printed"],
"text" : "My name is John Doe and I authorise this transaction of $100/- Date: July 15, 2020",
"allow_offline" : "1",
"allow_online" : "1"
},
"phone": {
"phone_number" : "+4400000000",
"random_code" : "23234",
"text" : "Your verification code is 23234"
},
"email_verify": {
"phone_number" : "[email protected]"
},
"background_checks": {
"name" : {
"first_name" : "John",
"middle_name" : "Middleman",
"last_name" : "Doe"
},
"dob" : "1980-11-12"
}
}
`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Basic NmI4NmIyNzNmZjM0ZmNlMTlkNmI4WJRTUxINTJHUw==")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Parameters | Description |
---|---|
face | Required: No Type: object This service key corresponds to Face Verification Service in which unique facial features of end-user are identified and verified in real-time. Example 1 { "proof" : ""} for more details Face Service |
document | Required: No Type: object This service key corresponds to Document verification service in which the authenticity of identity documents submitted by end-users is checked. Once verified, these identity documents serve as proof of end-user’s identity. Example 1 { "document_number": "ABC1234XYZ098", "issue_date": "2015-12-31", "expiry_date": "2025-12-31", "dob": "1990-12-31", "name": { "first_name" : "John", "last_name" : "Doe" } , "supported_types": ["id_card", "credit_or_debit_card", "passport"]} for more details Document Service |
address | Required: No Type: object This service key corresponds to Address Verification service in which the authenticity of an end-user's provided address is checked with the help of an authentic Identity document, Utility bill or bank statement Example 1 {"supported_types" : ["id_card","bank_statement"],"name" : {"first_name" : "John", "last_name" : "Doe" } ,"full_address": "Candyland Avenue" } for more details Address Service |
consent | Required: No Type: object This service key corresponds to Consent Verification services in which the consent provided by end-user for a certain action is cross-checked with the help of a handwritten document or customized printed document Example 1 {"proof" : "","text" : "Hi, I am giving my consent"} for more details Consent Service |
phone | Required: No Type: object This service key corresponds to Phone Verification service of Shufti Pro. A customized code is sent to end-user on their phone number, that is sent back by end-user to verify their identity. Example 1 {"phone_number" : "+00000000000000","random_code" : "12345","text" : "Your Shufti Pro verification code is "} for more details Phone Service |
email_verify | Required: No Type: object This service key corresponds to Email Verification service of Shufti Pro. A code is sent to end-user on their given email address, that is sent back by end-user to verify their identity. Example 1 {"email" : ""} for more details Email Verification Service |
background_checks | Required: No Type: object This service key corresponds to AML Screening service offered by Shufti Pro. An AML background check is performed for every end-user in this service against a financial risk database compiled by Shufti Pro Example 1 {"name" : {"first_name" : "John", "last_name" : "Doe"}, "dob" : "1990-12-31" } for more details Background Checks service |
If you are using iFrames on your web page, you need to add allow = “camera” attribute to enable the camera.
<iframe src="" id="shuftipro-iframe" allow="camera" frameborder="0"></iframe>
Verification Response
Responses will contain the following parameters:
Parameters | Description |
---|---|
reference | Your unique request reference, which you provided us at the time of request, so that you can identify the response in relation to the request made. |
event | This is the request event which shows status of request. Event is changed in every response. Please consult Events for more information. |
error | Whenever there is an error in your request, this parameter will have the details of that error. |
token | This is the unique request token of the request. |
verification_url | A URL is generated for your customer to verify their documents. It is only generated in case of on-site request. |
verification_result | This object will be returned in case of verification.accepted or verification.declined. This includes the results of each verification. 1 means accepted 0 means declined null means not processed Check verification.accepted and verification.declined responses in Events section for a sample response. |
verification_data | This object will be returned in case of verification.accepted or verification.declined. This object will include all the gathered data in a request process. Check verification.accepted and verification.declined responses in Events section for a sample response. |
info | This object will be returned in case of verification.accepted or verification.declined. It contains the following keys: Agent provides information about the device and browser of the end-user. Geolocation provides information about the geographical location of the end-user. For Details on info object go to Info |
additional_data | This object will be returned in case of verification.accepted or verification.declined. This object contains the additional data extracted by Shufti Pro on the document. For Details on additional_data object go to Additional Data |
declined_reason | This parameter will have the reason due to which a verification has been declined, and is only returned in this case in the callback URL. |
declined_codes | This array contains status codes of all declined verification reasons. It will return only for verification.declined. |
services_declined_codes | This object contains status codes of declined reasons for each service separately. Each service object will contain an array of status codes for declined reasons specific to that service. It will return only for verification. declined. |
//Content-Type: application/json
//Signature: NmI4NmIyNzNmZjM0ZmNl
{
"reference": "17374217",
"event": "request.pending",
"verification_url": "https://app.shuftipro.com/process/verification/RPQ8hwPE3cdHKho2wjK7CVQJCQxNx5Rwmb81k3ediXLSWhQM5QibGBWOSgCVjZJd",
"email": "[email protected]",
"country": "GB"
}
Callback response will be sent on the callback_url provided in the request callback_url parameter.
Verification Services
Shufti Pro is performing variety of verifications for its customers. Our diverse services suite allows us to validate the identity of users through facial verification, documents verification and address verification. We can also check the authenticity of customised documents like official IDs and perform background checks for AML compliance. A mix of various service modules can also be acquired to perform multifaceted verifications like facial and document verification can help you perform a thorough KYC procedure.
Face Service
The face verifications of end-users are the simplest to perform. End-user will have to show their face in front of a webcam or phone camera for verification
Parameters | Description |
---|---|
proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB Provide valid BASE64 encoded string. Leave empty for an on-site verification. |
allow_offline | Required: No Type: string Accepted Values: 0, 1 Default Value: 1 This parameter allows user to upload their selfie in case of non-availability of a functional webcam. If value is 0, users can only perform Face Verification with the camera only. |
allow_online | Required: No Type: string Accepted Values: 0, 1 Default-Value: 1 This parameter allows users to take their selfie in real-time when internet is available. If value: 0 users can upload already captured selfie. Note: if allow_offline: 0 priority will be given to allow_offline |
check_duplicate_request | Required: No Type: string Accepted Values: 0, 1 Default-Value: 0 This parameter is used to enable the duplicate account detection service. Face mapping technology identify duplicate faces across all customers through which duplicate accounts are detected. The duplicate account detection will be disabled if the value is 0 and enabled if the value is 1. |
verification_mode | Required: No Type: string Accepted Values: any, image_only, video_only This key specifies the types of proofs that can be used for verification. In the "video_only" mode, Shufti Pro's client is restricted to submitting "Base64" encoded videos, which must be in the MP4 or MOV format. The "any" mode allows a combination of images and videos to be submitted as proofs for verification. If there is a conflict between the service level key and the general level key, priority is assigned to the service level key. |
{
"face" : {
"proof" : "",
"allow_offline" : "1",
"allow_online" : "1",
"check_duplicate_request" : "1",
"verification_mode": "any"
}
}
Document Service
Shufti Pro provides document verification through various types of documents. The supported formats are passports, ID Cards, driving licenses and debit/credit cards. You can opt for more than 1 document type as well. In that case, Shufti Pro will give an option to end-users to verify their data from any of the given document types.
You can provide more than 1 document image and use “additional proof” parameter for this. This is to ensure that the required credentials are easily visible e.g. a document might have name and image of individual at the front but the date of birth of that person is printed at the back of the document or on another page of the passport. If you opt for both facial and document verification, face of individual from document will be used to validate uploaded selfie.
Parameters | Description |
---|---|
proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB Provide valid BASE64 encoded string. Leave empty for an on-site verification. |
additional_proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB Provide valid BASE64 encoded string. Leave empty for an on-site verification. |
supported_types | Required: No Type: Array Document verification have two parameters: proof and additional_proof. If these two are not set or empty, it means that it should be an on-site verification. You can provide any one, two or more types of documents to verify the identity of user. For example, if you opt for both passport and driving license, then your user will be given an opportunity to verify data from either of these two documents. Please provide only one document type if you are providing proof of that document with the request. All supported types are listed here Example 1 ["driving_license"] Example 2 ["id_card", "credit_or_debit_card", "passport"] |
dob | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 1990-12-31 |
age | Required: No Type: integer/array Allowed values are integers or array. The Age parameter allows the client to set a minimum and maximum limit for acceptance of a user. The minimum age is defined as min and the maximum is defined as max within this object. Example 18 For More Details Age |
document_number | Required: No Type: string Maximum: 100 chracters Allowed Characters are numbers, alphabets, dots, dashes, spaces, underscores and commas. Examples 35201-0000000-0, ABC1234XYZ098 |
issue_date | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 2015-12-31 |
expiry_date | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 2025-12-31 |
gender | Required: No Type: string Accepted Values: M,F,O,m,f,o Provide the gender which is given in the document. F: Female M: Male O: Others Example: M |
allow_offline | Required: No Type: string Accepted Values: 0, 1 Default Value: 1 This parameter allows user to upload their document in case of non-availability of a functional webcam. If value is 0, users can only perform Document Verification with the camera only. |
allow_online | Required: No Type: string Accepted Values: 0, 1 Default-Value: 1 This parameter allows users to capture their document in real-time when internet is available. If value: 0 users can upload already captured document. Note: if allow_offline: 0 priority will be given to allow_offline |
fetch_enhanced_data | Required: No Type: string Value Accepted: 1 Provide 1 for enabling enhanced data extraction for the document. Shufti Pro provides its customers with the facility of extracting enhanced data features using OCR technology. Now, instead of extracting just personal information input fields, Shufti Pro can fetch all the additional information comprising more than 100 data points from the official ID documents supporting 150 languages. For example height, place_of_birth, nationality, marital_status, weight, etc.(additional charges apply) Extrated data will be returned in object under the key additional_data in case of verification.accepted or verification.declined. For Details on additional_data object go to Additional Data |
name | Required: No Type: object In name object used in document service, first_name is required if you don't want to perform OCR of the name parameter. Other fields are optional. Example 1 { "first_name" : "John", "last_name" : "Doe" } Example 2 { "first_name" : "John", "last_name" : "Doe", "fuzzy_match" : "1"} Parameters for name are listed here |
backside_proof_required | Required: No Type: string Accepted Values: 0, 1 Default Value: 0 If the value of this parameter is set to 1, Shufti Pro will require the end-user to capture/upload both sides of the document to verify the identity. Enabling this parameter will also activate the front and back sides document match feature, which will verify if captured/uploaded front and back sides belong to the same document. |
verification_instructions | Required: No Type: Object This key allows clients to provide additional instruction for the service (document, document_two and address service). Such as if the client wants to allow paper-based, photocopied or laminated documents for verification. Example {"allow_paper_based" : "1"} For more details on Instructions Parameters click here |
show_ocr_form | Required: No Type: boolean Accepted Values: 0, 1 default value: 1 The default value for this is 1. If this is set to 0, the user will not be shown the OCR form to validate the extracted information. This can be used within the Document, Document Two, and Address service. This value can also be applied to all services collectively. However, preference will be given to the value set within the service. Note: Setting the value at 0 may cause data inaccuracy as the user does not have option to validate the extracted information. |
verification_mode | Required: No Type: string Accepted Values: any, image_only, video_only This key specifies the types of proofs that can be used for verification. In the "video_only" mode, Shufti Pro's client is restricted to submitting "Base64" encoded videos, which must be in the MP4 or MOV format. The "any" mode allows a combination of images and videos to be submitted as proofs for verification. If there is a conflict between the service level key and the general level key, priority is assigned to the service level key. |
{
"document" : {
"supported_types" : ["id_card","driving_license","passport"],
"name" : {
"first_name" : "",
"last_name" : ""
},
"proof" : "",
"additional_proof" : "",
"dob" : "",
"age" : "",
"issue_date" : "",
"expiry_date" : "",
"document_number" : "",
"allow_offline" : "1",
"allow_online" : "1",
"fetch_enhanced_data" : "1",
"backside_proof_required" : "0",
"verification_mode": "any",
"gender" : "",
"show_ocr_form" : "1",
"nationality" : ""
}
}
Document Two Service
Document Two Service is provided to verify the personal details of a user from more than 1 document e.g. If you have verified the DOB & Name of a user from their ID Card, you can use Document Two Service to verify the Credit Card Number of your customer.
Just like the “Document Service”, the supported formats for this service are also passports, ID Cards, driving licenses and debit/credit cards and more than one document type can be selected as well. In that case, Shufti Pro will give an option to end-users to verify their data from any of the given document types.
The end-user can be asked to provide more than 1 document image. For this, you can use the “additional proof” parameter. If you opt for both facial and document verification, the face of an individual from the document will be used to validate uploaded selfie.
It goes without saying that provided document proofs should belong to the same person in order to verify the identity of the user.
Parameters | Description |
---|---|
proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB Provide valid BASE64 encoded string. Leave empty for an on-site verification. |
additional_proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB Provide valid BASE64 encoded string. Leave empty for an on-site verification. |
supported_types | Required: No Type: Array Document verification have two parameters: proof and additional_proof. If these two are not set or empty, it means that it should be an on-site verification. You can provide any one, two or more types of documents to verify the identity of user. For example, if you opt for both passport and driving license, then your user will be given an opportunity to verify data from either of these two documents. Please provide only one document type if you are providing proof of that document with the request. All supported types are listed here Example 1 ["driving_license"] Example 2 ["id_card", "credit_or_debit_card", "passport"] |
dob | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 1990-12-31 |
age | Required: No Type: integer/array Allowed values are integers or array. The Age parameter allows the client to set a minimum and maximum limit for acceptance of a user. The minimum age is defined as min and the maximum is defined as max within this object. Example 18 For More Details Age |
document_number | Required: No Type: string Maximum: 100 chracters Allowed Characters are numbers, alphabets, dots, dashes, spaces, underscores and commas. Examples 35201-0000000-0, ABC1234XYZ098 |
issue_date | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 2015-12-31 |
expiry_date | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 2025-12-31 |
gender | Required: No Type: string Accepted Values: M,F,O,m,f,o Provide the gender which is given in the document. F: Female M: Male O: Others Example: M |
allow_offline | Required: No Type: string Accepted Values: 0, 1 Default Value: 1 This parameter allows user to upload their document in case of non-availability of a functional webcam. If value is 0, users can only perform Document Verification with the camera only. |
allow_online | Required: No Type: string Accepted Values: 0, 1 Default-Value: 1 This parameter allows users to capture their document in real-time when internet is available. If value: 0 users can upload already captured document. Note: if allow_offline: 0 priority will be given to allow_offline |
fetch_enhanced_data | Required: No Type: string Value Accepted: 1 Provide 1 for enabling enhanced data extraction for the document. Shufti Pro provides its customers with the facility of extracting enhanced data features using OCR technology. Now, instead of extracting just personal information input fields, Shufti Pro can fetch all the additional information comprising more than 100 data points from the official ID documents supporting 150 languages. For example height, place_of_birth, nationality, marital_status, weight, etc.(additional charges apply) Extrated data will be returned in object under the key additional_data in case of verification.accepted or verification.declined. For Details on additional_data object go to Additional Data |
name | Required: No Type: object In name object used in document service, first_name is required if you don't want to perform OCR of the name parameter. Other fields are optional. Example 1 { "first_name" : "John", "last_name" : "Doe" } Example 2 { "first_name" : "John", "last_name" : "Doe", "fuzzy_match" : "1"} Parameters for name are listed here |
backside_proof_required | Required: No Type: string Accepted Values: 0, 1 Default Value: 0 If the value of this parameter is set to 1, Shufti Pro will require the end-user to capture/upload both sides of the document to verify the identity. Enabling this parameter will also activate the front and back sides document match feature, which will verify if captured/uploaded front and back sides belong to the same document. |
verification_instructions | Required: No Type: Object This key allows clients to provide additional instruction for the service (document, document_two and address service). Such as if the client wants to allow paper-based, photocopied or laminated documents for verification. Example {"allow_paper_based" : "1"} For more details on Instructions Parameters click here |
show_ocr_form | Required: No Type: boolean Accepted Values: 0, 1 default value: 1 The default value for this is 1. If this is set to 0, the user will not be shown the OCR form to validate the extracted information. This can be used within the Document, Document Two, and Address service. This value can also be applied to all services collectively. However, preference will be given to the value set within the service. Note: Setting the value at 0 may cause data inaccuracy as the user does not have option to validate the extracted information. |
verification_mode | Required: No Type: string Accepted Values: any, image_only, video_only This key specifies the types of proofs that can be used for verification. In the "video_only" mode, Shufti Pro's client is restricted to submitting "Base64" encoded videos, which must be in the MP4 or MOV format. The "any" mode allows a combination of images and videos to be submitted as proofs for verification. If there is a conflict between the service level key and the general level key, priority is assigned to the service level key. |
{
"document_two" : {
"supported_types" : ["id_card","driving_license","passport"],
"name" : {
"first_name" : "",
"last_name" : ""
},
"proof" : "",
"additional_proof" : "",
"dob" : "",
"age" : "",
"issue_date" : "",
"expiry_date" : "",
"document_number" : "",
"allow_offline" : "1",
"fetch_enhanced_data" : "1",
"backside_proof_required" : "0",
"gender" : "",
"show_ocr_form" : "1",
"verification_mode": "any"
}
}
Address Service
For address verification, a valid identity document is required with the same address printed on it as the one claimed by the end-user. The address can also be verified with the help of Utility Bills and Bank Statements. The address document will be displayed or uploaded by end-user directly for verification.
Parameters | Description |
---|---|
proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB |
supported_types | Required: No Type: Array Provide any one, two or more document types in proof parameter in Address verification service. For example, if you choose id_card and utility_bill, then the user will be able to verify data using either of these two documents. Please provide only one document type if you are providing proof of that document with the request. The Following list Shows Supported Types of Address Verification. You can find it here. Example 1 [ "utility_bill" ] Example 2 [ "id_card", "bank_statement" ] |
full_address | Required: Yes Type: string Minimum: 6 characters Maximum: 250 chracters Allowed Characters are numbers, alphabets, dots, dashes, spaces, underscores, hashes and commas. |
address_fuzzy_match | Required: No Type: string Accepted Values: 0, 1 Default Value: 0 Provide 1 for enabling a fuzzy match for address verification. Enabling fuzzy matching attempts to find a match which is not 100% accurate. Default value will be 0, which means that only 100% accurate address will be verified. |
issue_date | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 2015-12-31 |
name | Required: No Type: object In name object used in document service, first_name is required if you don't want to perform OCR of the name parameter. Other fields are optional. Example 1 { "first_name" : "John", "last_name" : "Doe" } Example 2 { "first_name" : "John", "last_name" : "Doe", "fuzzy_match" : "1"} Parameters for name are listed here |
backside_proof_required | Required: No Type: string Accepted Values: 0, 1 Default Value: 0 If the value of this parameter is set to 1, Shufti Pro will require the end-user to capture/upload both sides of the document to verify the identity. Enabling this parameter will also activate the front and back sides document match feature, which will verify if captured/uploaded front and back sides belong to the same document. |
verification_instructions | Required: No Type: Object This key allows clients to provide additional instruction for the service (document, document_two and address service). Such as if the client wants to allow paper-based, photocopied or laminated documents for verification. Example {"allow_paper_based" : "1"} For more details on Instructions Parameters click here |
show_ocr_form | Required: No Type: boolean Accepted Values: 0, 1 default value: 1 The default value for this is 1. If this is set to 0, the user will not be shown the OCR form to validate the extracted information. This can be used within the Document, Document Two, and Address service. This value can also be applied to all services collectively. However, preference will be given to the value set within the service. Note: Setting the value at 0 may cause data inaccuracy as the user does not have option to validate the extracted information. |
verification_mode | Required: No Type: string Accepted Values: any, image_only, video_only This key specifies the types of proofs that can be used for verification. In the "video_only" mode, Shufti Pro's client is restricted to submitting "Base64" encoded videos, which must be in the MP4 or MOV format. The "any" mode allows a combination of images and videos to be submitted as proofs for verification. If there is a conflict between the service level key and the general level key, priority is assigned to the service level key. |
{
"address" : {
"supported_types" : ["id_card","bank_statement"],
"proof" : "",
"name" : "",
"issue_date" : "",
"full_address" : "",
"address_fuzzy_match" : "1",
"backside_proof_required" : "0",
"show_ocr_form" : "1",
"verification_mode": "any"
}
}
Consent Service
Customised documents/notes can also be verified by Shufti Pro. Company documents, employee cards or any other personalised note can be authenticated by this module. You can choose handwritten or printed document format but only one form of document can be verified in this verification module. Text whose presence on the note/customized document is to be verified, is also needed to be provided. The consent document will be displayed or uploaded by end-user directly for verification.
Parameters | Description |
---|---|
proof | Required: No Type: string Image Format: JPG, JPEG, PNG, PDF Maximum: 16MB Video Format: MP4/MOV Maximum: 20MB |
supported_types | Required: No Type: Array Text provided in the consent verification can be verified by handwritten documents or printed documents. Supported types are listed here Example 1 ["printed"] Example 2 ["printed", "handwritten"] |
text | Required: Yes Type: string Minimum: 2 characters Maximum: 100 chracters Provide text in the string format which will be verified from a given proof. |
allow_offline | Required: No Type: string Accepted Values: 0, 1 Default Value: 1 This parameter allows user to upload their Consent Document (Handwritten Note/printed document) in case of non-availability of a functional webcam. If value is 0, users can only perform Consent Verification with the camera only. |
allow_online | Required: No Type: string Accepted Values: 0, 1 Default-Value: 1 This parameter allows users to capture their Consent in real-time when internet is available. If value: 0 users can upload already captured Consent. Note: if allow_offline: 0 priority will be given to allow_offline |
with_face | Required: No Type: string Accepted Values: 0, 1 Default Value: 1 This parameter is applicable if supported_type is handwritten and default value is 1. If value of with_face is 1 then hand written note will be accepted only with face which means your customer must need to show his/her face along with the consent on a paper. If value of with_face is 0 then hand written note is accepted with or without face. |
verification_mode | Required: No Type: string Accepted Values: any, image_only, video_only This key specifies the types of proofs that can be used for verification. In the "video_only" mode, Shufti Pro's client is restricted to submitting "Base64" encoded videos, which must be in the MP4 or MOV format. The "any" mode allows a combination of images and videos to be submitted as proofs for verification. If there is a conflict between the service level key and the general level key, priority is assigned to the service level key. |
{
"consent" : {
"proof" : "",
"supported_types" : ["printed"],
"text" : "",
"allow_offline" : "1",
"allow_online" : "1",
"verification_mode": "any"
}
}
Phone Service
Verify the phone number of end-users by sending a random code to their number from Shufti Pro. Once the sent code is entered into the provided field by end-user, phone number will stand verified. It is primarily an on-site verification and you have to provide phone number of the end-user to us, in addition to the verification code and the message that is to be forwarded to the end-user. Shufti Pro will be responsible only to send the message along with verification code to the end-user and verify the code entered by the end-user.
Verification is declined if a user enters the wrong code consecutively for five times.
If the user is unable to receive code then, user is provide with Code not received option if user clicks the “Code not received” option the verification will be declined automatically (because either the phone number was wrong or unreachable).
Parameters | Description |
---|---|
phone_number | Required: No Type: string Minimum: 6 characters Maximum: 64 chracters Allowed Characters: numbers and plus sign at the beginning. Provide a valid customer’s phone number with country code. Shufti Pro will directly ask the end-user for phone number if this field is missing or empty. |
random_code | Required: No Type: string Minimum: 2 characters Maximum: 10 chracters Provide a random code. If this field is missing or empty, Shufti Pro will generate a random code. |
text | Required: No Type: string Minimum: 2 characters Maximum: 100 chracters Provide a short description and random code in this field. This message will be sent to customers. This field should contain random_code. If random_code field is empty then Shufti Pro will generate a random code and append the code with this message at the end. |
{
"phone" : {
"phone_number" : "",
"random_code" : "",
"text" : ""
}
}
Email Verification Service
Verify the email addresses of end-users by sending a unique code to the provided email address. The End-user is then prompted to enter the code into the designated field. Subsequently, our system conducts a validation check to ascertain the authenticity of the provided email address, whether the provided email address is real or potentially fake/temporary. If the email address is real, it will stand verified. It is primarily an on-site verification and end-user have to provide their email address to Shufti Pro.
Shufti Pro will be responsible only to send the unique code to the end-user and verify the code entered by the end-user.
Verification is declined if a user enters the wrong code consecutively for five times.
Parameters | Description |
---|---|
Required: No Type: email Maximum: 128 chracters Allowed Characters: Kindly ensure that email addresses adhere to the standard conventions, including valid characters such as letters, numbers, and symbols like '@' and '.'. |
{
"email_verify" : {
"email" : ""
}
}
Background Checks Service
It is a verification process that will require you to send us the full Name of end-user in addition to date of birth. Shufti Pro will perform AML based background checks based on this information. Please note that the name and dob keys will be extracted from document service if these keys are empty.
Parameters | Description |
---|---|
dob | Required: No Type: string Format: yyyy-mm-dd Provide a valid date. Example 1990-12-31 Note: It is recommended to send dob for more accurate results. |
name | Required: No Type: object In name object used in background checks service, first_name required and other fields are optional. Parameters for name are listed here: Example 1 { "first_name" : "John", "last_name" : "Doe"} Example 2 { "first_name" : "John", "middle_name" : "Carter", "last_name" : "Doe"} Example 3 { "full_name" : "John Carter Doe"} Note: If full name is provided with first and last name priority will be given to full name. |
ongoing | Required: No Accepted values: 0, 1 Default: 0 This Parameter is used for Ongoing AML Screening, and is allowed only on Production Accounts. If Shufti Pro detects a change in AML statuses, then we will send you a webhook with event verification.status.changed. The new AML status can be checked using get status endpoint, or from the back-office. Use fuzzy_match = 1 in the name object for better results for Ongoing AML Screening. |
filters | Required: No Type: Array Default: ["sanction", "warning", "fitness-probity", "pep", "pep-class-1", "pep-class-2", "pep-class-3", "pep-class-4"] This key includes specific filter types, namely, alert or warning, that are linked to the AML search. Use these filters within the search to refine and narrow down the results. All filter types are listed here |
{
"background_checks" : {
"name" : {
"first_name" : "",
"middle_name" : "",
"last_name" : ""
},
"dob" : "",
"filters" : ["sanction", "fitness-probity", "warning", "pep"]
}
}
{
"background_checks" : {
"name" : {
"full_name" : "John Carter Doe"
},
"dob" : "1995-10-10",
"filters" : ["sanction", "fitness-probity", "warning", "pep"]
}
}
{
"background_checks" : {
"name" : {
"first_name" : "John",
"middle_name" : "Carter",
"last_name" : "Doe"
},
"filters" : ["sanction", "fitness-probity", "warning", "pep"]
}
}
Know Your Business Service
Shufti Pro verifies millions of businesses in real-time through its KYB services. The KYB verification includes an in-depth screening of Ultimate Beneficial Owners (UBOs) and company registration documents. Develop trustworthy business relationships through in-depth screening of your prospects.
To access a detailed overview of the request parameter, please click on the following link.
Enhance Due Diligence Service
Shufti Pro offers its clients a enhance due diligence service that helps them collect additional information from their customers. The service allows you to create a questionnaire that includes multiple questions with different answer types to choose from, including drop-downs, radio buttons, CSV files, text, integers, float values, etc. Shufti Pro’s clients have the option to use questionnaires with or without KYC service.
Parameters | Description |
---|---|
uuid | Required: Yes Type: array Example 1: ["example_uuid_1"] Example 2: ["example_uuid_1","example_uuid_2"] The UUID parameter is an array that takes one or multiple UUIDs (max five) in the array to execute the enhance due diligence service for your end users. |
questionnaire_type | Required: No Type: string Accepted Values: pre_kyc, post_kyc Default-Value: pre_kyc The questionnaire type parameters tell whether you want to execute the questionnaire for your end-users before KYC ("pre_kyc") or after KYC ("post_kyc"). |
{
"questionnaire": {
"questionnaire_type": "pre_kyc",
"uuid": [
"TZJAEG","XYZABC"
]
}
}