Sex Offender API vs. Criminal Records API
Two different datasets with two different questions. Most screening calls both.
Side by side
| Sex Offender Search API | Criminal Records API | |
|---|---|---|
| Dataset | Public sex offender registries: every US state, DC, the territories, tribal registries. | Criminal records from jails, prisons (DOC), criminal courts, warrant systems, registries and exclusion lists the platform holds. |
| Answer | Registrants matching the person, with registration details, offenses, addresses and photographs where published. | Records of bookings, custody, cases, charges and dispositions matching the person, each tagged with its source and record type. |
| Completeness model | Every jurisdiction in scope is searched; sourceStatus says which finished. | Every stored record is read or the search is refused as too broad; live checks say which sources finished. |
| Key fields | matchConfidence, matchState (DOB tiers), offenses[], sources[] | matchConfidence, recordType, cases[].charges[], currentStatus, sources[] |
| Endpoint | POST /v1/search | POST /v1/criminal/search |
| Live re-check | live.jurisdictions or live.scope: "matched"; evidence PDFs with live.evidence: "pdf". | live.jurisdictions or live.scope: "matched". |
When to call which
- Registry status is the question (visitor screening, admissions, volunteer checks): the Sex Offender Search API.
- Criminal history is the question (bookings, convictions, custody): the Criminal Records API.
- A person is being screened: both, then a Monitoring watch. A registrant may have no criminal record in the sources held, and a person with criminal records may not be a registrant.
curl -X POST https://api.offendersearch.app/v1/search \
-H "X-API-Key: $OFFENDERSEARCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": {"firstName": "Jordan", "lastName": "Rivera", "dob": "1988-04-12"}}'