OFAC API Response
POST /v1/screen returns one subject at the top level. POST /v1/screen/batch returns the same match objects inside a results array, one entry per subject. Both responses are synchronous.
Single response
metadata, subject_ref, subject_type, and matches sit on the root object. There is no results array. This example screened only the OFAC SDN list, so metadata.sources contains ofac_sdn.
{
"metadata": {
"screened_at": "2026-04-21T13:12:28Z",
"min_score": 80,
"max_results": 10,
"sources": [
{
"id": "ofac_sdn",
"file_generated_on": "2026-04-20",
"file_downloaded_at": "2026-04-21T13:05:00Z",
"file_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}
]
},
"subject_ref": "client_123",
"subject_type": "INDIVIDUAL",
"matches": [
{
"score": 100,
"matched_subject": {
"type": "INDIVIDUAL",
"primary_name": "Kim Jong Un",
"personal_details": {
"date_of_birth": ["1984-01-08"],
"title": ["Chairman of the Workers' Party of Korea"]
},
"locations": [
{
"country": "Korea, North",
"country_code": "KP"
}
],
"sanction_details": [
{
"type": "secondary_sanctions_risk",
"value": "North Korea Sanctions Regulations, sections 510.201 and 510.210"
},
{
"type": "transactions_prohibited_usfi_owned_controlled",
"value": "North Korea Sanctions Regulations section 510.214"
}
]
},
"match_reasons": [
{
"summary": "Exact primary name match.",
"field": "name",
"status": "exact",
"query": "Kim Jong Un",
"list": "Kim Jong Un",
"list_type": "primary"
}
],
"sanctions": [
{
"source": "OFAC",
"list": "SDN List",
"programs": ["DPRK3"],
"measures": ["Block"],
"legal_basis": ["Executive Order 13722 (North Korea)"]
}
]
}
]
}
Top-level fields
metadata
| Field | Type | Description |
|---|---|---|
| screened_at | string | Server time the screen ran (UTC) |
| min_score | integer | Score threshold used. Omitted on POST /v1/screen/wallet. |
| max_results | integer | Max matches returned for each subject. Omitted on POST /v1/screen/wallet, which returns every exact match. |
| sources | array<object> | Lists that were screened. Always present. |
sources is always the lists this call screened. Ids and their fixed order are in lists. Omit options.sources and every id is present. Send two ids and those two are present, in that order, not the order they were written in the request. On a batch, metadata is once at the root and sources is the same for every subject.
| Field | Type | Description |
|---|---|---|
| id | string | List id. Always present. |
| file_generated_on | string | Date on the list file. Omitted when that file has no generation date. Canada omits it. |
| file_downloaded_at | string | When the live file was downloaded (UTC). |
| file_sha256 | string | SHA-256 of the live file. |
These values come from the live import of that list. A list with no live import is returned as id only, and the screen still succeeds.
Single subject fields
On POST /v1/screen and POST /v1/screen/wallet these fields are on the root, next to metadata. On POST /v1/screen/batch each subject is one object in results.
| Field | Type | Description |
|---|---|---|
| subject_ref | string | Echoed from request (if provided) |
| subject_type | string | Echoed when the request sent type. Omitted when it did not. |
| matches | array<object> | Ranked matches for the subject |
| subject_query | object | Echoed request subject when options.include_subject_query=true |
Fields without a value are omitted. matches is always present and is an empty array when there are no matches.
match object
Description: Each item in matches represents a potential match.
| Field | Type | Description |
|---|---|---|
| score | integer | Match confidence (0-100) |
| match_reasons | array<object> | Why this hit scored: one object per compared field |
| matched_subject | object | Matched sanctions subject |
| sanctions | array<object> | Associated sanctions entries |
match_reasons object
Each item describes one compared field. Unused fields are omitted.
| Field | Type | Description |
|---|---|---|
| summary | string | Short explanation |
| field | string | Compared field (name, identifier, date_of_birth, country, …) |
| status | string | exact, similar, match, or conflict |
| query | string | Value from the request |
| list | string | Value from the sanctions record |
| list_type | string | Role of the list value (e.g. primary, alias, passport) |
matched_subject
Description: Basic information about the matched subject.
| Field | Type | Description |
|---|---|---|
| type | string | Subject type |
| primary_name | string | Main name |
| aliases | array<string> | Alternate names (if available) |
| identifiers | array<object> | Associated identifiers |
| personal_details | object | Returned for individuals (if available) |
| locations | array<object> | Associated locations (if available) |
| sanction_details | array<object> | Additional sanctions context |
*Fields vary depending on the subject type and available data.
Sanctions object
| Field | Type | Description |
|---|---|---|
| source | string | Sanctions source (e.g. OFAC) |
| list | string | List name (e.g. SDN List) |
| programs | array<string> | Sanctions programs |
| measures | array<string> | Applied measures |
| legal_basis | array<string> | Legal references |
Notes
- Matches are sorted by score (highest first)
- Each subject returns its own matches array
- Fields vary depending on available sanctions data
- Result count is limited by max_results. On a batch this cap applies to each subject.
POST /v1/screen/walletuses the single-screen shape.subject_refis echoed when the request sent it.subject_typeisCRYPTO.metadata.sourcesisofac_sdn.metadataomitsmin_scoreandmax_results. Every exact match is returned.