Sanctions Screening v2
Sanctions Screening v2 screens an individual or company against global sanctions lists, PEP (Politically Exposed Persons) databases and adverse media. It uses the same screening engine as the Azakaw app, so every screening you run through the API:
- appears in Case Management in the Azakaw app, with its hits ready for your compliance team to review;
- keeps a search status (
Open,Closed,UnderReview) that reflects your team's review; - can be enrolled in ongoing monitoring;
- can be assigned to a client.
Migrating from v1
Sanctions Screening v1 (POST /ExtSanctionScreening/Search) keeps working unchanged. New integrations should use v2.
Every v2 screening creates a case in your Azakaw Case Management, visible to your compliance team. If you screen high volumes through the API, plan for your team's review workload.
| v1 | v2 | |
|---|---|---|
| Endpoint | POST /ExtSanctionScreening/Search | POST /ExtSanctionScreening/v2/Search |
| Result visible in Case Management | No | Yes |
| Hits reviewable by your compliance team | No | Yes |
| Ongoing monitoring | No | Optional (isMonitored) |
| Client assignment | No | Yes (clientId) |
| Extended search parameters | No | Yes, when enabled for your tenant |
| Re-fetch results later | No | Get Screening Hits |
| Request body | name, countries, entityType, entityDate | The same fields plus new optional ones. A v1 body in the documented format is also a valid v2 body, unless your API key is restricted to several clients: then clientId is required (see Client Assignment) |
| Response body | See v1 response | New shape. See Response |
Authentication
All requests to this API require authentication using a bearer token in the Authorization header:
Authorization: Bearer your-token-here
For details on how to obtain an authentication token, please refer to the Authentication documentation.
Screen a Name
POST {base_url}/ExtSanctionScreening/v2/Search
The screening runs synchronously and returns the first page of hits (up to 50). Use Get Screening Hits to page through the rest or to read the latest review status later.
Request Body
{
"name": "John Doe",
"entityType": "person",
"countries": ["GB"],
"entityDate": "1980-05-31",
"isMonitored": true,
"clientId": "4c0a9a4e-5f0e-4f35-9d2b-2b8f3f7b9a10"
}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Name of the individual or company to screen (2-100 characters) |
| entityType | string | Yes | person or company |
| countries | array | No | ISO 3166-1 alpha-2 country codes to narrow the search. No duplicates |
| entityDate | string | No | Date of birth (person) or establishment date (company), YYYY-MM-DD. Cannot be in the future |
| isMonitored | boolean | No | Enrol the screening in ongoing monitoring. Defaults to false. See Ongoing Monitoring |
| clientId | string | Depends | The client the screening belongs to. See Client Assignment |
Extended Search Parameters
These fields sharpen the match and are only accepted when extended search parameters are enabled for your tenant. Sending any of them otherwise returns 400.
| Parameter | Type | Applies to | Description |
|---|---|---|---|
| idPassportNumber | string | person | National ID or passport number (max 50 characters) |
| gender | string | person | Male or Female |
| countryOfResidence | string | person | ISO 3166-1 alpha-2 country code |
| registrationNumber | string | company | Company registration number (max 100 characters) |
Client Assignment
| Your API key is… | clientId omitted | clientId provided |
|---|---|---|
| Not restricted to clients | Your tenant's default client is used | Must be a client in your tenant |
| Restricted to one client | That client is used | Must be that client |
| Restricted to several clients | 400: clientId is required | Must be one of those clients |
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": {
"id": "0f6b8c52-3d7e-4a3f-8e0e-5b9a1c2d4e6f",
"name": "John Doe",
"countries": ["GB"],
"entityType": "person",
"entityDate": "1980-05-31",
"screeningStatus": "Succeeded",
"searchStatus": "Open",
"isMonitored": true,
"numOfHits": 1,
"createdAt": "2026-09-18T10:15:02.4410000Z",
"updatedAt": null,
"lastScreened": "2026-09-18T10:15:04.9810000Z",
"lastUpdated": null,
"clientId": "4c0a9a4e-5f0e-4f35-9d2b-2b8f3f7b9a10",
"clientName": "Retail Banking",
"extendedSearchParameters": null,
"summary": {
"level": "Elevated",
"score": 80,
"sanctions": 1,
"pep": 0,
"adverseMedia": 4
},
"hits": {
"pageNumber": 1,
"pageSize": 50,
"totalRecords": 1,
"items": [
{
"hitId": "66f2a1c9e4b0a7d3c1f5e829",
"name": "John Doe",
"entitySubType": "Individual",
"countries": "United Kingdom",
"aliases": "Johnny Doe",
"birthOrFoundationDates": "1980-05-31",
"riskType": "Sanctions",
"riskScore": 90,
"strength": 0.97,
"indicators": [
{ "category": "Sanctions", "count": 1, "maxScore": 90 }
]
}
]
}
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
| id | string | Screening ID. Use it with Get Screening Hits |
| name | string | The name that was screened |
| countries | array | Country codes used to narrow the search |
| entityType | string | person or company |
| entityDate | string | Date of birth or establishment date (YYYY-MM-DD), or null |
| screeningStatus | string | Outcome of the screening run: Succeeded, Failed or InProgress |
| searchStatus | string | Case status: Open (hits need review), Closed or UnderReview |
| isMonitored | boolean | Whether the screening is under ongoing monitoring |
| numOfHits | number | Total number of hits |
| createdAt | datetime | When the screening was created (UTC) |
| updatedAt | datetime | When the screening was last changed (UTC), or null if never |
| lastScreened | datetime | When the name was last screened, including by ongoing monitoring (UTC) |
| lastUpdated | datetime | When ongoing monitoring last found a change (UTC), or null if never |
| clientId | string | Client the screening belongs to |
| clientName | string | Name of that client |
| extendedSearchParameters | object | The extended search parameters used, or null |
| summary | object | Risk summary. See Summary Fields |
| hits | object | A page of hits. See Hit Fields |
Summary Fields
| Field | Type | Description |
|---|---|---|
| level | string | Risk level: Low, Medium, Elevated or High |
| score | number | Overall risk score (0-100) |
| sanctions | number | Count of sanctions list matches |
| pep | number | Count of politically exposed person matches |
| adverseMedia | number | Count of adverse media mentions |
Hit Fields
| Field | Type | Description |
|---|---|---|
| hits.pageNumber | number | Page returned |
| hits.pageSize | number | Page size used |
| hits.totalRecords | number | Total number of hits |
| hits.items[].hitId | string | Hit identifier |
| hits.items[].name | string | Name of the matched entity |
| hits.items[].entitySubType | string | Type of the matched entity |
| hits.items[].countries | string | Countries associated with the match |
| hits.items[].aliases | string | Known aliases, comma-separated |
| hits.items[].birthOrFoundationDates | string | Known dates of birth or foundation, comma-separated |
| hits.items[].riskType | string | Type of risk identified (e.g. Sanctions, PEP, News Media) |
| hits.items[].riskScore | number | Risk score for this match (0-100) |
| hits.items[].strength | number | Match strength (0-1) |
| hits.items[].indicators | array | Risk indicators behind the hit (category, count, maxScore) |
Get Screening Hits
POST {base_url}/ExtSanctionScreening/v2/{screeningId}/Hits
Returns the screening with a page of its hits, including the current searchStatus as your team reviews the case in the Azakaw app. The request body is optional; without one, the first 50 hits are returned.
Request Body
{
"pageNumber": 2,
"pageSize": 50
}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| screeningId | string (path) | Yes | The id returned by Screen a Name |
| pageNumber | number | No | Page to return, starting at 1. Defaults to 1 |
| pageSize | number | No | Hits per page, 1-100. Defaults to 50 |
Response
Same shape as the Screen a Name response, with hits holding the requested page.
A screening that does not exist, belongs to another tenant, or belongs to a client your API key is not permitted for returns 400 with the message Screening not found. Some older screenings created in the Azakaw app cannot be read through the API and return 400 with the message Screening is not available through this API.
Ongoing Monitoring
With isMonitored: true the screened name is re-checked automatically as the underlying lists change. New or changed hits show up in the Azakaw app and in Get Screening Hits. Monitoring can be turned off from the Azakaw app.
Ongoing monitoring is a recurring service and is billed according to your plan.
Error Handling
| Status Code | Description | Solution |
|---|---|---|
| 400 | Invalid request parameters, a client your key cannot use, extended search parameters not enabled, or screening not found | Check the message in messages |
| 401 | Unauthorized access | Check authentication token |
| 403 | Your API key is not permitted to call this endpoint | Ask Azakaw to enable Sanctions Screening v2 for your key |
| 429 | Too many requests | Implement rate limiting and retry with backoff |
| 500 | The screening provider could not be reached | Retry later |