Sanctions screening checks names against global sanctions databases. There are two ways to use it:
- As part of a search — add
sanctionsScreening: true to POST /search to screen the business alongside other data sources
- Standalone — use
POST /sanctions to screen any name independently, with full control over matching parameters
Coverage
Current maintains indexed copies of 10 sanctions sources, updated regularly:
| Source | Key |
|---|
| US OFAC SDN List | us-sanctions-ofac-sdn |
| US OFAC Consolidated (non-SDN) | us-sanctions-ofac-consolidated |
| Canada Public Safety (s.83.05) | ca-sanctions-terrorist-entities |
| Canada Global Affairs (SEMA) | ca-sanctions-autonomous |
| EU DG FISMA | eu-sanctions-consolidated |
| UK FCDO | uk-sanctions-list |
| UN Security Council | un-sanctions-consolidated |
| Netherlands Terrorism List | nl-sanctions-terrorism |
| Australia DFAT | au-sanctions-consolidated |
| Switzerland SECO | ch-seco-sanctions |
Screening via search
Add sanctionsScreening: true to your search request:
{
"name": "Acme Corp",
"sanctionsScreening": true
}
Results appear in the sanctions field of the response. See Response structure for the full schema.
Configuration
Screening works out of the box with sensible defaults, but you can tune it to match your compliance requirements.
Match threshold
The sanctionsThreshold parameter controls how strict the name matching is (70–100, default 85):
| Threshold | Behavior |
|---|
| 70–79 | Cast a wider net — more matches, but more false positives to review |
| 80–89 | Balanced (recommended starting point: 85) |
| 90–100 | Stricter — only near-exact name matches, minimal review burden |
Lower the threshold if your compliance program requires maximum coverage and you have capacity to review more results. Raise it if you want to reduce noise and are comfortable with a tighter match window.
Screening toggle
Screening is off by default. Enable it per request with sanctionsScreening: true, or enable it for all searches in your dashboard settings. This lets you control costs and only screen when relevant to your workflow.
Response structure
When sanctionsScreening: true, the response includes a sanctions object with query, totalMatches, and matches. An empty matches array means no matches were found — a clear result.
{
"sanctions": {
"query": "Acme Corp",
"totalMatches": 1,
"matches": [
{
"legalName": {
"name": "ACME CORPORATION",
"matchScore": 0.91,
"matchedName": "ACME CORPORATION",
"nameScores": [
{ "name": "ACME CORPORATION", "score": 0.91 },
{ "name": "Acme Corp", "score": 0.95 }
]
},
"alternateNames": ["Acme Corp"],
"addresses": [],
"details": {
"source": "us-sanctions-ofac-sdn",
"datasets": ["us-sanctions-ofac-sdn"],
"countries": ["US"],
"programs": [],
"identifiers": [],
"listingDate": null,
"dateOfBirth": null,
"remarks": null
},
"sourceUrls": []
}
]
}
}
| Field | Description |
|---|
query | The name that was screened |
totalMatches | Number of matched entities (0 = clear) |
legalName.name | The sanctioned entity’s name as it appears in the database |
legalName.matchScore | Match confidence (0–1). Higher = more similar to your query. |
legalName.matchedName | Which name or alias produced the best score |
legalName.nameScores | Per-name/alias match scores for transparency |
alternateNames | Other names associated with the sanctioned entity |
details.source | Which sanctions list flagged this entity |
details.datasets | All sanctions lists that flagged this entity |
details.countries | Countries associated with the entity |
sourceUrls | Direct links to the entity record for human review |
How matching works
Screening runs through three stages to find relevant matches while minimizing false positives:
1. Fuzzy search
The business name is searched against all sanctions collections simultaneously using fuzzy text matching. Minor spelling differences, accented characters (e.g., “Müller” vs “Muller”), and punctuation variations are handled automatically so that legitimate matches aren’t missed due to formatting differences.
2. Name similarity scoring
Every candidate result is scored based on how similar the queried name is to the sanctioned entity’s legal name and all known aliases. The highest-scoring name wins. Results below your configured sanctionsThreshold are discarded — this is your primary lever for balancing thoroughness against review volume.
3. Word-level verification
Results that pass the score threshold go through a final check: do the individual words in the business name actually correspond to words in the matched entity’s name? This catches legitimate spelling variations (e.g., “Kapital” matching “Capital”) while filtering out coincidental matches where the overall name looks similar but no individual words actually line up.
Common business designators like “Inc”, “Ltd”, “Corp”, and “GmbH” are ignored during comparison so they don’t affect match quality. “Sberbank Capital Inc” correctly matches “Sberbank Capital Ltd”.
Partial failures
If the sanctions service is unavailable, the search still completes with other data. Check the errors object in the response:
{
"errors": {
"sanctions": {
"code": "UNAVAILABLE",
"message": "Sanctions service temporarily unavailable",
"retryable": true
}
}
}
Standalone screening
POST /sanctions lets you screen any name without running a full business search. This is useful for batch screening, screening individuals, or integrating sanctions checks into your own workflows.
{
"query": "Vladimir Putin",
"entityType": "individual",
"countries": ["RU"]
}
Request parameters
| Parameter | Type | Default | Description |
|---|
query | string | required | Name to screen |
typoTolerance | 0, 1, or 2 | 1 | Character edits allowed when matching |
nameVariants | boolean | true | Search common name variants and transliterations |
entityType | string | — | Filter to individual, entity, vessel, or aircraft |
countries | string[] | — | Filter by ISO2 country codes |
sources | string[] | all | Limit to specific sanctions lists (see coverage table) |
dateOfBirth | string | — | Filter by DOB in YYYY-MM-DD format (partial dates accepted) |
Response structure
{
"meta": {
"screeningId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"screenedAt": "2024-01-15T10:30:00Z",
"duration": 342,
"status": "completed",
"submitted": {
"query": "Vladimir Putin",
"entityType": "individual",
"countries": ["RU"]
}
},
"screening": {
"query": "Vladimir Putin",
"totalMatches": 1,
"matches": [
{
"legalName": {
"name": "Vladimir Vladimirovich PUTIN",
"matchScore": 0.95,
"matchedName": "Vladimir Vladimirovich PUTIN",
"nameScores": [
{ "name": "Vladimir Vladimirovich PUTIN", "score": 0.95 },
{ "name": "Владимир Путин", "score": 0.72 },
{ "name": "Wladimir Putin", "score": 0.88 }
]
},
"alternateNames": ["Владимир Путин", "Wladimir Putin"],
"entityType": "individual",
"details": {
"source": "us-sanctions-ofac-sdn",
"countries": ["RU"],
"programs": ["RUSSIA-EO14024"],
"identifiers": [],
"listingDate": "2022-02-25",
"dateOfBirth": "1952-10-07",
"remarks": null
},
"sourceUrls": ["https://sanctionssearch.ofac.treas.gov/..."]
}
]
},
"sourceCounts": {
"ofacSdn": 1,
"ofacConsolidated": 0,
"caTerroristEntities": 0,
"caAutonomousSanctions": 1,
"euConsolidated": 1,
"ukList": 1,
"unConsolidated": 0,
"nlTerrorism": 0,
"auConsolidated": 1,
"chSeco": 1
},
"errors": null
}
| Field | Description |
|---|
screeningId | UUID for this screening request |
screenedAt | ISO 8601 timestamp |
duration | Time in milliseconds |
status | completed or error |
submitted | Echo of your request parameters |
screening
Contains query (echo of the screened name), totalMatches (count), and matches (array of matched entities sorted by matchScore descending).
| Field | Description |
|---|
query | The name that was screened |
totalMatches | Number of matched entities (0 = clear result) |
matches[].legalName.name | The sanctioned entity’s name as it appears in the database |
matches[].legalName.matchScore | Match confidence (0–1). Higher = more similar to your query. |
matches[].legalName.matchedName | Which name or alias produced the best score |
matches[].legalName.nameScores | Per-name/alias match scores for transparency |
matches[].alternateNames | Other names and aliases for the entity |
matches[].entityType | Type of entity (individual, entity, vessel, aircraft) |
matches[].details.source | Which sanctions list flagged this entity |
matches[].details.countries | Countries associated with the entity |
matches[].details.programs | Sanctions programs the entity is listed under |
matches[].details.identifiers | Passport numbers, tax IDs, and other identifying documents |
matches[].details.listingDate | When the entity was added to the list |
matches[].details.dateOfBirth | Date of birth for individuals (may be partial) |
matches[].details.remarks | Additional notes from the sanctions source |
matches[].sourceUrls | Direct links to the entity record for human review |
sourceCounts
Shows how many matches were found in each sanctions source, regardless of filtering. Useful for understanding the breadth of matches across lists.
errors
null when screening completes successfully. When status is error, contains structured error details:
{
"errors": {
"code": "UPSTREAM_ERROR",
"message": "Cannot connect to sanctions search service",
"retryable": true
}
}
Sanctions screening requires human review. A match indicates similarity
between names — it is not a definitive determination. Always have a compliance
professional review matches before taking action. The sourceUrls field links
directly to the entity record to assist review.