API documentation
The AML Screen API screens names against every sanctions, PEP, wanted, debarment and regulator warning list we carry, cryptocurrency wallet addresses against sanctioned and flagged wallets, and names against news and web sources for adverse media. Every endpoint is a POST that takes and returns JSON.
Endpoints
Name screening
Screen one name against every list at once. Returns matches from the aggregated list, so every match has the same shape.
POST /api/v2/search
Bulk name screening
Screen many names in one request. Results interleave a summary row per name with its matches.
POST /api/v2/bulk-search
Cryptocurrency wallet screening
Check one address or many against sanctioned and flagged cryptocurrency wallets, with the entity behind a listing where there is one.
POST /api/v2/wallet-search · POST /api/v2/bulk-wallet-search
Adverse media screening
Search news and web sources for negative coverage of a name, scored by what the subject actually did rather than by what the article is about.
POST /api/v2/adverse-media-search · POST /api/v2/adverse-media-search-raw
Entry details
The full published record for an exact name. The response is keyed by source list, and each list has its own fields.
POST /api/entry-details
Legacy v1Deprecated
The original endpoints. Still served, but they cannot see the eleven lists added since, so a v1 search can report a party clear that v2 finds.
POST /api/v1/search · POST /api/v1/bulk-search
Authentication
Send your API key in the x-api-key header on every request. Keys are created in the dashboard.
x-api-key: YOUR_API_KEY
Bulk name screening, bulk wallet screening, scored adverse media screening and entry details also accept a signed-in user’s bearer token, which is how the dashboard calls them. Unscored adverse media search takes a key only. For an integration, use an API key either way.
Search types
Name screening takes an optional search_type that sets how tolerant matching is. Anything else is rejected with a 400.
| Field | Type | Description |
|---|---|---|
fuzzy_search | string | Vector similarity. The most tolerant of spelling and transliteration differences, and the default for single-name screening. Not available for bulk screening. |
permissive_match | string | Wide text matching. Returns more candidates for review, and the default for bulk screening. |
standard_match | string | The balance between recall and noise that suits most onboarding checks. |
strict_match | string | Tight matching. Fewest false positives, most likely to miss a spelling variant. |
Rate limits
Each key has its own per-minute limit, 60 requests a minute unless yours says otherwise. Going over returns 429 with a Retry-After header giving the seconds to wait.
Errors
Errors return the matching status code and a body of { "error": "..." }. A failed request is still recorded against your key.
| Field | Type | Description |
|---|---|---|
400 | Bad Request | A required field is missing or malformed: no prompt, an unknown search_type, or additional_call_info that is not an object. |
401 | Unauthorized | The x-api-key header is missing, or the key is not valid. |
429 | Too Many Requests | Your key's per-minute limit is exhausted. Check Retry-After. |
500 | Server Error | Something failed on our side. The request was not screened. |
Usage tracking
Every v2 response carries an api_usage_id, the identifier of the usage record written for that call. Keep it if you need to tie a screening decision back to the exact request and response we hold.
You can also send an additional_call_info object on any v2 request. It is stored alongside the usage record and returned in your screening history, which is the place to put your own reference for the check.
{
"prompt": "John Smith",
"additional_call_info": {
"customer_id": "CUS-4192",
"reviewed_by": "onboarding-team"
}
}api_usage_id.We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.