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
}statusisclearorpotential_match. A potential match is not a verdict: each entry inmatcheslists the fields that matched and the list version it came from, and a person verifies it.sourcesis 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.matchesarrive strongest first.scoreorders 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.
