Business AML Check
Use this check to verify whether a business is sanctioned and listed on international watchlists.
This API can be used to verify whether a business is listed in any watchlists from across the world such as:
- OFAC, SDN, Interpol, FBI etc.
- Criminal lists, Most Wanted lists from different countries.
- Adverse Media(Bad press) matches.
Request
{
"template_id" : "{{YOUR_TEMPLATE_ID}}",
"business_data": {
"name": "Test Inc.",
"country_code": "2 letter Country Code - Optional"
}
}Response
The AML result is returned inside the aml_info block on the verification response. The aml_info schema is identical to the User AML Check response — only entity_hits[*].entity_type distinguishes business hits (COMPANY / ORGANISATION) from person hits (PERSON). Fields with null values are omitted from the response.
Top-level
{
"status": "COMPLETED | FAILED | PENDING",
"result": "APPROVED | DECLINED | REVIEW | UNKNOWN",
"aml_info": { ... }
}aml_info
aml_info{
"status": "COMPLETED | FAILED | PENDING",
"num_hits": 0,
"entity_hits": [ /* see entity_hits */ ],
"result": "APPROVED | DECLINED | REVIEW | UNKNOWN",
"section_id": "<uuid>",
"warnings": [ /* see warnings */ ],
"aml_hit_summary": {
"SANCTION": 0,
"ADVERSE_MEDIA": 2,
"WARNING": 0
},
"search_criteria": {
"search_term": "Test Inc.",
"fuzziness_score": 0.6,
"exact_match": false
},
"status_reasons": [ { "code": "...", "message": "..." } ]
}| Field | Type | Notes |
|---|---|---|
status | enum | Run-level status. COMPLETED, FAILED, or PENDING. |
num_hits | int | Total number of matched entities. |
entity_hits | array | One per matched entity. See below. |
result | enum | Auto-derived: APPROVED if zero hits, REVIEW if ≥1 hit, DECLINED on input-validation failures, UNKNOWN otherwise. |
section_id | uuid | Stable identifier for this AML section — use to correlate resolution status updates. |
warnings | array | Non-fatal warnings produced during the run. See below. |
aml_hit_summary | object | Hit counts keyed by hit type. Adverse-media sub-types roll up to ADVERSE_MEDIA. PEP keys are not typically populated for business checks. |
search_criteria | object | The query used. fuzziness_score is 0.0–1.0. birth_year is only present for person searches. |
status_reasons | array | Present only on failure. |
Failure shapes
When the run fails or required input is missing, aml_info collapses to one of:
// Missing required input (e.g. no business name)
{
"status": "COMPLETED",
"result": "DECLINED",
"warnings": [{ "code": "API_DATA_REQUIREMENTS_NOT_MET", "message": "Missing business name to run check." }]
}
// Provider call failed
{
"status": "FAILED",
"status_reasons": [{ "code": "THIRD_PARTY_API_FAILED", "message": "..." }]
}
// Provider response unparseable
{
"status": "FAILED",
"status_reasons": [{ "code": "THIRD_PARTY_RESPONSE_ERROR", "message": "..." }]
}entity_hits[*]
entity_hits[*]One object per matched entity. For business AML checks, entity_type is typically COMPANY or ORGANISATION, but related people (e.g. directors, UBOs) surfaced by the source may appear as PERSON.
{
"entity_type": "PERSON | COMPANY | ORGANISATION | UNKNOWN",
"name": "Matched name",
"name_match_score": 87.5,
"also_known_as": ["Test Incorporated", "Test Holdings Inc."],
"associates": [
{ "name": "Jane Doe", "association": "director" }
],
"aml_hits": [ /* see aml_hits */ ],
"id": "<uuid>",
"resolution_status": "UNRESOLVED | RESOLVED | WHITELISTED",
"is_deleted": false,
"aml_agent_analysis": { /* AI agent output: relevance, severity, recommendation, citations */ },
"history": [ /* monitoring timeline */ ]
}| Field | Type | Notes |
|---|---|---|
entity_type | enum | PERSON / COMPANY / ORGANISATION / UNKNOWN. |
name | string | Matched name on the source side. |
name_match_score | float | Score 0–100 of how closely the source name matches the input. |
date_of_birth | string | YYYY-MM-DD. Only populated for person hits. |
date_of_birth_match_score | float | Score 0–100 of DOB match. Only populated for person hits. |
also_known_as | array<string> | Known aliases / trading names. |
associates | array | Each: { name, association }. For businesses, common associations include directors, officers, and UBOs. |
aml_hits | array | One per source the entity appears on (a single sanctions list, a single adverse-media cluster, etc). |
id | uuid | Stable identifier for this hit — use to attach resolution decisions. |
resolution_status | enum | UNRESOLVED / RESOLVED / WHITELISTED. Reflects the latest status. |
is_deleted | bool | true if the source removed this hit (relevant for ongoing monitoring). |
aml_agent_analysis | object | Present when AiPrise's AML AI Agent has run. Contains relevance score, severity assessment, recommendation, reasoning, citations. |
history | array | Timeline of monitoring updates for this entity. Present when continuous monitoring is enabled. |
aml_hits[*]
aml_hits[*]One entry per source the entity appears on. An entity on N lists produces N entries.
{
"hit_type": "SANCTION",
"source_details": {
"name": "OFAC SDN List",
"source_id": "ofac-sdn-list",
"url": "https://...",
"listing_started": "1577836800",
"listing_ended": null,
"country_codes": ["US"],
"aml_types": ["sanction"]
},
"fields": [
{ "name": "Country", "value": ["US", "GB"], "type": "country_codes" }
],
"media": [
{ "title": "...", "url": "https://...", "date": "1700000000", "snippet": "..." }
]
}| Field | Type | Notes |
|---|---|---|
hit_type | enum | See enums below for the full list. |
source_details | object | Metadata about the list/source. |
source_details.listing_started / listing_ended | string | Unix timestamp in seconds, as a string. |
source_details.country_codes | array<string> | May contain country codes or full country names depending on the source. |
source_details.aml_types | array<string> | Granular provider-taxonomy classification tags — lowercase, hyphenated (e.g. adverse-media-v2-fraud-linked). See source_details.aml_types below for the full set. |
fields | array | Structured fields from the source. Each: { name, value, type? }. value can be a string, list, or dict. |
media | array | Populated only when hit_type is ADVERSE_MEDIA. Each: { title, url, date, snippet }. date is a Unix-seconds string. |
source_details.aml_types
source_details.aml_typesaml_types carries the granular, source-side classification for a hit as lowercase, hyphenated tags. This is distinct from the hit's hit_type, which is the uppercase roll-up category (SANCTION, PEP, ADVERSE_MEDIA, WARNING, …). For example, an adverse-media hit always has hit_type ADVERSE_MEDIA, while its specific sub-category appears in aml_types as e.g. adverse-media-v2-fraud-linked.
These are provider-taxonomy tags, not a customer-defined enum. Any finer-grained categorization on your side must map into these returned values — we do not return more granular offense-level codes.
The full set of values:
sanctionwarningpep,pep-class-1,pep-class-2,pep-class-3,pep-class-4fitness-probityadverse-media
Adverse-media sub-categories:
adverse-media-v2-financial-aml-cftadverse-media-v2-fraud-linkedadverse-media-v2-narcotics-aml-cftadverse-media-v2-terrorismadverse-media-v2-violence-aml-cftadverse-media-v2-violence-non-aml-cftadverse-media-v2-cybercrimeadverse-media-v2-propertyadverse-media-v2-regulatoryadverse-media-v2-financial-difficultyadverse-media-v2-other-financialadverse-media-v2-other-seriousadverse-media-v2-other-minoradverse-media-v2-general-aml-cft
Enforcement / WARNING hits
WARNING hitsEnforcement, regulator, and law-enforcement list matches are surfaced with hit_type WARNING. For these hits, source_details.aml_types is always ["warning"] — there are no sub-types. The specific list that triggered the hit is identified by:
source_details.source_id— machine-readable list identifier.source_details.name— human-readable list name.
These list identifiers are not a fixed enum. They come from our screening provider, span hundreds of country-specific regulator and law-enforcement lists, and grow over time. Integrators should key their rules on hit_type == WARNING and treat source_id / name as free-form metadata rather than matching against a hardcoded set.
Representative (non-exhaustive) examples:
source_id | name |
|---|---|
fbi-most-wanted | FBI Most Wanted |
new-zealand-police | NZ Police Designated Terrorists |
fca-warnings | UK FCA Warning List |
italian-companies-and-exchange-commission-warnings | CONSOB (Italy) |
international-organization-of-securities-commissions-iosco | IOSCO Investor Alerts |
malta-financial-services-authority-notices-and-decisions | MFSA (Malta) |
portugal-securities-and-makets-authority-unauthorized-international-financial-intermediaries | CMVM (Portugal) |
Enums
status — run status: COMPLETED, FAILED, PENDING.
result — overall verdict: APPROVED (no hits), REVIEW (≥1 hit), DECLINED (input requirements not met), UNKNOWN.
resolution_status — UNRESOLVED (default), RESOLVED, WHITELISTED.
entity_type — PERSON, COMPANY, ORGANISATION, UNKNOWN.
hit_type — top-level (roll-up) types, used as keys in aml_hit_summary:
SANCTIONPEPADVERSE_MEDIAWARNINGFITNESS_PROBITYCRIMINAL_RECORDLEGAL_BACKGROUNDUNKNOWN
PEP sub-classes (roll up to PEP in aml_hit_summary):
PEP_CLASS_1,PEP_CLASS_2,PEP_CLASS_3,PEP_CLASS_4
Adverse-media hits are not sub-classed in hit_type: every adverse-media hit carries hit_type ADVERSE_MEDIA. The granular adverse-media classification is carried in source_details.aml_types as a lowercase, hyphenated tag (e.g. adverse-media-v2-fraud-linked) — see source_details.aml_types for the full set.
aml_hit_summary keys are always the top-level roll-up type. An individual aml_hits[*].hit_type for a PEP match may be a PEP sub-class (PEP_CLASS_1–PEP_CLASS_4), which rolls up to PEP in the summary.
fields[*].type — date_of_birth, place_of_birth, date_of_death, country_codes, country_names, url.
Warnings & status reasons
warnings[*]:
{
"code": "API_DATA_REQUIREMENTS_NOT_MET",
"message": "Human-readable description",
"resolution_status": "UNRESOLVED | RESOLVED | WHITELISTED",
"warning_id": "<uuid>"
}codeidentifies the warning class.messageis a human-readable description.warning_idis stable — use to track resolution over time.
status_reasons[*]:
{ "code": "THIRD_PARTY_API_FAILED", "message": "..." }Common AML status reasons:
THIRD_PARTY_API_FAILED— upstream provider call errored.THIRD_PARTY_RESPONSE_ERROR— upstream provider returned an unparseable response.
Updated 19 days ago
