Onsite Integration
In On-site verification, Shufti Pro directly interacts with the end-user, managing data collection to facilitate AML checks.
Parameters and Description
Parameters | Description |
---|---|
business_name | Required: Yes Type: string Max: 255 Characters This parameter receives the business name to run it against the AML list. Example: Shufti Pro Ltd |
business_incorporation_date | Required: No Type: string Format: yyyy-mm-dd This parameter receives the incorporation date of the business to run it against the AML list. Example: 2016-01-01 |
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. |
filters | Required: No Type: Array Default: ["sanction", "warning", "fitness-probity", "pep", "pep-class-1", "pep-class-2", "pep-class-3", "pep-class-4", "adverse-media-financial-crime", "adverse-media-violent-crime", "adverse-media-sexual-crime", "adverse-media-terrorism", "adverse-media-narcotics", "adverse-media"] 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. |
Request Payload
- Http
- Javascript
- PHP
- Python
- Ruby
- Java
- cURL
- C#
- Go
AML-for-businesses-service-sample-object
//POST / HTTP/1.1 basic auth
//Host: api.shuftipro.com
//Content-Type: application/json
//Authorization: Basic NmI4NmIyNzNmZjM0ZmNlMTlkNmI4WJRTUxINTJHUw==
{
"aml_for_businesses": {
"business_name": "",
"business_incorporation_date": "",
"ongoing": "0",
"filters": ["sanction", "fitness-probity", "warning", "pep"]
}
}
AML-for-businesses-service-sample-object
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,
aml_for_businesses: {
business_name : "",
business_incorporation_date : "",
ongoing : "0",
filters : ["sanction", "fitness-probity", "warning", "pep"]
}
}
// BASIC AUTH TOKEN
// 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 best suits 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();
})
// 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);
}
AML-for-businesses-service-sample-object
<?php
$url = 'https://api.shuftipro.com/';
$client_id = 'YOUR_CLIENT_ID';
$secret_key = 'YOUR_SECRET_KEY';
$payload = [
'reference' => 'SP_REQUEST_' . rand(),
'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,
'aml_for_businesses'=> [
'business_name' => '',
'business_incorporation_date' => '',
'ongoing' => '0',
'filters' => ['sanction', 'fitness-probity', 'warning', 'pep']
]
];
$auth = $client_id . ':' . $secret_key;
$headers = ['Content-Type: application/json'];
$post_data = json_encode($payload);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERPWD, $auth);
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);
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);
$response_data = $body;
$decoded_response = json_decode($response_data, true);
$event_name = $decoded_response['event'];
if ($event_name == 'request.pending') {
$verification_url = $decoded_response['verification_url'];
createIframe($verification_url);
}
function createIframe($src) {
echo "<iframe style='position:fixed; id:shuftipro-iframe; name:shuftipro-iframe; allow:camera;
top:0; left:0; bottom:0; right:0; margin:0; padding:0; overflow:hidden; border:none;
z-index:2147483647; width:100%; height:100%;' src='$src'></iframe>";
}
?>
AML-for-businesses-service-sample-object
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/'
client_id = 'YOUR_CLIENT_ID'
secret_key = 'YOUR_SECRET_KEY'
payload = {
'reference': f'SP_REQUEST_{randint(1000, 9999)}',
'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,
'aml_for_businesses': {
'business_name': '',
'business_incorporation_date': '',
'ongoing': '',
'filters': ['']
}
}
auth = f'{client_id}:{secret_key}'
b64Val = auth.encode('ascii').hex()
headers = {
'Content-Type': 'application/json',
'Authorization': f'Basic {b64Val}'
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
# Calculating signature for verification
# Clients registered with Shufti Pro after March 15, 2023, must use secret key as follows
# secret_key = hashlib.sha256(secret_key.encode()).hexdigest()
# Calculated signature functionality cannot be implement in case of access token
calculated_signature = hashlib.sha256('{}{}'.format(response.content.decode(), secret_key).encode()).hexdigest()
sp_signature = response.headers.get('Signature', '')
json_response = response.json()
event_name = json_response['event']
if event_name == 'request.pending':
if sp_signature == calculated_signature:
verification_url = json_response['verification_url']
create_iframe(verification_url)
def create_iframe(src):
print(f"<iframe style='position:fixed; id:shuftipro-iframe; name:shuftipro-iframe; allow:camera; "
f"top:0; left:0; bottom:0; right:0; margin:0; padding:0; overflow:hidden; border:none; "
f"z-index:2147483647; width:100%; height:100%;' src='{src}'></iframe>")
AML-for-businesses-service-sample-object
require 'uri'
require 'net/http'
require 'base64'
require 'json'
url = URI("https://api.shuftipro.com/")
client_id = "YOUR_CLIENT_ID"
secret_key = "YOUR_SECRET_KEY"
payload = {
"reference" => "SP_REQUEST_#{rand(1000..9999)}",
"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,
"aml_for_businesses" => {
"business_name" => "",
"business_incorporation_date" => "",
"ongoing" => "0",
"filters" => ["sanction", "fitness-probity", "warning", "pep"]
}
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
auth = Base64.strict_encode64("#{client_id}:#{secret_key}")
request["Authorization"] = "Basic #{auth}"
request.body = payload.to_json
response = http.request(request)
# Calculating signature for verification
# Clients registered with Shufti Pro after March 15, 2023, must use secret key as follows
# secret_key = Digest::SHA256.hexdigest secret_key
calculated_signature = Digest::SHA256.hexdigest response.read_body + secret_key
sp_signature = response['Signature']
json_response = JSON.parse(response.read_body)
event_name = json_response['event']
if event_name == 'request.pending'
if sp_signature == calculated_signature
verification_url = json_response['verification_url']
create_iframe(verification_url)
end
end
def create_iframe(src)
puts "<iframe style='position:fixed; id:shuftipro-iframe; name:shuftipro-iframe; allow:camera; top:0; left:0; bottom:0; right:0; margin:0; padding:0; overflow:hidden; border:none; z-index:2147483647; width:100%; height:100%;' src='#{src}'></iframe>"
end
AML-for-businesses-service-sample-object
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 = "{\"aml_for_businesses\":{\"business_name\":\"",\"business_incorporation_date\":\"",\"ongoing\":\"",\"filters\":[]}}";
// 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());
}
}
AML-for-businesses-service-sample-object
curl --location --request POST 'https://api.shuftipro.com' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic NmI4NmIyNzNmZjM0ZmNlMTlkNmI4WJRTUxINTJHUw==' \
--data-raw '{
"reference" : "1234567",
"callback_url" : "http://www.example.com/",
"email" : "[email protected]",
"country" : "GB",
"language" : "EN",
"redirect_url": "http://www.example.com",
"ttl" : 60,
"verification_mode" : "any",
"aml_for_businesses": {
"business_name": "",
"business_incorporation_date": "",
"ongoing": "0",
"filters": ["sanction", "fitness-probity", "warning", "pep"]
}
}'
AML-for-businesses-service-sample-object
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"" : ""1234567""," + "\n" +
@" ""callback_url"" : ""http://www.example.com/""," + "\n" +
@" ""email"" : ""[email protected]""," + "\n" +
@" ""country"" : ""GB""," + "\n" +
@" ""language"" : ""EN""," + "\n" +
@" ""redirect_url"": ""http://www.example.com""," + "\n" +
@" ""ttl"" : 60," + "\n" +
@" ""verification_mode"" : ""any""," + "\n" +
@" ""aml_for_businesses"" : {" + "\n" +
@" ""business_name"" : ""," + "\n" +
@" ""business_incorporation_date"": ""," + "\n" +
@" ""ongoing"" : "0"," + "\n" +
@" ""filters"" : [""sanction", "fitness-probity", "warning", "pep""]" + "\n" +
@" }" + "\n" +
@"}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
AML-for-businesses-service-sample-object
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.shuftipro.com"
method := "POST"
payload := strings.NewReader(`{
"reference" : "1234567",
"callback_url" : "http://www.example.com/",
"email" : "[email protected]",
"country" : "GB",
"language" : "EN",
"redirect_url": "http://www.example.com",
"ttl" : 60,
"verification_mode" : "any",
"aml_for_businesses": {
"business_name": "",
"business_incorporation_date": "",
"ongoing": "0",
"filters": ["sanction", "fitness-probity", "warning", "pep"]
}
}`)
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))
}