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:

  1. OFAC, SDN, Interpol, FBI etc.
  2. Criminal lists, Most Wanted lists from different countries.
  3. 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

{
    "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": "..." } ]
}
FieldTypeNotes
statusenumRun-level status. COMPLETED, FAILED, or PENDING.
num_hitsintTotal number of matched entities.
entity_hitsarrayOne per matched entity. See below.
resultenumAuto-derived: APPROVED if zero hits, REVIEW if ≥1 hit, DECLINED on input-validation failures, UNKNOWN otherwise.
section_iduuidStable identifier for this AML section — use to correlate resolution status updates.
warningsarrayNon-fatal warnings produced during the run. See below.
aml_hit_summaryobjectHit counts keyed by hit type. Adverse-media sub-types roll up to ADVERSE_MEDIA. PEP keys are not typically populated for business checks.
search_criteriaobjectThe query used. fuzziness_score is 0.01.0. birth_year is only present for person searches.
status_reasonsarrayPresent 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[*]

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 */ ]
}
FieldTypeNotes
entity_typeenumPERSON / COMPANY / ORGANISATION / UNKNOWN.
namestringMatched name on the source side.
name_match_scorefloatScore 0100 of how closely the source name matches the input.
date_of_birthstringYYYY-MM-DD. Only populated for person hits.
date_of_birth_match_scorefloatScore 0100 of DOB match. Only populated for person hits.
also_known_asarray<string>Known aliases / trading names.
associatesarrayEach: { name, association }. For businesses, common associations include directors, officers, and UBOs.
aml_hitsarrayOne per source the entity appears on (a single sanctions list, a single adverse-media cluster, etc).
iduuidStable identifier for this hit — use to attach resolution decisions.
resolution_statusenumUNRESOLVED / RESOLVED / WHITELISTED. Reflects the latest status.
is_deletedbooltrue if the source removed this hit (relevant for ongoing monitoring).
aml_agent_analysisobjectPresent when AiPrise's AML AI Agent has run. Contains relevance score, severity assessment, recommendation, reasoning, citations.
historyarrayTimeline of monitoring updates for this entity. Present when continuous monitoring is enabled.

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": "..." }
    ]
}
FieldTypeNotes
hit_typeenumSee enums below for the full list.
source_detailsobjectMetadata about the list/source.
source_details.listing_started / listing_endedstringUnix timestamp in seconds, as a string.
source_details.country_codesarray<string>May contain country codes or full country names depending on the source.
source_details.aml_typesarray<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.
fieldsarrayStructured fields from the source. Each: { name, value, type? }. value can be a string, list, or dict.
mediaarrayPopulated only when hit_type is ADVERSE_MEDIA. Each: { title, url, date, snippet }. date is a Unix-seconds string.

source_details.aml_types

aml_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:

  • sanction
  • warning
  • pep, pep-class-1, pep-class-2, pep-class-3, pep-class-4
  • fitness-probity
  • adverse-media

Adverse-media sub-categories:

  • adverse-media-v2-financial-aml-cft
  • adverse-media-v2-fraud-linked
  • adverse-media-v2-narcotics-aml-cft
  • adverse-media-v2-terrorism
  • adverse-media-v2-violence-aml-cft
  • adverse-media-v2-violence-non-aml-cft
  • adverse-media-v2-cybercrime
  • adverse-media-v2-property
  • adverse-media-v2-regulatory
  • adverse-media-v2-financial-difficulty
  • adverse-media-v2-other-financial
  • adverse-media-v2-other-serious
  • adverse-media-v2-other-minor
  • adverse-media-v2-general-aml-cft

Enforcement / WARNING hits

Enforcement, 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_idname
fbi-most-wantedFBI Most Wanted
new-zealand-policeNZ Police Designated Terrorists
fca-warningsUK FCA Warning List
italian-companies-and-exchange-commission-warningsCONSOB (Italy)
international-organization-of-securities-commissions-ioscoIOSCO Investor Alerts
malta-financial-services-authority-notices-and-decisionsMFSA (Malta)
portugal-securities-and-makets-authority-unauthorized-international-financial-intermediariesCMVM (Portugal)

Enums

status — run status: COMPLETED, FAILED, PENDING.

result — overall verdict: APPROVED (no hits), REVIEW (≥1 hit), DECLINED (input requirements not met), UNKNOWN.

resolution_statusUNRESOLVED (default), RESOLVED, WHITELISTED.

entity_typePERSON, COMPANY, ORGANISATION, UNKNOWN.

hit_type — top-level (roll-up) types, used as keys in aml_hit_summary:

  • SANCTION
  • PEP
  • ADVERSE_MEDIA
  • WARNING
  • FITNESS_PROBITY
  • CRIMINAL_RECORD
  • LEGAL_BACKGROUND
  • UNKNOWN

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_1PEP_CLASS_4), which rolls up to PEP in the summary.

fields[*].typedate_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>"
}
  • code identifies the warning class.
  • message is a human-readable description.
  • warning_id is 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.

Did this page help you?