Praman Labs Praman Labs

First screening call in five minutes

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.

1

Get a key

Sign up (or sign in) and your key is issued straight away. Send it with every request as the X-API-Key header.

Signed in on this browser? Your key appears here.

2

Screen a name

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.

3

Read the 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.

4

Narrow with filters

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.

parametervaluesnotes
namefree textRequired. Names, aliases, transliterations
entity_typeperson · organization · vessel · aircraftExact filter
countryone ISO code, e.g. RUFilters by country (countries on GET)
dob1952 · 10-1952 · 1952-10-07Any precision; the year is matched within ±1 year
fuzziness0 · 1 · 2 · AUTOEdit distance; AUTO adapts to name length
limit / offset1–100 / 0+Pagination
5

Fetch full details

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.