AML Screening
Our AML "Anti-Money Laundering" service is dedicated to protecting your business from financial crimes and illegal activities. In today's complex financial landscape, it's crucial to ensure that your business follows anti-money laundering regulations.
Our AML Screening service helps you screen businesses and their associated parties (such as UBOs and directors) against sanctions lists, PEP databases, and adverse media, so you can identify elevated risk before onboarding or continuing a business relationship.
We offer screening results that support compliant decision-making, giving you confidence that your business is actively preventing money laundering and other unlawful practices, and maintaining a secure financial environment.
Request
"Requests" refer to the various HTTP methods used for interacting with the API, providing details on endpoint URLs, parameters, headers, request bodies, and examples.
Listing the Available Countries
Description:
The "Listing Available Countries" API serves as a valuable resource for users to explore and understand the geographic coverage of the product. By providing a comprehensive list of covered countries and associated details, users can gain a clear picture of the product's global availability and make informed decisions regarding its usage in various regions.
Method Call: GET
API:
https://api.thekyb.com/api/readAmlCountries
- Http
- Javascript
- PHP
- Python
- Node
- cURL
GET /api/readAmlCountries HTTP/1.1
Host: api.thekyb.com
Content-Type: application/json
Accept: application/json
token: YOUR_SECRET_KEY
var requestHeaders = new Headers();
requestHeaders.append("Content-Type", "application/json");
requestHeaders.append("Accept", "application/json");
requestHeaders.append("token", "YOUR_SECRET_KEY");
var requestOptions = {
method: "GET",
headers: requestHeaders,
redirect: "follow",
};
fetch("https://api.thekyb.com/api/readAmlCountries", 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.thekyb.com/api/readAmlCountries',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json',
'token: YOUR_SECRET_KEY'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
import json
url = "https://api.thekyb.com/api/readAmlCountries"
payload={}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'token': 'YOUR_SECRET_KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
var axios = require("axios");
var config = {
method: "get",
url: "https://api.thekyb.com/api/readAmlCountries",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
token: "YOUR_SECRET_KEY",
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'https://api.thekyb.com/api/readAmlCountries' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'token: YOUR_SECRET_KEY'
AML Search
Description:
The functionality of this API allows users to search for AML screening. You can search for single or multiple countries using this API. It directly accesses and fetches data from the official registries of the selected countries.
Method Call: POST
API:
https://api.thekyb.com/api/search
| Parameter | Description |
|---|---|
| search | Type: String Required: Yes Minimum: 2 characters Maximum: 100 characters. Constraint: Search must contain at least one letter (in any language). A value made up only of numbers, special characters and spaces, such as "1234.;'1", is rejected with the error "Invalid Name format". Description: The name of entity/business you want to search. |
| unique_identifier | Type: String Required: No Minimum: 2 characters Maximum: 50 characters. Constraint: Unique identifier should not consist entirely of special characters. Description: Unique identifier can be used to filter the search. It can be any key within the data object like Passport No, National ID number. |
| fuzziness | Type: String Required: No Default: "90" Description: Specifies the extent to which a search should accommodate variances between the search term and the matched terms. A value of 0 signifies a loose match, allowing for more flexible results, while a value of 100 indicates a closely matched result, limiting results to those very similar to the search term. |
| exact_search | Type: Boolean Required: No Default: false Description: When set to true, the exact match feature disables all pre-processing, such as name variations and fuzzy searches, ensuring that only exact matches are returned in the search results. This can help narrow down results to precisely what you are looking for without any modifications or approximations. |
| rca_search | Type: String Required: No Default: "false" Description: RCA search is used to specify whether user want to perform search within rca or not. |
| alias_search | Type: String Required: No Default: "false" Description: Alias search is used to specify whether user want to perform search within aliases or not. |
| services | Type: Array Required: Yes Description: Array of services based on which service you want to use. In this case we use aml, like ["aml"]. |
| biometric_search_image | Type: Base64 encoded Required: No Description: Biometric AML Screening: AML innovative screening matrix features Name + Image + DOB + Unique Identifier which facilitates precise matching. Biometric AML serves the purpose of reducing the manual effort of MLROs and compliance officers by minimizing false positives as well as false negatives with image based search filtration. Note: Image size should not be greater than 5MBs. Only JPG and PNG image types are accepted. |
| entity_type | Type: Array Required: Yes Description: AML screening serves the purpose of identifying individuals or entities listed in various AML databases. The KYB provides AML Screening services of three types of entities i.e. Person, Company, and Organization. |
| categories | Type: Array Required: Yes Description: An array of categories based on which you want to filter the reports. See Categories |
| birth_incorporation_date | Type: String Required: No Description: Date(DD-MM-YYYY) based on which you want to filter 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. |
| country_names | Type: Array Required: No Description: Array of countries based on which you want to filter reports. Just input the country name, like ['united_kingdom']. This way, you can easily customize your search for a particular country or across all countries. Supported Countries |
- Http
- Javascript
- PHP
- Python
- Node
- cURL
POST /api/search HTTP/1.1
Host: api.thekyb.com
Content-Type: application/json
Accept: application/json
token: YOUR_SECRET_KEY
{
"search": "apple",
"unique_identifier": "",
"fuzziness": "90",
"exact_search": true,
"rca_search": "false",
"alias_search": "false",
"services": [
"aml"
],
"biometric_search_image": "",
"entity_type": [
"Company",
"Organization",
"Person"
],
"categories": [
"PEP Level 1",
"PEP Level 2",
"PEP Level 3",
"PEP Level 4",
"Fitness and Probity",
"Insolvency",
"Sanctions",
"SIP",
"SIE",
"Warnings and Regulatory Enforcement"
],
"birth_incorporation_date": "",
"country_names": [
"united_kingdom"
]
}
var requestHeaders = new Headers();
requestHeaders.append("Content-Type", "application/json");
requestHeaders.append("Accept", "application/json");
requestHeaders.append("token", "YOUR_SECRET_KEY");
var payload = JSON.stringify({
"search": "apple",
"unique_identifier": "",
"fuzziness": "90",
"rca_search": "false",
"exact_search": true,
"alias_search": "false",
"services": [
"aml"
],
"biometric_search_image": "",
"entity_type": [
"Company",
"Organization",
"Person"
],
"categories": [
"PEP Level 1",
"PEP Level 2",
"PEP Level 3",
"PEP Level 4",
"Fitness and Probity",
"Insolvency",
"Sanctions",
"SIP",
"SIE",
"Warnings and Regulatory Enforcement"
],
"birth_incorporation_date": "",
"country_names": [
"united_kingdom"
]
});
var requestOptions = {
method: "POST",
headers: requestHeaders,
body: payload,
redirect: "follow",
};
fetch("https://api.thekyb.com/api/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.thekyb.com/api/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 =>'{
"search": "apple",
"unique_identifier": "",
"fuzziness": "90",
"exact_search": true,
"rca_search": "false",
"alias_search": "false",
"services": [
"aml"
],
"biometric_search_image": "",
"entity_type": [
"Company",
"Organization",
"Person"
],
"categories": [
"PEP Level 1",
"PEP Level 2",
"PEP Level 3",
"PEP Level 4",
"Fitness and Probity",
"Insolvency",
"Sanctions",
"SIP",
"SIE",
"Warnings and Regulatory Enforcement"
],
"birth_incorporation_date": "",
"country_names": [
"united_kingdom"
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json',
'token: YOUR_SECRET_KEY'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
import json
url = "https://api.thekyb.com/api/search"
payload = json.dumps({
"search": "apple",
"unique_identifier": "",
"fuzziness": "90",
"exact_search": True,
"rca_search": "false",
"alias_search": "false",
"services": [
"aml"
],
"biometric_search_image": "",
"entity_type": [
"Company",
"Organization",
"Person"
],
"categories": [
"PEP Level 1",
"PEP Level 2",
"PEP Level 3",
"PEP Level 4",
"Fitness and Probity",
"Insolvency",
"Sanctions",
"SIP",
"SIE",
"Warnings and Regulatory Enforcement"
],
"birth_incorporation_date": "",
"country_names": [
"united_kingdom"
]
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'token': 'YOUR_SECRET_KEY'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
var axios = require("axios");
var data = JSON.stringify({
"search": "apple",
"unique_identifier": "",
"fuzziness": "90",
"exact_search": true,
"rca_search": "false",
"alias_search": "false",
"services": [
"aml"
],
"biometric_search_image": "",
"entity_type": [
"Company",
"Organization",
"Person"
],
"categories": [
"PEP Level 1",
"PEP Level 2",
"PEP Level 3",
"PEP Level 4",
"Fitness and Probity",
"Insolvency",
"Sanctions",
"SIP",
"SIE",
"Warnings and Regulatory Enforcement"
],
"birth_incorporation_date": "",
"country_names": [
"united_kingdom"
]
});
var config = {
method: "post",
url: "https://api.thekyb.com/api/search",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
token: "YOUR_SECRET_KEY",
},
data: data,
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request POST 'https://api.thekyb.com/api/search' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'token: YOUR_SECRET_KEY' \
--data-raw '{
"search": "apple",
"unique_identifier": "",
"fuzziness": "90",
"exact_search": true,
"rca_search": "false",
"alias_search": "false",
"services": [
"aml"
],
"biometric_search_image": "",
"entity_type": [
"Company",
"Organization",
"Person"
],
"categories": [
"PEP Level 1",
"PEP Level 2",
"PEP Level 3",
"PEP Level 4",
"Fitness and Probity",
"Insolvency",
"Sanctions",
"SIP",
"SIE",
"Warnings and Regulatory Enforcement"
],
"birth_incorporation_date": "",
"country_names": [
"united_kingdom"
]
}'
Retrieving AML Search Profiles
Description:
When users perform a search using the API, the system will retrieve a list of companies from the AML that match the provided search criteria. For instance, if a user searches for the company name "Apple" with country name "estonia," the API will display all the companies in the "estonia," that match the search term "Apple".
This API breaks down the data into smaller, manageable pieces called "pages". Each page contains a limited number of results, which is determined by the "limit" value. By specifying the "page" number and "limit" value in the request, users can access different segments of the data retrieved by the aml request id. This approach is helpful for handling large datasets more efficiently, as it allows users to retrieve data in smaller chunks, one page at a time, rather than getting the entire dataset all at once.
Method Call: GET
API:
https://api.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT
| Parameter | Description |
|---|---|
| aml_request_id | Required: Yes Type: string Description: This is the unique request ID of request and can be generated by performing a “search” request. |
| page | Required: Optional Type: String Default: 1 Description: Page attribute tells the page number of the retrieved result. The page number can be specified using the "page" query parameter. |
| limit | Type: String Required: Optional Description: The "limit" key refers to a parameter that allows users to specify the maximum number of results or records they want to receive from a request. This parameter is particularly useful when dealing with large datasets or when users only need a specific number of items from the API response. For example, if the API provides a paginated response with 100 records per page, a user can set the "limit" key to 10 if they only want to receive the first 10 results. This way, the API will return a subset of the data containing the first 10 records, making the response more focused and efficient. |
- Http
- Javascript
- PHP
- Python
- Node
- cURL
GET /api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT HTTP/1.1
Host: api.thekyb.com
Content-Type: application/json
Accept: application/json
token: YOUR_SECRET_KEY
var requestHeaders = new Headers();
requestHeaders.append("Content-Type", "application/json");
requestHeaders.append("Accept", "application/json");
requestHeaders.append("token", "YOUR_SECRET_KEY");
var requestOptions = {
method: "GET",
headers: requestHeaders,
redirect: "follow",
};
fetch(
"https://api.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT",
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.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json',
'token: YOUR_SECRET_KEY'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
import json
url = "https://api.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT"
payload={}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'token': 'YOUR_SECRET_KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
var axios = require("axios");
var config = {
method: "get",
url: "https://api.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
token: "YOUR_SECRET_KEY",
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'https://api.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'token: YOUR_SECRET_KEY'
Enhanced AML Search Profile
Description:
This API returns the full details of one AML profile from your search results. Each profile in the Retrieving AML Search Profiles response (/api/readAmlResponse) has a unique "_id". Send that "_id" as "aml_company_id", together with the "aml_request_id" of the search, to get the profile's complete details.
Method Call: GET
API:
https://api.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=REQUEST_ID
| Parameter | Description |
|---|---|
| aml_company_id | Required: Yes Type: string Description: The ID of the AML profile to open. Use the _id of the profile from the Retrieving AML Search Profiles response (data.aml_request_data[]._id). |
| aml_request_id | Required: Yes Type: string This is the unique aml_request_id of request and can be generated by performing a "search" request. |
- Http
- Javascript
- PHP
- Python
- Node
- cURL
GET /api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID HTTP/1.1
Host: api.thekyb.com
Content-Type: application/json
Accept: application/json
token: YOUR_SECRET_KEY
var requestHeaders = new Headers();
requestHeaders.append("Content-Type", "application/json");
requestHeaders.append("Accept", "application/json");
requestHeaders.append("token", "YOUR_SECRET_KEY");
var requestOptions = {
method: "GET",
headers: requestHeaders,
redirect: "follow",
};
fetch(
"https://api.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID",
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.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json',
'token: YOUR_SECRET_KEY'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
import json
url = "https://api.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID"
payload={}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'token': 'YOUR_SECRET_KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
var axios = require("axios");
var config = {
method: "get",
url: "https://api.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
token: "YOUR_SECRET_KEY",
},
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
curl --location --request GET 'https://api.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'token: YOUR_SECRET_KEY'
Response
The AML Verification API offers two types of responses when a verification request is made: an HTTP response and a callback response. Both responses are presented in JSON format with an application/json header. The response header also includes a Key Signature, which is utilized for verifying the authenticity of the response source.
Listing the Available Countries
Description:
The "Listing Available Countries" response serves as a valuable resource for users to explore and understand the geographic coverage of the product. By providing a comprehensive list of covered countries and associated details, users can gain a clear picture of the product's global availability and make informed decisions regarding its usage in various regions.
API:
https://api.thekyb.com/api/readAmlCountries
Response:
{
"error": false,
"message": "Countries fetched successfully",
"data": {
"countries": [
"afghanistan",
"albania",
"algeria",
"american_samoa",
"andorra",
"angola",
....
]
}
}
Response Parameters:
| Parameter | Description |
|---|---|
| error | The "error" parameter can have a value of either "true" or "false." In the current scenario, since there were no errors during the request processing, the value of "error" is "false." However, in situations where errors occur, such as missing required parameters or criteria not being met, the value of the "error" parameter will change to "true." |
| message | The "message" field in API response formats provides a descriptive text or notification intended to convey additional information or instructions to the API consumer. It is commonly used to communicate relevant details about the response, such as success messages, error messages, or any other informative content that aids in understanding the outcome of the API request. The "message" field helps provide context and guidance to the API consumer regarding the status or result of the API operation. |
| data | The "data" field in API documentation refers to the main payload or content of the API response. It contains the actual information, results, or entities being transmitted back to the API consumer. The structure and format of the "data" field depend on the specific API and the nature of the response. |
| data.countries | Type: Array of strings. The countries supported for AML screening, sorted alphabetically. Each name is in lowercase, with spaces replaced by underscores (e.g., "american_samoa"). Use these values in the country_names parameter of the AML search. |
AML Search
Description:
Whenever a user performs an AML search, a unique ID called aml_request_id will be generated and shown in the response.
API:
https://api.thekyb.com/api/search
Response:
{
"aml_request_id": "AML_REQUEST_ID",
"service_id": "AML_SERVICE_ID"
}
Response Parameters:
| Parameter | Description |
|---|---|
| aml_request_id | This is the unique AML request ID that is generated by performing a 'search' request. |
| service_id | This is the unique Service ID of service and can be generated by performing a “search” request. |
Error Response:
When the request fails validation, the API returns HTTP status 400 with this structure instead of the IDs above:
{
"error": true,
"message": "Invalid country names: United_kingdom",
"data": {}
}
Error Response Parameters:
| Parameter | Description |
|---|---|
| error | Type: Boolean. Always true for an error response. |
| message | Type: String. What went wrong. Show it to your user or log it to fix the request. |
| data | Type: Object. Always empty ({}) for an error response. |
Common error messages:
| Message | Cause |
|---|---|
"Invalid country names: COUNTRY_NAME" | A value in country_names is not a supported AML country. Use the exact lowercase names returned by readAmlCountries, for example "united_kingdom" (not "United_kingdom"). |
"Invalid Name format" | search contains no letters (only numbers, special characters or spaces). |
Other validation errors, for example a missing required parameter, use the same structure with a message describing the problem.
Retrieving AML Search Profiles
Description:
When users perform a search using the request API, the system will retrieve a list of AML profiles that match the provided search criteria, allowing users to view the AML profiles. For instance, if a user searches for the company name "Apple" within the United States, the API will display all the companies that match the search term "Apple".
API:
https://api.thekyb.com/api/readAmlResponse?aml_request_id=REQUEST_ID&page=PAGE_NUMBER&limit=LIMIT
Response:
{
"error": false,
"message": "aml request data fetched successfully",
"data": {
"request_status": "resolved",
"match_status": "potential match",
"aml_request_data": [
{
"_id": "",
"adverse_media": [],
"birth_incorporation_date": [
""
],
"categories": [
""
],
"countries": [
""
],
"data": {
"additional_information": {
"country_codes": [],
"dorm_date": [],
"ibcRUC": [
""
],
"original_name": [
""
],
"service_provider": [],
"source_url": [
""
],
"valid_until": [
""
]
},
"case_details": [
{
"authority": "",
"fine": "",
"decision_date": "",
"watchlist_type": ""
}
],
"identification_documents": [],
"linked_entities": [
{
"address": [],
"countries": [
""
],
"country_codes": [
""
],
"description": [],
"name": [
""
],
"status": [],
"type": [
""
],
"valid_until": [
""
]
}
],
"summary": {
"address": [],
"alias": [],
"country": [],
"dissolution_date": [
""
],
"inactive_date": [],
"incorporation_date": [
""
],
"jurisdiction": [
""
],
"name": [
"Apple",
"APPLE"
],
"status": [],
"type": []
}
},
"entity_types": [
""
],
"matched_alias": "",
"matched_names": [
{
"matched_name": "",
"matching_fields": {},
"record_id": "",
"score": "64",
"source_ids": [
""
]
},
{
"matched_name": "",
"matching_fields": {
"alias": false,
"birth_incorporation_date": false,
"exact_match": false,
"image": false,
"profile_name": true
},
"record_id": "",
"score": "64",
"source_ids": [
""
]
}
],
"matched_rca": "",
"name": "",
"relevance_status": {
"alias": false,
"birth_incorporation_date": false,
"category": true,
"country": false,
"entity_type": false,
"exact_match": false,
"image_match": false,
"potential_match": true,
"profile_name": true,
"rca_name": false,
"unique_identifier": false,
"watchlist_type_match": false
},
"risk_level": "",
"source_details": [
{
"additional_sources": [],
"categories": [],
"countries": [],
"created_at": "",
"description": "",
"entity_id": "",
"publisher": "",
"updated_at": "",
"url": ""
}
],
"aml_request_id": "",
"service_id": "",
"aml_response_reference_id": "",
"previous_fields_data": [],
"updated_at": "",
"created_at": ""
},
...
],
"pagination": {
"total": 500,
"per_page": 15,
"current_page": 1,
"last_page": 34,
"from": 61,
"to": 75
},
"aml_request": {
"_id": "",
"user_id": "",
"search_name": "apple",
"company_id": "",
"service_id": "",
"fuzziness": "90",
"unique_identifier": null,
"entity_type": [
"Company"
],
"categories": [
"Sanctions",
"Insolvency"
],
"birth_incorporation_date": null,
"biometric_search_image": null,
"status": "resolved",
"country_names": [
{
"country_name": "estonia",
"country_flag": "https://api.thekyb.com/uploads/countries/ee.png"
}
],
"country_codes": [
"EE"
],
"services": [
"aml"
],
"rca_search": "false",
"exact_search": true,
"alias_search": "false",
"ongoing_monitoring": false,
"request_type": "for_company",
"updated_at": "",
"created_at": "",
"match_status": "potential match",
"resolved_at": "",
"searched_categories": {
"Sanctions": 3,
"Insolvency": 0
}
}
}
}
Response Parameters:
| Parameter | Description |
|---|---|
| error | false when the request succeeded, true when it failed. |
| message | A short description of the result. |
| data | The response payload. |
| data.request_status | The current status of the AML Screening request."request_status": "pending" indicates that the request is still in progress and has not yet been completed. "request_status": "resolved" indicates the completion of service request. |
| data.match_status | The current status of the matching process."match_status": "potential match" indicates that the service request has identified a possible match, but further verification may be required."match_status": "no match" indicates that the service request has been completed, and no match was found."match_status": "error message" indicates that the screening engine returned no match status for the request. |
| data.aml_request_data | Type: Array of objects. One object for each AML profile that matched the search, for the current page. Profiles whose result is "no match" are not included. |
| data.aml_request_data[]._id | Type: String. The ID of the AML profile. Use it as aml_company_id to get the Enhanced AML Search Profile. |
| data.aml_request_data[].name | Type: String. The name of the matched profile. |
| data.aml_request_data[].entity_types | Type: Array of strings. The entity types of the profile (for example Person, Company, Organization). |
| data.aml_request_data[].categories | Type: Array of strings. The AML categories the profile belongs to (for example Sanctions, PEP Level 1). |
| data.aml_request_data[].countries | Type: Array of strings. The countries linked to the profile. |
| data.aml_request_data[].birth_incorporation_date | Type: Array of strings. The date of birth (person) or incorporation (company) of the profile. |
| data.aml_request_data[].risk_level | Type: String. The risk level of the profile. |
| data.aml_request_data[].adverse_media | Type: Array. Adverse media records for the profile. Empty when there are none. |
| data.aml_request_data[].data | Type: Object. The detailed data of the profile. |
| data.aml_request_data[].data.summary | Type: Object. Summary fields of the profile. Every field in it is an array, because a profile can carry more than one value from different sources. |
| data.aml_request_data[].data.summary.name | Type: Array of strings. All the names recorded for the profile (for example ["Apple", "APPLE"]). |
| data.aml_request_data[].data.summary.alias, address, country, status, type, jurisdiction, incorporation_date, dissolution_date, inactive_date | Type: Array of strings. The matching summary values for the profile. Empty when not available. |
| data.aml_request_data[].data.additional_information | Type: Object. Additional source-specific fields of the profile. Every field in it is an array. |
| data.aml_request_data[].data.case_details | Type: Array of objects. The enforcement and watchlist cases behind the hit. |
| data.aml_request_data[].data.case_details[].authority | Type: String. The authority that issued the decision or listing. |
| data.aml_request_data[].data.case_details[].fine | Type: String. The fine imposed, when there is one. |
| data.aml_request_data[].data.case_details[].decision_date | Type: String. The date of the decision or listing. |
| data.aml_request_data[].data.case_details[].watchlist_type | Type: String. The type of watchlist the case comes from. |
| data.aml_request_data[].data.identification_documents | Type: Array. Identification documents recorded for the profile. Empty when there are none. |
| data.aml_request_data[].data.linked_entities | Type: Array of objects. Entities linked to the profile (each with name, type, countries, country_codes, address, description, status, valid_until, all arrays). |
| data.aml_request_data[].matched_names | Type: Array of objects. The names in the profile that matched your search. |
| data.aml_request_data[].matched_names[].matched_name | Type: String. The name that matched. |
| data.aml_request_data[].matched_names[].matching_fields | Type: Object. Which fields matched for this name: alias, birth_incorporation_date, exact_match, image and profile_name, each a Boolean. It is always an object, and is {} when no field details are available. |
| data.aml_request_data[].matched_names[].record_id | Type: String. The ID of the matched record. |
| data.aml_request_data[].matched_names[].score | Type: String. The match score (0–100). |
| data.aml_request_data[].matched_names[].source_ids | Type: Array of strings. The sources the matched name comes from. |
| data.aml_request_data[].matched_alias | Type: String. The alias that matched, when the match came from an alias. |
| data.aml_request_data[].matched_rca | Type: String. The relative or close associate that matched, when the match came from an RCA search. |
| data.aml_request_data[].relevance_status | Type: Object of Booleans. Which criteria the profile matched: alias, birth_incorporation_date, category, country, entity_type, exact_match, image_match, potential_match, profile_name, rca_name, unique_identifier, watchlist_type_match. |
| data.aml_request_data[].source_details | Type: Array of objects. The sources the profile was found in. |
| data.aml_request_data[].source_details[].publisher | Type: String. The publisher of the source. |
| data.aml_request_data[].source_details[].description | Type: String. A description of the source. |
| data.aml_request_data[].source_details[].url | Type: String. The link to the source. |
| data.aml_request_data[].source_details[].entity_id | Type: String. The ID of the profile in the source. |
| data.aml_request_data[].source_details[].categories | Type: Array of strings. The AML categories of the source. |
| data.aml_request_data[].source_details[].countries | Type: Array of strings. The countries covered by the source. |
| data.aml_request_data[].source_details[].additional_sources | Type: Array. Further sources for the same record. |
| data.aml_request_data[].source_details[].created_at, updated_at | Type: String. When the source record was created and last updated. |
| data.aml_request_data[].previous_fields_data | Type: Array of objects. Earlier values of fields that changed under ongoing monitoring. Empty when nothing has changed. |
| data.aml_request_data[].ongoing_changing_status | Optional / Conditional. The latest ongoing monitoring change for the profile. Returned only when ongoing monitoring has recorded a change. |
| data.aml_request_data[].aml_request_id | Type: String. The ID of the AML request the profile belongs to. |
| data.aml_request_data[].service_id | Type: String. The ID of the service. |
| data.aml_request_data[].aml_response_reference_id | Type: String. The reference ID of the profile in the AML screening engine. |
| data.aml_request_data[].created_at, updated_at | Type: String. When the profile was stored and last updated. |
| data.pagination | Pagination details for aml_request_data. |
| data.pagination.total | The total number of matched profiles (profiles whose result is "no match" are not counted). |
| data.pagination.per_page | The number of profiles per page (set with limit, default 25). |
| data.pagination.current_page | The page number being returned. |
| data.pagination.last_page | The number of the last page. |
| data.pagination.from | The position of the first profile on this page. |
| data.pagination.to | The position of the last profile on this page. |
| data.aml_request | Type: Object. The AML request as it was submitted, with its current status. |
| data.aml_request._id | Type: String. The AML request ID. |
| data.aml_request.search_name | Type: String. The name that was searched. |
| data.aml_request.entity_type | Type: Array of strings. The entity types searched. |
| data.aml_request.categories | Type: Array of strings. The AML categories searched. |
| data.aml_request.searched_categories | Type: Object. For each searched category, the number of matched profiles in it (0 when none). |
| data.aml_request.country_names | Type: Array of objects. The countries the search was limited to. Each object has country_name (String) and country_flag (String, URL of the flag image). Empty when no countries were sent. |
| data.aml_request.country_codes | Type: Array of strings. The country codes of country_names. |
| data.aml_request.fuzziness | Type: String. The fuzzy-match threshold used. |
| data.aml_request.exact_search | Type: Boolean. Whether only exact matches were requested. |
| data.aml_request.rca_search | Type: String ("true" or "false"), or null when not sent. Whether relatives and close associates were searched. |
| data.aml_request.alias_search | Type: String ("true" or "false"), or null when not sent. Whether aliases were searched. |
| data.aml_request.unique_identifier | Type: String or null. The unique identifier sent with the search. |
| data.aml_request.birth_incorporation_date | Type: String or null. The date of birth or incorporation sent with the search. |
| data.aml_request.biometric_search_image | Type: String or null. The image sent for a biometric search. |
| data.aml_request.ongoing_monitoring | Type: Boolean. Whether ongoing monitoring is turned on for the request. |
| data.aml_request.search_reference | Optional / Conditional. Type: String. The reference of the search in the AML screening engine, used for ongoing monitoring. It is saved when the search is completed, and returned only if the screening engine returned a reference for the search. |
| data.aml_request.request_type | Type: String. The kind of AML request. It is "for_company" for a direct AML search; AML checks started from a KYB check use "for_people" or other values. |
| data.aml_request.status | Type: String. "pending" or "resolved". |
| data.aml_request.match_status | Type: String. "potential match" or "no match", once resolved. "error message" when the screening engine returned no match status. |
| data.aml_request.services | Type: Array of strings. The services of the request. |
| data.aml_request.user_id, company_id, service_id | Type: String. The IDs of the user, account and service. |
| data.aml_request.created_at, updated_at, resolved_at | Type: String. When the request was created, last updated and resolved. |
Enhanced AML Search Profile
Description:
This response returns the full details of the AML profile you selected. The profile is identified by the "_id" you sent as "aml_company_id", taken from the Retrieving AML Search Profiles response (/api/readAmlResponse).
API:
https://api.thekyb.com/api/amlCompanyRead?aml_company_id=AML_COMPANY_ID&aml_request_id=AML_REQUEST_ID
Response:
{
"error": false,
"message": "Aml company",
"data": {
"_id": "",
"birth_incorporation_date": [
""
],
"categories": [
""
],
"countries": [
""
],
"data": {
"additional_information": {
"country_codes": [],
"dorm_date": [],
"ibcRUC": [
""
],
"original_name": [
""
],
"service_provider": [],
"source_url": [
""
],
"valid_until": [
""
]
},
"case_details": [
{
"authority": "",
"fine": "",
"decision_date": "",
"watchlist_type": ""
}
],
"crypto_wallets": [],
"identification_documents": [],
"linked_entities": [
{
"address": [],
"countries": [
""
],
"country_codes": [
""
],
"description": [],
"name": [
""
],
"status": [],
"type": [
""
],
"valid_until": [
""
]
}
],
"summary": {
"address": [],
"alias": [],
"country": [],
"dissolution_date": [
""
],
"inactive_date": [],
"incorporation_date": [
""
],
"jurisdiction": [
""
],
"name": [
"Apple",
"APPLE"
],
"status": [],
"type": []
}
},
"adverse_media": [],
"entity_types": [
""
],
"matched_alias": "",
"matched_names": [
{
"matched_name": "",
"matching_fields": {},
"record_id": "",
"score": "64",
"source_ids": [
""
]
},
{
"matched_name": "",
"matching_fields": {
"alias": false,
"birth_incorporation_date": false,
"exact_match": false,
"image": false,
"profile_name": true
},
"record_id": "",
"score": "64",
"source_ids": [
""
]
}
],
"matched_rca": "",
"name": "",
"previous_fields_data": [
{
"data.summary.alias": "Véronique Cabos",
"previous_data": "Véronique Cabbos",
"updated_at": "2024-07-06T00:03:58.000000Z"
}
],
"relevance_status": {
"alias": false,
"birth_incorporation_date": false,
"category": true,
"country": false,
"entity_type": false,
"exact_match": false,
"image_match": false,
"potential_match": true,
"profile_name": true,
"rca_name": false,
"unique_identifier": false,
"watchlist_type_match": false
},
"risk_level": "",
"source_details": [
{
"additional_sources": [],
"categories": [],
"countries": [],
"created_at": "",
"description": "",
"entity_id": "",
"publisher": "",
"updated_at": "",
"url": ""
}
],
"aml_request_id": "",
"service_id": "",
"aml_response_reference_id": "",
"updated_at": "",
"created_at": ""
}
}
Response Parameters:
| Parameter | Description |
|---|---|
| error | The "error" parameter can have a value of either "true" or "false." In the current scenario, since there were no errors during the request processing, the value of "error" is "false." However, in situations where errors occur, such as missing required parameters or criteria not being met, the value of the "error" parameter will change to "true". |
| message | The "message" field in API response formats provides a descriptive text or notification intended to convey additional information or instructions to the API consumer. It is commonly used to communicate relevant details about the response, such as success messages, error messages, or any other informative content that aids in understanding the outcome of the API request. The "message" field helps provide context and guidance to the API consumer regarding the status or result of the API operation. |
| data | The "data" field in API documentation refers to the main payload or content of the API response. It contains the actual information, results, or entities being transmitted back to the API consumer. The structure and format of the "data" field depend on the specific API and the nature of the response. |
The profile object has the same fields as each item of data.aml_request_data in Retrieving AML Search Profiles; see that table for each field's type and meaning. previous_fields_data here lists, for each changed field, the field path, its previous_data and when it changed (updated_at).
Technical Appendix
AML Categories
For AML Screening, the following categories are accepted.
| Category | Description |
|---|---|
| Fitness and Probity | Fitness and Probity refer to evaluating an individual's or entity's competence, skills, integrity, and ethical conduct in the financial services industry. |
| Warnings and Regulatory Enforcement | Warnings alert individuals or entities to rule violations, while regulatory enforcement involves imposing penalties or legal actions for non-compliance with laws and regulations. |
| Sanctions | Sanctions are penalties or restrictions imposed by authorities on individuals, organizations, or countries for violating laws or international norms. |
| Adverse Media | Refers to negative or damaging information about individuals, organizations, or entities that can pose significant risks to businesses and other institutions. |
| PEP Level 1 | High-risk PEPs - State and government executives, military/judicial/law enforcement leaders, parliament officials, prominent political party figures. |
| PEP Level 2 | Medium-high Risk PEPs - Senior state/military/law enforcement officials, high-rank civil servants, religious/state agency leaders, ambassadors/diplomats/commissioners. |
| PEP Level 3 | Medium-risk PEPs - Senior management in government-owned businesses, state organization board members. |
| PEP Level 4 | Low Risk PEPs - Senior officials/employees in international bodies, state/district assembly members. |
| SIP | SIP (Special Interest Person) - Special Interest Persons are individuals that present a heightened level of risk due to their suspected or confirmed involvement in criminal activity. |
| SIE | SIE (Special Interest Entity) - Special Interest Entities are companies/organisations that present a heightened level of risk due to their suspected or confirmed involvement in criminal activity. |
| Insolvency | Insolvency - Companies and organisations that are unable to pay their debts they owe or have been declared bankrupt by judicial process. |
