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. |
match_score | Required: No Type: String match_score indicates the extent to which a search should accommodate variances between the search term and the terms being matched. A value of 0 signifies a loose match, while 100 indicates an exact match. Note: It ranges from 0-100. By default value is 100. Example: "100". |
countries | Required: No Type: Array Array of countries based on which you want to filters reports. See Countries. Note: ISO 3166-1 alpha-2 country codes are supported. Example: ['CA','IN'] |
alias_search | Required: No Type: Boolean Alias search is used to specify whether user want to perform search within aliases or not. Note: The default value of alias_search is '0'. Example: "0". |
rca_search | Required: No Type: Boolean RCA search is used to specify whether user want to perform search within rca or not. Note: The default value of rca_search is '0'. Example: "0". |
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",
"alias_search": "0",
"rca_search": "0",
"match_score": "100",
"countries": [ "gb", "cy"],
"filters": ["sanction", "warning", "fitness-probity", "pep", "pep-class-1", "pep-class-2", "pep-class-3", "pep-class-4"]
}
}
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",
alias_search: "0",
rca_search: "0",
match_score: "100",
countries: ["gb", "cy"],
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();
})
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',
'alias_search' => '0',
'rca_search' => '0',
'match_score' => "100",
'countries' => ['gb', 'cy'],
'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);
return $decoded_response;
?>
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': '0',
'alias_search': '0',
'rca_search': '0',
'match_score': "100",
'countries': ['gb', 'cy'],
'filters': ['sanction', 'fitness-probity', 'warning', 'pep']
}
}
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 = hashlib.sha256('{}{}'.format(response.content.decode(), secret_key).encode()).hexdigest()
sp_signature = response.headers.get('Signature', '')
json_response = response.json()
if sp_signature == calculated_signature:
return json_response
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",
"alias_search" => "0",
"rca_search" => "0",
"match_score" => "100",
"countries" => ["gb", "cy"],
"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)
if sp_signature == calculated_signature
return json_response
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\":\"0\",\"alias_search\":\"0\",\"rca_search\":\"0\",\"match_score\":\"100\",\"countries\":[\"gb\",\"cy\"],\"filters\":[\"sanction\",\"fitness-probity\",\"warning\",\"pep\"]}}";
// 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",
"alias_search": "0",
"rca_search": "0",
"match_score": "100",
"countries": ["gb", "cy"],
"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" +
@" ""alias_search"" : ""0""," + "\n" +
@" ""rca_search"" : ""0""," + "\n" +
@" ""match_score"" : "100"," + "\n" +
@" ""countries"" : [""gb"",""cy""]," + "\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",
"alias_search": "0",
"rca_search": "0",
"match_score": "100",
"countries": ["gb", "cy"],
"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))
}