> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getcurrent.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Sanctions screening

> Screen businesses and their key people against global watchlists

Sanctions screening checks names against global sanctions databases. There are two ways to use it:

1. **As part of a search** — add `sanctionsScreening: true` to `POST /search` to screen the business alongside other data sources
2. **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:

```json theme={null}
{
  "name": "Acme Corp",
  "sanctionsScreening": true
}
```

Results appear in the `sanctions` field of the response. See [Response structure](/concepts/response-structure#sanctions) for the full schema.

<Note>
  When `sanctionsScreening` is omitted, whether screening runs follows your
  account's configured search settings. Pass `sanctionsScreening: true` (or
  `false`) to override that for a single search.
</Note>

## 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.

```json theme={null}
{
  "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.

<Info>
  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".
</Info>

## Partial failures

If the sanctions service is unavailable, the search still completes with other data. Check the `errors` object in the response:

```json theme={null}
{
  "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.

```json theme={null}
{
  "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

```json theme={null}
{
  "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
}
```

### `meta`

| 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:

```json theme={null}
{
  "errors": {
    "code": "UPSTREAM_ERROR",
    "message": "Cannot connect to sanctions search service",
    "retryable": true
  }
}
```

<Warning>
  **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.
</Warning>
