Bulk Search
AML Watcher offers a Bulk Search feature, enabling users to submit multiple search payloads in a single request. This enhancement streamlines AML compliance efforts by accelerating search processes and improving operational efficiency. With Bulk Search, users can efficiently screen customer transactions, conduct due diligence, and monitor for suspicious activities, enhancing risk detection capabilities while minimizing resource utilization.
Note: The Bulk Search feature offers a powerful capability, although it may not be available to all organizations by default.
Authorization: To use the Bulk Search API, users must provide an authorization token in their request headers. This token can be obtained from the Get Access Token endpoint, which authenticates and authorizes access to the Bulk Search feature.
Availability: Bulk Search availability is contingent upon organizational access privileges. If your organization requires access to this feature, please contact us at [email protected] to discuss enabling it for your account.
Limitations: In a single bulk search request, a maximum of 10 individual searches will be processed. This ensures optimal performance and resource utilization across the platform.
Endpoint: https://api.amlwatcher.com/api/bulk-search
Method: POST
- HTTP
- Javascript
- PHP
- Python
- Ruby
- Java
- cURL
- C#
- Go
POST /api/bulk-search HTTP/1.1
Host: api.amlwatcher.com
Content-Type: application/json
Content-Length: 1441
Authorization: Bearer Token
{
"batch_name": "Batch 1",
"api_key": "your-api-key",
"callback": "Provide a webhook",
"payloads": [
{
"name": "Donald Lu",
"unique_identifier": "",
"client_reference": "",
"birth_incorporation_date": "",
"country": [
"PK"
],
"category": [
"PEP Level 2"
],
"entity_type":[
"Person"
],
"rca_search": false,
"alias_search": true,
"ongoing_monitoring": true,
"match_score": 25
}
]
}
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer Token");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
batch_name: "Batch No 1",
api_key: "Your Generated API Key",
callback: "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
payloads: [
{
client_reference: "",
name: "Kim Campbell",
birth_incorporation_date: "01-01-1991",
entity_type: ["Person"],
country: ["US"],
category: ["PEP Level 2", "PEP"],
rca_search: true,
alias_search: true,
match_score: 25,
ongoing_monitoring: false,
unique_identifier: "",
risk_score_engine_id: "65c3885cce288c0363bcfd4f",
},
],
});
var requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow",
};
fetch("https://api.amlwatcher.com/api/bulk-search", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.amlwatcher.com/api/bulk-search',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"batch_name": "Batch No 1",
"api_key": "Your Generated API Key",
"callback": "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
"payloads": [
{
"client_reference": "",
"name": "Kim Campbell",
"birth_incorporation_date": "01-01-1991",
"entity_type": [
"Person"
],
"country": [
"US"
],
"category": [
"PEP Level 2",
"PEP"
],
"rca_search": true,
"alias_search": true,
"match_score": 25,
"ongoing_monitoring": false,
"unique_identifier": "",
"risk_score_engine_id": "65c3885cce288c0363bcfd4f"
}
]
}',
CURLOPT_HTTPHEADER => array(
'Authorization': 'Bearer Token',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
import json
url = "https://api.amlwatcher.com/api/bulk-search"
payload = json.dumps({
"batch_name": "Batch No 1",
"api_key": "Your Generated API Key",
"callback": "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
"payloads": [
{
"client_reference": "",
"name": "Kim Campbell",
"birth_incorporation_date": "01-01-1991",
"entity_type": [
"Person"
],
"country": [
"US"
],
"category": [
"PEP Level 2",
"PEP"
],
"rca_search": True,
"alias_search": True,
"match_score": 25,
"ongoing_monitoring": False,
"unique_identifier": "",
"risk_score_engine_id": "65c3885cce288c0363bcfd4f"
}
]
})
headers = {
'Authorization': 'Bearer Token',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("https://api.amlwatcher.com/api/bulk-search")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer Token"
request.body = JSON.dump({
"batch_name": "Batch No 1",
"api_key": "Your Generated API Key",
"callback": "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
"payloads": [
{
"client_reference": "",
"name": "Kim Campbell",
"birth_incorporation_date": "01-01-1991",
"entity_type": [
"Person"
],
"country": [
"US"
],
"category": [
"PEP Level 2",
"PEP"
],
"rca_search": true,
"alias_search": true,
"match_score": 25,
"ongoing_monitoring": false,
"unique_identifier": "",
"risk_score_engine_id": "65c3885cce288c0363bcfd4f"
}
]
})
response = https.request(request)
puts response.read_body
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) {
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
BufferedReader in = null;
try {
// Define the URL
URL url = new URL("https://api.amlwatcher.com/api/bulk-search");
// Open a connection to the URL
connection = (HttpURLConnection) url.openConnection();
// Set the request method to POST
connection.setRequestMethod("POST");
// Set the request headers
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "Bearer Token");
// Enable input/output streams
connection.setDoOutput(true);
// Define the JSON request body
String jsonPayload = "{\n" +
" \"batch_name\": \"Batch No 1\",\n" +
" \"api_key\": \"Your Generated API Key\",\n" +
" \"callback\": \"https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a\",\n" +
" \"payloads\": [\n" +
" {\n" +
" \"name\": \"\",\n" +
" \"category\": [],\n" +
" \"country\": [],\n" +
" \"birth_incorporation_date\": \"\",\n" +
" \"unique_identifier\": \"\",\n" +
" \"alias_search\": true,\n" +
" \"rca_search\": true,\n" +
" \"entity_type\": [\"Person\"],\n" +
" \"client_reference\": \"Jh88XGyN58X7EQ6BSquzeTfs\",\n" +
" \"ongoing_monitoring\": false,\n" +
" \"per_page\": 15,\n" +
" \"match_score\": 25,\n" +
" }\n" +
" ]\n" +
"}";
// Write the JSON request body
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(jsonPayload);
outputStream.flush();
// Get the response code
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// Read the response
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
// Print the response
System.out.println("Response Body: " + response.toString());
} catch (IOException e) {
e.printStackTrace();
// Print the error response if available
if (connection != null) {
try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) {
StringBuilder errorResponse = new StringBuilder();
String errorLine;
while ((errorLine = errorReader.readLine()) != null) {
errorResponse.append(errorLine);
}
System.out.println("Error Response: " + errorResponse.toString());
} catch (IOException ignored) {
}
}
} finally {
// Close resources
try {
if (outputStream != null) outputStream.close();
if (in != null) in.close();
} catch (IOException ignored) {
}
}
}
}
curl --location --request POST 'https://api.amlwatcher.com/api/bulk-search'
--header 'Content-Type: application/json'
--header 'Authorization: Bearer Token'
--data '{
"batch_name": "Batch No 1",
"api_key": "Your Generated API Key",
"callback": "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
"payloads": [
{
"client_reference": "",
"name": "Kim Campbell",
"birth_incorporation_date": "01-01-1991",
"entity_type": [
"Person"
],
"country": [
"US"
],
"category": [
"PEP Level 2",
"PEP"
],
"rca_search": true,
"alias_search": true,
"match_score": 25,
"ongoing_monitoring": false,
"unique_identifier": "",
"risk_score_engine_id": "65c3885cce288c0363bcfd4f"
}
]
}'
using RestSharp;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var options = new RestClientOptions("https://api.amlwatcher.com")
{
ThrowOnAnyError = true,
Timeout = TimeSpan.FromMilliseconds(-1),
};
var client = new RestClient(options);
var request = new RestRequest("/api/bulk-search", Method.Post);
request.AddHeader("Authorization", "Bearer Token");
request.AddHeader("Content-Type", "application/json");
var body = new
{
batch_name = "Batch No 2221",
api_key = "Your Generated API Key",
callback = "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
payloads = new[]
{
new
{
client_reference = "",
name = "Kim Campbell",
birth_incorporation_date = "",
entity_type = new string[] { "Person" },
country = new string[] { },
category = new string[] { "SIP" },
rca_search = true,
alias_search = true,
match_score: 25,
ongoing_monitoring = false,
unique_identifier = "",
risk_score_engine_id = "65c3885cce288c0363bcfd4f"
}
}
};
request.AddJsonBody(body);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
}
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.amlwatcher.com/api/bulk-search"
method := "POST"
payload := strings.NewReader(`{
"batch_name": "Batch No 1",
"api_key": "Your Generated API Key",
"callback": "https://webhook.site/1b1dc1cc-d4H6-4656-b02c-88223903e0a",
"payloads": [
{
"client_reference": "",
"name": "Kim Campbell",
"birth_incorporation_date": "01-01-1991",
"entity_type": [
"Person"
],
"country": [
"US"
],
"category": [
"PEP Level 2",
"PEP"
],
"rca_search": true,
"alias_search": true,
"match_score": 25,
"ongoing_monitoring": false,
"unique_identifier": "",
"risk_score_engine_id": "65c3885cce288c0363bcfd4f"
}
]
}`)
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", "Bearer Token")
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))
}
Request
Parameters | Required | Type | Description |
---|---|---|---|
batch_name | Yes | String | The name of batch you want to create. Min: 2 character Max: 100 characters Constraint: Batch name should not consist entirely of special characters or numbers. |
api_key | Optional | String | An API key is required to perform bulk search, only if access token is not passed in authorization header as a bearer token. |
callback | Yes | String | A callback response upon job completion will be returned to the following URL. |
payloads | Yes | Array | Array of multiple payloads with several cases. |
name | Yes | String | The name of entity/business you want to search. Min: 2 character Max: 100 characters Constraint: Name should not consist entirely of special characters or numbers. |
country | No | 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"] |
category | Yes | Array | Array of categories based on which you want to filters reports. See Categories. Example: ["Adverse Media", "SIP"] |
birth_incorporation_date | No | String | Date(DD-MM-YYYY) based on which you want to filters reports. Note: To perform year search you can use the format 00-00-1947 and vice versa for date, month or combination of the three. Example: 10-03-1947 | 10-03-0000 | 00-03-1947 | 00-00-1947 |
unique_identifier | No | String | Unique identifier can be used to filter the search records. Min: 2 character Max: 50 characters Constraint: Unique identifier should not consist entirely of special characters. Note: It can be any key within the data object like Passport No, National ID number. Example: TR12345677. |
alias_search | Yes | 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 True. Example: True. |
rca_search | Yes | Boolean | RCA search is used to specify whether user want to perform search within rca or not. Description: RCA (Relatives and Close Associates) - Immediate family members or close social or professional contacts of a government or political official, or senior executive – meaning spouses, parents, siblings, children, and spouses’ parents and siblings. Note: The default value of rca_search is True. Example: True. |
ongoing_monitoring | Yes | Boolean | Ongoing monitoring is used to monitor the cases for Ongoing AML. Note: The default value of ongoing_monitoring is False. Example: True. Disclaimer: Please note that any adverse media retrieved through our API is provided as-is at the time of request, and we do not offer continuous updates or ongoing monitoring of adverse media screening. |
entity_type | No | Array | Entity Type: AML screening serves the purpose of identifying individuals or entities listed in various AML databases. AML Watcher provides screening services of five types of entities i.e. Person, Company, Organization, Crypto_Wallet, Vessel and Aircraft. Example: ["Person"]. |
match_score | No | Integer | The match score determines the level of similarity required between the search term and the matched terms. A value of 0 allows for the loosest match, while 100 represents the closest match. Note: It ranges from 0-100. By default value is 80 Example: 65 |
client_reference | No | String | A unique client reference can be assigned to each search. |
Response
Parameters | Description |
---|---|
error | Whenever there is an error in your request, this param will have details of that error; otherwise it’ll remain empty. |
status | The status field is set to either “SUCCESS” or “FAIL”, indicating that the API request resulted in a successful or failure/error condition respectively. |
data | An object containing status of batch search and batch ID. |
{
"data": {
"batch_id": "cbcbb9dcba6b80618ok5af62",
"status": "PENDING"
},
"error": false,
"status": "SUCCESS"
}