Documentation · Screening API

The search API

Find records by name and browse a collection with filters. Built for look-ups and interfaces; for screening decisions, use matching.

Use matching for screening. Search finds records that contain the words you type. It does not score them, compare birth dates or countries, or tolerate spelling variants. To decide whether a party is listed, use the matching API.

Example

The collection is part of the path, as for matching: /api/search/default, /sanctions, /peps, /crime or /maritime. /api/search on its own searches everything.

curl "https://api.crownintelligence.net/api/search/sanctions?q=putin&nationality=ru&limit=10"
import requests

BASE = "https://api.crownintelligence.net"
r = requests.get(f"{BASE}/api/search/sanctions", params={"q": "putin", "nationality": "ru", "limit": 10}, timeout=60)
data = r.json()
print(data["total"], "records")
for rec in data["results"]:
    print(rec["id"], rec["name"], rec["register"], rec["topics"])
const BASE = "https://api.crownintelligence.net";
const url = new URL(`${BASE}/api/search/sanctions`);
url.search = new URLSearchParams({ q: "putin", nationality: "ru", limit: "10" });
const data = await (await fetch(url)).json();
console.log(data.total, data.results.map(r => r.name));

The answer has total, page, limit, offset, the filters applied and results. Each result has the record ID, register, name and aliases, type, list type, topics, programme, birth date, nationality, merged entity ID and dates.

Parameters

ParameterMeaning
qName to look for, at least 2 characters. Optional when a filter is set, so a collection can be browsed.
typeEntity type as stored: INDIVIDUAL, COMPANY, ORGANIZATION, VESSEL, AIRCRAFT.
list_typeSANCTION, PEP, DEBARMENT, TAX_WARRANT, INSOLVENCY.
topicsOne or more risk topics, as on match.
include_dataset, exclude_datasetRegister names to keep or leave out, as on match. source (one register) also works.
nationalityTwo-letter country code.
dobBirth date prefix: YYYY, YYYY-MM or YYYY-MM-DD.
programExact programme name.
changed_sinceISO 8601 date or time: only records added or changed since then.
sortfirst_seen for the newest records first. Otherwise exact names first, then names that start with the query, then the rest, alphabetically.
limitResults per page, up to 50. Default 25.
page or offsetPage number from 1, or a record offset.

Facets

Counts by list type, entity type, country and register for the same query come from a companion endpoint, GET /api/facets, which takes q, scope, list_type, type, nationality, source and program. Countries and registers are limited to the top 30. See the reference.

A note on privacy

Search uses GET, so the name you look for is part of the address and can appear in web server logs along the way. When you screen personal information, use POST /api/match, which carries the query in the request body; the matching service does not store request bodies.

How names are found

Search has no query language. A record is found when its name starts with what you typed, or when its name or an alias contains every word you typed, in any order. Case is ignored.

Exact phrases

Exact names rank first, then names that start with your text. Quotation marks have no special meaning.

Spelling variations

Search does not allow for misspellings or transliterations. Send variants as aliases to the matching API, which aligns close spellings.

Operators

Fuzzy (~), proximity, boolean (AND, OR, +, -) and grouping operators are not supported. Every word must be present.

Field queries

Instead of field syntax inside q, use parameters:

To narrow byUse
Countrynationality=ru
Topictopics=role.pep
Registerinclude_dataset=UK%20OFSI
Entity typetype=VESSEL
Birth datedob=1953
Programmeprogram=UA%20NSDC
Newest firstsort=first_seen

Read more: the endpoint reference.

Last updated 2026-10-03