API docs

Quickstart

Your first screening call in under five minutes, with curl, TypeScript and Python.

This gets you from no account to a screened name. It takes about five minutes.

1. Create an API key

Create an account, then open API keys in the app. The first key asks the organization's owner to certify the permissible use of the results — see Authentication. The key is shown once; store it in your secret manager.

export EXCLIA_API_KEY="paste-your-key-here"

2. Screen a person

curl https://api.exclia.com/v1/screen \
  -H "Authorization: Bearer $EXCLIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: quickstart-1" \
  -d '{"type":"person","name":"Jane Q. Example","dateOfBirth":"1980-04-12","state":"NJ"}'

The same call in TypeScript, with nothing but fetch:

const response = await fetch('https://api.exclia.com/v1/screen', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EXCLIA_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'quickstart-1',
  },
  body: JSON.stringify({
    type: 'person',
    name: 'Jane Q. Example',
    dateOfBirth: '1980-04-12',
    state: 'NJ',
  }),
});

if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result.status, result.matches.length);

And in Python, with requests:

import os
import requests

response = requests.post(
    "https://api.exclia.com/v1/screen",
    headers={
        "Authorization": f"Bearer {os.environ['EXCLIA_API_KEY']}",
        "Idempotency-Key": "quickstart-1",
    },
    json={
        "type": "person",
        "name": "Jane Q. Example",
        "dateOfBirth": "1980-04-12",
        "state": "NJ",
    },
)
response.raise_for_status()
result = response.json()
print(result["status"], len(result["matches"]))

3. Read the result

{
  "status": "clear",
  "matches": [],
  "sources": [
    { "source": "leie", "listVersionId": "lv_…", "retrievedAt": "2026-10-01T06:00:00.000Z" },
    { "source": "sam", "listVersionId": "lv_…", "retrievedAt": "2026-10-01T06:00:00.000Z" }
  ],
  "checkedAt": "2026-10-06T09:30:00.000Z",
  "recallCapped": false
}
  • status is clear or potential_match. A potential match is not a verdict: each entry in matches lists the fields that matched and the list version it came from, and a person verifies it.
  • sources is the provenance of the check — keep it with your record. It is what shows, later, which version of each list the person was screened against.
  • matches arrive strongest first. score orders them; it is not a probability, so do not threshold on it.

4. Next

  • Screening an organization: send {"type":"organization","legalName":"…"} instead.
  • Many at once: POST /batch.
  • Keep watching: PUT /monitor, then webhooks tell you when a status changes.