Sanction
AML Screening

AML Screening

AML screening checks a subject against official sanctions lists, politically exposed persons (PEP) and other risk domains. Every risk domain is screened by default; you can narrow the scope.

The full endpoint contract lives on its own page: Sanctions Screening API. This page covers the two decisions you make when calling it — scope (risk domains or mode) and threshold.

Choosing a mode

You set the scope in one of two ways:

  • riskDomains — pick the risk domains to screen one by one (sanctions, pep, rca, wanted, regulatory, debarment, ownership, vessel, securities). What each one means: Risk domains.
  • mode — pick a preset set of risk domains (below).

Send neither and every risk domain is screened. Send both and their intersection is screened; an empty intersection is refused with sanction.screening.scope_invalid (400).

Screening mode scopeLayer stack: the narrowest mode screens official sanctions lists only; the next adds politically exposed persons; the widest covers every risk domain and is the default. Each layer contains the one below it.full_riskevery risk domain — defaultsanctions_pep+ pep · rcasanctions_onlysanctions · wanted · regulatory · debarmentLEGENDNARROWEST SCOPEWIDER SCOPE
Narrowing is not safer, only narrower: no match in a risk domain that was not screened is not a clean result. Pick the scope your obligation requires — and state which one you picked in your compliance record; screenedRiskDomains in the response records it.
ModeRisk domains screenedWhen
sanctions_onlysanctions, wanted, regulatory, debarmentWhen sanctions screening is your only obligation
sanctions_pep+ pep, rcaWhen you also carry a PEP obligation (most financial institutions)
full_riskEvery risk domain — the same as sending no modeBroad scope / high-risk customer segment

Setting the threshold

threshold (0–1) is the minimum similarity score a match needs before it is returned to you.

ThresholdEffect
High (e.g. 0.95)Fewer hits, less review load — but a higher chance of missing one
Low (e.g. 0.70)Many hits, many false positives — your review team drowns
⚠️

Lowering the threshold is not "safer". A pile of hits nobody can work through shows up in an audit as unreviewed alerts — a worse picture than never raising them. Set the threshold to the volume your team can genuinely close.

The way to cut false positives without touching the threshold is to send more disambiguators: dateOfBirth, identifiers (national/tax id), country. They do not change the score, they improve match precision.

Risk domains

Every match reports which risk domain it came from via riskDomains — sanctions, pep, rca, wanted and so on. The same name can appear in several; split your decision by domain:

  • sanctions — usually a hard block
  • pep · rca — not a block, a trigger for enhanced due diligence
  • other domains — down to your policy

Do not wire a PEP match to an automatic block. Being a PEP is not a crime; the obligation is to monitor the relationship more closely. An automatic block loses legitimate customers and does not match the regulatory expectation either.

Onboarding screening ≠ ongoing monitoring

A one-off screening is a snapshot of that moment. The lists change daily; a customer who is clear today can be listed tomorrow.

POST /api/v1/sanction/monitoring/register     # register a subject
GET  /api/v1/sanction/monitoring/alerts       # new match alerts

The register call also takes the monitoring frequency and scope:

FieldNotes
externalCustomerIdYour own customer id
subjectTypePerson or organization
frequencyDAILY · WEEKLY · MONTHLY (defaults to DAILY)
riskDomainScopeWhich risk domains to monitor against (empty = every risk domain)
⚠️

Screening at onboarding and not registering for monitoring is the most common gap in a compliance programme: the file closes because the customer was clear on day one, and the later listing goes unnoticed. They are two separate obligations.

Related