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
| Parameter | Meaning |
|---|---|
q | Name to look for, at least 2 characters. Optional when a filter is set, so a collection can be browsed. |
type | Entity type as stored: INDIVIDUAL, COMPANY, ORGANIZATION, VESSEL, AIRCRAFT. |
list_type | SANCTION, PEP, DEBARMENT, TAX_WARRANT, INSOLVENCY. |
topics | One or more risk topics, as on match. |
include_dataset, exclude_dataset | Register names to keep or leave out, as on match. source (one register) also works. |
nationality | Two-letter country code. |
dob | Birth date prefix: YYYY, YYYY-MM or YYYY-MM-DD. |
program | Exact programme name. |
changed_since | ISO 8601 date or time: only records added or changed since then. |
sort | first_seen for the newest records first. Otherwise exact names first, then names that start with the query, then the rest, alphabetically. |
limit | Results per page, up to 50. Default 25. |
page or offset | Page 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 by | Use |
|---|---|
| Country | nationality=ru |
| Topic | topics=role.pep |
| Register | include_dataset=UK%20OFSI |
| Entity type | type=VESSEL |
| Birth date | dob=1953 |
| Programme | program=UA%20NSDC |
| Newest first | sort=first_seen |
Read more: the endpoint reference.
Last updated 2026-10-03