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:
- Intake: agent receives a counterparty name (and ideally country, DOB, address) from a form, an email, or another tool.
- Pre-screen (this is where Jintel sits): hit
sanctionsScreento 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. - Full screen: the compliance-grade vendor runs the same name across every list, plus PEP, plus adverse media.
- 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
- TypeScript SDK
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
import { JintelClient } from "@yojinhq/jintel-client";
const jintel = new JintelClient({ apiKey: process.env.JINTEL_API_KEY });
const { data } = await jintel.request(`
query Screen($name: String!, $country: String) {
sanctionsScreen(
name: $name
country: $country
filter: { minScore: 70, limit: 10, sort: DESC }
) {
listName matchedName score programs sdnType details
}
sanctionsDisclaimer
}
`, { name: "Vladimir Putin", country: "RU" });
const hits = data.sanctionsScreen.filter((m) => m.score >= 90);
if (hits.length) {
// route to compliance-grade vendor + human review
}
// always surface data.sanctionsDisclaimer to the end user
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
- Sanctions data page — schema reference and filter inputs.
- Authentication — getting an API key for backend callers.
- Agents & x402 — pay-per-query without signup, useful for one-shot agent runs.