Skip to main content

Sanctions screening API for AI agents

Agents that onboard counterparties, route payments, or generate research reports often need a fast "is this name on a sanctions list" check. Jintel's sanctionsScreen(name, country) query covers that — name-based fuzzy lookup against the US OFAC Specially Designated Nationals (SDN) list, returned as a typed GraphQL response.

Read this disclaimer first

Jintel's sanctions screening is a public-data convenience, not a compliance-grade product. It only covers the OFAC SDN list. It does not cover:

  • The EU Consolidated Financial Sanctions List (CFSP)
  • UK HM Treasury (OFSI) Consolidated List
  • UN Security Council Consolidated List
  • Australia DFAT, Canada SEMA, Switzerland SECO, etc.
  • Politically Exposed Persons (PEP) databases
  • Adverse media / negative-news screening

Do not use this endpoint as your sole source of truth for KYC / AML / sanctions compliance decisions. Use it the way it's intended: as a fast pre-filter, a triage signal, or a component inside a larger pipeline that includes a compliance-grade vendor (LSEG World-Check, Dow Jones Risk Center, Refinitiv, ComplyAdvantage, Sumsub, Persona, etc.) and human review where the regulator requires it.

The schema itself enforces this — the field carries a DISCLAIMER description, and sanctionsDisclaimer is a free query that returns the full notice text. Surface that text to end users alongside any results.

Where this fits in an agent pipeline

A typical use is the pre-screening stage of a counterparty onboarding agent:

  1. Intake: agent receives a counterparty name (and ideally country, DOB, address) from a form, an email, or another tool.
  2. Pre-screen (this is where Jintel sits): hit sanctionsScreen to see if the SDN list has any high-score matches. If there's a clean miss, the agent can proceed with normal onboarding. If there's any hit above a configurable threshold, route to a compliance-grade vendor and a human reviewer.
  3. Full screen: the compliance-grade vendor runs the same name across every list, plus PEP, plus adverse media.
  4. Adjudicate: a human reviews any non-clean result before the counterparty is approved.

The value of a pre-filter is purely speed — most names are clean, and you'd rather not pay $0.40 to a compliance vendor for every clean check. Jintel costs a fraction of a cent per query and returns in under a second on a warm cache.

Match scoring

SanctionsMatch.score is a 0–100 fuzzy similarity score. Use the filter: { minScore: … } argument to drop low-confidence noise. A common pattern:

  • minScore: 90 — extremely tight; only catches near-exact matches. Misses transliteration variants.
  • minScore: 70 — recommended threshold for triage; most legitimate matches land here.
  • minScore: 50 — broad sweep; expect false positives, useful for "explain why this name might be flagged."

Combine with country to disambiguate common names ("Mohamed Ali" alone is not screening, "Mohamed Ali" + country: "SY" against the Syria program is).

Code

curl https://api.jintel.ai/api/graphql \
-H "Authorization: Bearer $JINTEL_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<'JSON'
{
"query": "query($name:String!,$country:String){sanctionsScreen(name:$name,country:$country,filter:{minScore:70,limit:10,sort:DESC}){listName matchedName score programs sdnType details} sanctionsDisclaimer}",
"variables": { "name": "Vladimir Putin", "country": "RU" }
}
JSON

The same query is also exposed as a structured tool entry on the x-jintel-tools catalog, so MCP clients and LLM tool-callers can discover it by name without hand-coding the schema.

Where to go next