# SanctionScreen SanctionScreen is a per-call sanctions screening API for AI agents: company enrichment as MCP tools. No seats, no enterprise contract. Pay per call. - Web: https://sanctionsscreen.io - API docs: https://api.sanctionsscreen.io/docs [PLACEHOLDER — replace with real Worker URL] - MCP endpoint: https://api.sanctionsscreen.io/mcp [PLACEHOLDER — replace with real Worker URL] - Auth: API keys with `cs_live_` prefix, per-tool scopes (v1). OAuth 2.1 planned for Claude Connectors / ChatGPT listings. - Pricing (PROPOSED — not yet chargeable; needs the user's money decision): Free 50 calls/mo, PAYG screen $0.10 / enrich $0.15 / bundle $0.20, Starter $29/mo, Growth $99/mo. ## Tools ### screen_counterparty Screen a person or entity against sanctions lists with cited sources. Input: `{ name (string, required), country? (ISO-3166 alpha-2), dob? (YYYY-MM-DD), identifiers? ([{type, value}]), request_id? (idempotency), include_low_confidence? (default true) }` Output includes: `screening_id`, `disposition` (clear | potential_match | review_advised), `matches[]` each with `list`, `list_date`, `record_uid`, `matched_name`, `name_kind` (primary | alias_strong | alias_weak), `confidence` (high | medium | low), `confidence_score` (0-100), `matched_fields`, `citation` ({source, url, accessed_at}), the fixed disclaimer, `generated_at`. Disposition rules: no matches → `clear`; ≥1 high/medium match → `potential_match`; any high match corroborated by an identifier → `review_advised`. Language rule: results are reported as "potential match" — never "sanctioned" or "is on a list." Every response carries the fixed disclaimer: "Informational only — not a legal verdict. Not a substitute for due diligence. Human review required before any adverse action." All matches at or above the low threshold are always returned — hiding low-confidence matches is a compliance liability. Matches sorted by confidence, descending. Example input: ```json { "name": "Vladimir Putin", "country": "RU", "dob": "1952-10-07" } ``` Example output (schema): ```json { "screening_id": "cs_scr_…", "disposition": "review_advised", "matches": [ { "list": "OFAC_SDN", "list_date": "2026-09-23", "record_uid": "35096", "matched_name": "Putin Vladimir", "name_kind": "alias_strong", "confidence": "high", "confidence_score": 85, "matched_fields": ["name", "dob"], "citation": { "source": "…", "url": "…", "accessed_at": "…" } } ], "disclaimer": "Informational only — not a legal verdict. Not a substitute for due diligence. Human review required before any adverse action.", "generated_at": "…" } ``` ### enrich_company Look up a company's legal identity and profile. Input is `domain?` or `name?` (at least one), plus optional `request_id?`. Output: `{ company_id, legal_name, domain, industry, industry_code?, size_band, employee_range, hq: {country, city?}, founded?, sources: [{field, source, url}], confidence, generated_at }`. v1 data: GLEIF LEI data (free, public) for legal identity, plus one commodity enrichment API wrapped in this schema. Every field carries its source in `sources`. Example input: ```json { "domain": "acme.example" } ``` Example output (schema): ```json { "company_id": "cs_co_…", "legal_name": "ACME Corporation", "domain": "acme.example", "industry": "Manufacturing", "size_band": "201-500", "employee_range": [201, 500], "hq": { "country": "US", "city": "Austin" }, "sources": [{ "field": "legal_name", "source": "GLEIF", "url": "…" }], "confidence": "high", "generated_at": "…" } ``` ## Data sources (screening) - OFAC SDN list (ADVANCED XML), daily full refresh. Last verified live file: Publish_Date 2026-09-23. - EU consolidated sanctions list (FSD XML, daily) — PENDING: needs a free EU Login account; ships once the account exists. - UK FCDO sanctions list (CSV, OGL v3.0). - UN list: EXCLUDED from v1 on licensing grounds (EU regulations implement UN designations, so coverage largely overlaps). ## Matching method (summary) Unicode NFKD fold → strip punctuation → lowercase → transliterate (anyascii); index both token orderings per name variant. Alias expansion from OFAC akaList with strong/weak quality tiers. Confidence: exact(normalized)+1 identifier → high (≥85); exact name, no identifier → medium (≥60); fuzzy (Jaro-Winkler ≥0.92 or Levenshtein ≤2) → low (≥30). Identifier corroboration via DOB/place of birth/nationality/ID numbers. Calibrated on live OFAC data 2026-09-26: common names never produced a medium/high false positive; every low-tier match is returned, never hidden. Full schemas, few-shot examples, and the complete matching write-up: see llms-full.txt.