The API is plain REST with JSON responses. Every example below was run against the live index on 26 September 2026 — 25 searches are free, no card required.
One POST request with the name in a JSON body, so it stays out of URLs, proxy logs and browser history. name is the only required field. The first call after a quiet spell can take up to half a minute while the service wakes; after that, well under a second.
curl -X POST "https://pramanlabs.io/api/v1/screen" \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"name": "Vladimir Putin", "country": "RU", "dob": "1952", "limit": 5}'
GET /api/v1/entities?name=… takes the same fields as query parameters and returns the same response.
Matches come ranked by match_score (0–100, highest first, over the best 200 candidates). Each record is one listing on one source list, so a person listed by several authorities appears once per list, each naming its data_source.
{
"pagination": { "total_hits": 6907, "limit": 5, "offset": 0 },
"data": [
{
"id": "…",
"name": "Vladimir Vladimirovich Putin",
"entity_type": "person",
"match_score": 100.0,
"risk": ["sanction"],
"countries": ["RU"],
"data_source": "US OFAC SDN List",
"data_source_type": "us",
"birth_information": "1952-10-07",
"match": {
"matched_name": "Vladimir Vladimirovich Putin",
"matched_on": "primary_name",
"name_score": 100.0,
"date_of_birth": "match",
"country": "match"
},
"links": { "details_url": "/api/v1/entities/…" }
},
{
"name": "Vladimir Vladimirovich Putin",
"match_score": 100.0,
"data_source": "UK Consolidated Sanctions List",
"…": "…"
}
],
"meta": {
"search_id": "5b0e…",
"lists_as_of": "2026-09-16",
"lists_loaded_at": "2026-09-17T02:00:00+00:00"
}
}
total_hits counts every candidate the index considered, not only strong matches — judge by match_score. match says why a record scored what it did: the name or alias it matched on, and whether the date of birth and country you sent agree with the record (match, no_match, or not_on_record when the list gives none). meta.search_id is the reference for your audit trail (also sent as the X-Request-ID header); lists_as_of is the latest listing date in the data searched. risk carries the list's categories, for example sanction, pep, enforcement or probity.
Fields of the POST body (or GET parameters). All filters are optional and combinable. Date of birth is a discriminator, not a gate: a record with no date of birth is never silently excluded.
| parameter | values | notes |
|---|---|---|
name | free text | Required. Names, aliases, transliterations |
entity_type | person · organization · vessel · aircraft | Exact filter |
country | one ISO code, e.g. RU | Filters by country (countries on GET) |
dob | 1952 · 10-1952 · 1952-10-07 | Any precision; the year is matched within ±1 year |
fuzziness | 0 · 1 · 2 · AUTO | Edit distance; AUTO adapts to name length |
limit / offset | 1–100 / 0+ | Pagination |
Every result's links.details_url opens its full record: aliases, birth information, nationality, sanctions listings (programme, authority, date, active status) and sources.
curl "https://pramanlabs.io/api/v1/entities/ENTITY_ID" \
-H "X-API-Key: YOUR_KEY"
Every search response carries X-Quota-Limit and X-Quota-Remaining. Errors are {"detail": "…", "code": "…"}: 401 missing_api_key · 403 invalid_api_key · 429 quota_exhausted the free 25 searches are used · 503 search_unavailable the search service could not be reached — retry after the Retry-After seconds.