Quickstart
Your first authenticated search in three languages, and the four fields to read off every response.
Base URL https://api.offendersearch.appThis page as Markdown/docs/quickstart.mdYour first search
Create a key in your dashboard, export it, and make your first search. One authenticated call covers every jurisdiction: passing jurisdictions: null — or omitting it — searches the full dataset, and the response comes back as one scored, de-duplicated, source-tagged result set.
curl https://api.offendersearch.app/v1/search \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"firstName": "John",
"lastName": "Doe",
"dob": "1980-04-12"
},
"jurisdictions": null,
"freshness": "daily",
"match": "balanced",
"include": ["stateData"]
}'Read four things off every response
The response envelope is designed so that an integration can be correct without reading prose. Four fields carry everything you need to decide what to do with a result:
status—"complete"or"partial"."partial"means adeadlineMsbound you set was reached before every source completed.counts.sourcesCompletevscounts.sourcesQueried— how much of the search finished. An equal pair is a closed answer. See Result completeness.counts.records— the total number of matches before any page slice, so it does not change as you page.matchStateandmatchedName, per record — the labelled strength of the identity match, and whether the registered name or an alias produced the hit. See Searching by date of birth.
Every response labels its own coverage.
sourceStatus[] reports every jurisdiction the request touched, individually, with its own status and freshness — so an incomplete search is always labelled as one and never returns as a silently short list.{
"status": "complete",
"counts": {
"records": 3,
"sourcesQueried": 58,
"sourcesComplete": 58,
"sourcesIncomplete": 0,
"sourcesSkippedByScope": 0
},
"records": [
{
"matchState": "dob_match",
"matchedName": { "value": "John A. Doe", "type": "legal" },
"matchConfidence": 1.0
}
]
}Where to go next
- POST /v1/search — every parameter, and nine worked query shapes.
- The Record object — one normalized schema across all 58 jurisdictions, field by field.
- Result completeness — how
counts,sourceStatusandincompleteReasonfit together. - Async & webhooks and Batch & CSV — for volume work.
- OpenAPI (JSON) / YAML — generate a typed client rather than hand-writing one.