The Offender Search API
One offender search API for both questions people mean by “offender”. Search registered sex offenders across 58 US registries, and search criminal records from jail, prison, court and warrant systems, with the same key and the same scored, cited answer from each.
25 free calls · No card · $0.15 a call, $0.11 past 2,000 a month
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"
}
}'What the offender search API searches
“Offender” means two things in US public records. On a registry it means a person required to register as a sex offender. In corrections and the courts it means anyone in the system: booked into a county jail, held in a state prison, charged in a court case or named on a warrant. Those are different records, held by different agencies, and a search of one says nothing about the other.
The offender search API covers both, as two endpoints on one account. The registry search reaches 58 US registries — the 50 states, DC and the territories. The criminal search reaches more than a thousand county, state and federal jurisdictions, with coverage in every US state. You call whichever one your question needs, or both for the same person.
Two offender search endpoints, one API key
| Endpoint | Searches | Needs | Returns |
|---|---|---|---|
POST /v1/searchReference → | Registered sex offenders across 58 US registries | A name, an address, a ZIP or a lat/lng radius | Registry records with photographs, addresses, offenses and the registry that holds each one |
POST /v1/criminal/searchReference → | Jail bookings, prison custody, court cases, warrants and registries | A last name; first name and date of birth strongly recommended | Criminal records with cases, charges, dispositions, custody status and the jurisdiction that holds each one |
Each endpoint in depth: the sex offender search API and the criminal search API.
Search registered sex offenders by name or location
POST /v1/search takes a name with an optional date of birth or age, or a location on its own: a street address, a ZIP, a city, or a latitude and longitude with a radius up to 100 miles. One person registered in several places comes back as one record whose sources[] lists each registry. To choose which registries are searched, see the sex offender registry API.
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"
}
}'Search criminal offender records: jail, prison, court and warrants
POST /v1/criminal/search takes a last name, ideally with a first name and date of birth, and optionally a state or county to narrow it. A last name is required: an unbounded criminal query would return an arbitrary slice, not an answer. Each record carries its cases, charges and dispositions where the holder publishes them, and sources[].level says whether a county, state or federal system holds it. The full picture is on the criminal records API page.
curl -X POST https://api.offendersearch.app/v1/criminal/search \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": { "lastName": "Okafor", "firstName": "Morgan",
"dob": "1990-06-18", "state": "OK" },
"page": 1, "perPage": 50
}'Which offender search to call, and when
| The question | Call | Why |
|---|---|---|
| Is this person a registered sex offender? | Registry search | A name and date of birth against 58 registries, with a registry citation on every match. |
| Who is registered near this address? | Registry search | Address, ZIP or lat/lng radius up to 100 miles. The criminal search has no location-only query. |
| Is this person in jail or prison right now? | Criminal search | Jail rosters and state prison systems, with custody status on the record. |
| Does this person have a court case or a conviction? | Criminal search | Court cases with charges and dispositions, where a court publishes them. |
| Is there an active warrant? | Criminal search | Statewide warrant systems where a state publishes one. |
| I need everything on this person | Both | Send the same person to both endpoints. Two calls, each billed once. |
Run both offender searches for one person
The two endpoints accept the same person object, so checking someone against the registries and criminal records is two requests with one payload. They are independent: run them in parallel, and treat each response’s status on its own.
import os, requests
API = "https://api.offendersearch.app"
HEADERS = {"X-API-Key": os.environ["OFFENDERSEARCH_KEY"]}
person = {"firstName": "Morgan", "lastName": "Okafor", "dob": "1990-06-18"}
registry = requests.post(f"{API}/v1/search", headers=HEADERS,
json={"query": person}, timeout=30).json()
criminal = requests.post(f"{API}/v1/criminal/search", headers=HEADERS,
json={"query": person}, timeout=30).json()
print("registry:", registry["status"], len(registry["records"]))
print("criminal:", criminal["status"], len(criminal["records"]))What both offender searches have in common
One key and one header
Both searches authenticate with the same X-API-Key. There is no second credential, product toggle or contract for the criminal endpoints.
The person goes in query
firstName, lastName and dob mean the same thing on both endpoints, so one person object can be sent to each.
Every match is scored and explained
matchConfidence, matchState and matchBasis appear on registry records and criminal records alike. You set one threshold policy for both.
Every record cites its holder
sources[] names the registry or jurisdiction that holds the record, with that holder’s own record link and a lastCheckedAt.
Incomplete is labelled
A top-level status and per-source status on both responses. A source that did not answer is named, not silently dropped.
One bill
Each call is $0.15, or $0.11 past 2,000 calls in a month, whichever endpoint it hits. Usage from both lands on one invoice.
Registry records vs criminal records: how the two differ
| Registry search | Criminal search | |
|---|---|---|
| What a record is | One registrant, merged across the registries they appear on | One criminal record: a booking, a custody record, a court case or a warrant |
| Minimum query | A name, or a location on its own | A last name is required |
| Location search | Address, ZIP, city and lat/lng radius | state and county narrow a name search |
| Photographs | Returned in images[] on every response | Where the holding jurisdiction publishes one |
| Coverage statement | 58 US registries — the 50 states, DC and the territories | more than a thousand county, state and federal jurisdictions, with coverage in every US state |
| Kind of record | Always a registration | recordType is always "criminal_record"; the fields that are filled and sources[].level tell you the kind |
Field references: the registry record object and the criminal record object.
How an offender match is scored
A name alone is weak evidence. Thousands of people share a common name, and records spell names differently. So neither search returns a bare yes or no. Each record carries matchConfidence, a number you can threshold on; matchState, which says how the date of birth compared (dob_match, year_match, age_match, dob_mismatch or no_dob_age_year); and matchBasis, which names the fields that matched and the strategy that matched them.
That lets you decide once how your product treats a match. A common policy: auto-accept a full date-of-birth match, send a birth-year or age match to a person for review, and never act on a name-only match. The same policy then applies to registry records and criminal records. See matching and confidence for the registry search and criminal matching for the criminal one.
Batch, async and monitoring on the same key
Batch
Send a list of people and get one scored result per row, each row billed as one call. See bulk sex offender search and bulk criminal record search.
Async and webhooks
Start a long search, get an id back straight away and collect the finished result later, or have it sent to your callback URL. Reference: async and webhooks.
Monitoring
Watch a person or an address and get an alert when a matching record appears or changes. See sex offender monitoring.
Offender search APIs compared
The offenders.io column states what offenders.io publishes about itself. Where it publishes more — tribal jurisdictions, a recurring free tier, facial search, an availability SLA — the row says so. Full detail: Offendersearch vs offenders.io.
| Offendersearch | offenders.io | |
|---|---|---|
| Registered sex offender search | 58 US registries in one request | Publishes 184 state, territory and tribal registry jurisdictions |
| Criminal record search on the same key | Yes — jail, prison, court and warrant records at POST /v1/criminal/search | Not in their public API documentation |
| Free usage | 25 free calls at sign-up, no card | First 50 requests free every month |
| Price per call | $0.15 for the first 2,000 a month, then $0.11 | $0.20 for the next 2,000 after the free 50, then $0.15 |
| Match score on every record | matchConfidence, matchBasis and matchState | Not in their public API documentation |
| Per-source status | sourceStatus names each source that answered and each that did not | An errors array flags incomplete results |
| Radius search | Up to 100 miles, at the base price | 1 to 100 miles; GIS add-on plans listed from $99 a month |
| Batch | POST /v1/batch, up to 1,000 people per request, or a CSV in the dashboard | A CSV batch web tool, 10,000+ records per session |
| MCP server for AI agents | Hosted MCP server on the same key | MCP server offered |
| Facial search | Not offered | Controlled-access facial recognition |
| Availability SLA | Enterprise terms on request | Publishes a 99.9% availability SLA |
Offender search API pricing
| First 25 calls | Free, no card required, on either search |
| Registry search | $0.15 a call |
| Criminal search | $0.15 a call |
| Past 2,000 calls in a month | $0.11 per call |
| Both searches for one person | Two calls |
| Batch | Each row billed as one call |
| Seats, search minimums, contracts | None |
Worked out by monthly volume: background check API pricing. Full schedule: pricing.
Offender search API: common questions
What is an offender search API?
An offender search API lets software look a person up in public offender records with an HTTP request. Depending on the provider that means the sex offender registries, corrections and court records, or both. Offendersearch offers both on one key: a registry search across 58 US registries and a criminal record search across jail, prison, court and warrant records.
Does the offender search API cover sex offenders and criminal records?
Yes, as two endpoints. POST /v1/search searches the sex offender registries. POST /v1/criminal/search searches jail bookings, prison custody, court cases and warrants. They share a key, a query shape and a scoring model, and each call is billed once.
Do I need two API keys or two accounts?
No. One account and one X-API-Key reach both searches. If you have integrated one endpoint, the other needs no new credential and no new contract.
Can I search both with one request?
They are separate requests, so you choose what you pay for. To check a person against both, send the same query object to each endpoint. The code sample on this page does it in parallel.
What do I need to run an offender search?
For the registry search: a name, or just an address, ZIP or coordinates. For the criminal search: a last name at minimum. On both, a first name and a date of birth cut false positives more than anything else.
How much does the offender search API cost?
$0.15 per call for the first 2,000 calls in a month, then $0.11 per call, on either endpoint. The first 25 calls are free with no card. There are no seats, search minimums or contracts.
Is there a free offender search API?
The first 25 calls are free and need no payment method. They work on both the registry and criminal searches, so you can test real names before paying anything.
How do I tell a booking from a conviction?
Read the record, not just the hit. A criminal record carries its cases, charges and each charge’s disposition, plus a currentStatus, and sources[].level says whether a county, state or federal system holds it. A jail booking with no disposition is an arrest record, not a conviction.
Can I look up an inmate with the offender search API?
Yes. The criminal search returns jail roster and state prison records with custody status. Federal custody is covered as well; the federal criminal records page explains what a federal search includes.
How do I know the search was complete?
Both responses carry a status of "complete" or "partial" and a status entry per source. If a registry or jurisdiction did not answer, it is named, so an empty result is never mistaken for a clean one.
Can I run offender searches in bulk?
Yes. Both searches have a batch endpoint that takes a list of people and returns one scored result per row, with each row billed as one call. The dashboard accepts a CSV upload for the same job.
Can AI agents use the offender search API?
Yes. A hosted MCP server exposes the registry search as tools on the same key, so an assistant can run a search and cite the official record in its answer. Criminal records are available to an agent through the REST API on that key.
Is an offender search a background check under the FCRA?
Results from the standard API are not a consumer report. A hiring or tenant decision is an FCRA-regulated use and runs through FCRA Partner Access, a separately enabled service for consumer reporting agencies and screening platforms under a written FCRA agreement.
The Offendersearch APIs
One account, one key, one bill — the sex offender registry and criminal records, side by side.
Sex offender registry
- Sex offender API — One call across 58 US sex offender registries, with scored matches and a citation on every record.
- Sex offender search API — Endpoints, request shapes, record fields, matching and batch, in detail.
- Sex offender database — The national registry data in one schema — photos, aliases, offenses, addresses.
- Registered offender database — What a registered offender record holds, and how its accuracy is measured.
- Bulk sex offender search — Screen a whole list of names in one upload or one API call.
- Sex offender registry API — Choose which of the 58 registries a search covers, and see which ones answered.
Criminal records
- Criminal records API — County, state and federal records — jail, prison, court and warrant — through one API.
- Criminal background check API — One cited answer per person for onboarding and screening flows.
- Criminal search API — The search endpoint itself: parameters, record types and coverage, call by call.
- Court records API — Criminal court cases with charges and a disposition on each charge.
- Arrest records API — County jail bookings: booking date, custody status, facility and photo link.
- Inmate search API — State prison and county jail custody, with sentence, release and parole dates.
- Background check API — The registry and criminal layers together, on one key and one bill.
- Employment background check API — The registry and criminal data layer for HR, ATS and screening platforms.
- Employment screening API — The stages of a hiring pipeline, and where criminal and registry checks sit in it.
- Bulk criminal record search — Run a list of names against criminal records in one call.
- Statewide criminal search — One state at a time: prison, court and warrant systems that cover the whole state.
- Federal criminal records — Federal criminal records through the same API, and what a federal search covers.
Build with it
- API documentation — Quickstart, every endpoint, the record object and the OpenAPI spec.
- Sex offender map API — Clusters, pins and names for your own map, and the full record when one is opened.
- Background check API pricing — $0.15 a call, $0.11 past 2,000 a month, 25 free calls to start — worked out by volume.
- Background check API integration — Keys, the first call, async and webhooks, batch, monitoring and errors, step by step.
- Free background check API — 25 free calls on real data, no card — what is included and what comes after.
- Pay-as-you-go background check API — Per call, per report or subscription: the pricing models, with costs by volume.
- Background check API in Python — A working tutorial with requests: search, batch, async, errors and retries.
- Background check API in Node.js — A fetch client, response types, an Express webhook handler and retries.
- NSOPW API — Is there one? What exists, and a developer API for searching US registries.
- MCP server for offender search — Give Claude and other AI agents the same search as a tool.
- Integrations — Screening inside referral software — CarePort, ExtendedCare, Ensocare and Aidin.
- AI integration — Offender safety checks for AI agents and chatbots, with cited answers.
- Offendersearch vs offenders.io — A side-by-side comparison of the two registry APIs.
Screening and compliance
- Tenant background check — Screening applicants for a rental, and where an FCRA workflow is required.
- FCRA Partner Access — The FCRA workflow for hiring and tenant decisions — pricing by quote.
- FCRA-compliant background check data — Accuracy, disputes and permissible purpose for consumer reporting agencies.
- FCRA disputes API — Open, track and resolve a consumer dispute against a record.
- Sex offender monitoring — Watch a person or an address and get an alert when the registry changes.
- Tenant screening API — The registry and criminal layer for property software, with FCRA workflows for rental decisions.
- Non-FCRA background check API — What a public-records lookup may be used for, and when a decision needs FCRA instead.
Further reading
Independent comparisons of the tools in this category — including where other vendors are the better answer.
The best sex offender APIs in 2026, compared
Five ways to search US registries programmatically, measured on coverage you can enumerate, provenance, match quality and price.
The best criminal record search APIs in 2026
Jail bookings, prison custody, court cases and warrants are four different systems. Which API you want depends on which one your question needs.
The best background check APIs in 2026
Five brands, three companies: the consolidation nobody mentions, each vendor’s real published price, and the only per-call API on the list.
How to build a sex offender map with MapLibre
A developer tutorial with full code: clusters, pins, names and a record panel, built in free test mode.
More in our comparisons and research.
Run your first offender search in minutes
25 free calls, no card, and one key for the registry and criminal searches. Sign up, create a key and send the request above.