The Inmate Search API
An inmate search API that checks state prison systems and county jails in one call. Send a name and get back whether the person is in custody, the facility, the sentence and the release and parole dates — as JSON, with the holding system cited on every record.
The custody layers of the criminal records API, on the same key as the sex offender registry search.
curl -X POST \
https://api.offendersearch.app/v1/criminal/search \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"firstName": "Jordan",
"lastName": "Reyes",
"dob": "1985-11-02",
"state": "TX"
}
}'Why inmate search is hard to do yourself
There is no single inmate database in the United States. There are thousands of separate ones.
Every state runs its own prison system with its own inmate locator. Every county runs its own jail, usually with its own roster on the sheriff’s website. They use different search forms, different field names and different ideas of what to publish. A person released from a state prison last year and booked into a county jail last week appears in two unrelated systems, in two formats.
The inmate search API puts one request in front of all of that. A single call checks the state prison systems and the county jails for the name, and every record comes back in the same JSON shape whichever system holds it. Your code handles one schema, not one per state.
What the inmate search API returns
Custody is a status plus dates. These are the real fields.
| Field | What it holds |
|---|---|
currentStatus | in_custody, released, on_parole, on_probation and similar — where the person stands today. |
currentlyIncarcerated, everIncarcerated | Two booleans that answer the two most common questions without parsing a status string. |
custodyFacility | The prison unit or jail holding the person, by name. |
custody.custodyClass, description, facilityType | Security classification, housing description and the kind of facility, where the system publishes them. |
dateIncarcerated | The admission date on a prison record; the booking date on a jail record. |
releaseDate, actualReleaseDate | The projected release date, and the date the person actually left once they have. |
sentence.length, years, months | The sentence as stated, plus the same term as numbers. |
sentence.minDate, maxDate, dischargeDate | The earliest and latest end of the sentence and the discharge date, where published. |
parole.eligibilityDate, nextReviewDate, reviewStatus, lastDecision | Parole eligibility and where the review stands. |
cases[] | On a prison record, the conviction case or cases behind the sentence, with charges and dispositions. |
mugshotUrl | A link to the custody photo where the system publishes one. |
sources[].code, level, recordUrl | The system that holds the record — TX-DOC for a state prison system, a bare county code for a jail — and its own link to it. |
Complete examples for a prison record and a jail record: the record object.
State prison records and county jail records
Both answer “is this person held?”, but they are different records with different depth.
| State prison record | County jail record | |
|---|---|---|
| Held by | A state corrections department | A county jail or sheriff |
sources[].code | Ends in -DOC, for example TX-DOC | A bare county code, for example TX-DALLAS |
| Who is in it | People sentenced after a conviction | People just arrested, awaiting trial or serving short sentences |
| Date of birth | Often a full date; varies by state | Usually an age only |
| Sentence and parole | Usually published | Rarely |
cases[] | The conviction case behind the sentence | Often empty |
| Read more | This page | Arrest records API |
Sentence, release and parole dates
For a prison record, the dates are usually the reason you searched.
A prison record carries three blocks beyond the status. sentence gives the term as the system states it (length), the same term in years and months, and the earliest and latest dates it can end. parole gives the eligibility date, the next review and the status of that review. And releaseDate is the projected release, with actualReleaseDate filled in once the person has left.
States differ in what they publish. One lists a parole eligibility date and nothing about good-time credit; another lists a maximum date and no minimum. The API does not calculate a date a system did not state. A field that was not published is null, so a missing release date reads as “not published” and never as “no release”.
In custody, released or on parole: reading custody status
Three fields cover almost every product decision.
| Question | Field to read | Notes |
|---|---|---|
| Is this person held right now? | currentlyIncarcerated | true or false — no string parsing |
| Has this person ever been held? | everIncarcerated | Stays true after release |
| What is their status today? | currentStatus | in_custody, released, on_parole, on_probation and similar |
| Is the record still listed? | lifecycle.droppedOut | true when a record is no longer listed by the system that held it; the record is kept and flagged |
| Is this my subject? | matchState, matchConfidence | Full-date, year or age agreement — see matching |
A person can be held by more than one system over time — a county booking and a state prison term, for example. Where the API can tell they are the same person, they are merged into one record whose sources[] lists each system that holds it, each with its own link, so you see the custody history in one place.
Inmate search API code samples
Plain REST and JSON, with your key in the X-API-Key header. The person goes inside query; query.lastName is required and state keeps the search to one state’s systems.
- One schema — a prison record and a jail record share the same object, so one parser handles both.
- Live when it matters — add a
liveblock to re-check named systems during the request. - Lists —
POST /v1/criminal/batchtakes a CSV or JSON list, one result per row. - Watch a person — monitoring alerts you when a new matching record appears.
Quickstart · criminal search API parameters · live and async
curl -X POST \
https://api.offendersearch.app/v1/criminal/search \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": {
"firstName": "Jordan",
"lastName": "Reyes",
"dob": "1985-11-02",
"state": "TX"
}
}'Inmate search coverage by state
Prison coverage is broad. Jail coverage is deep in some states and thin in others, and the API says which.
Statewide prison systems are live for 51 states. County jails are a much larger and more uneven layer: the catalog lists 1,375 county jurisdictions, of which 992 are answering today. Together with the court and warrant layers, the search reaches more than a thousand county, state and federal jurisdictions.
Because no list of jails is ever finished, each response reports which systems answered and flags any that did not. The state-by-state picture is on the inmate search page and in the coverage reference; federal matters are described on federal criminal records.
Inmate search API or inmate search?
Same custody data, different job.
| Inmate search API (this page) | Inmate search | |
|---|---|---|
| Who it is for | A developer adding custody checks to a product | A person trying to find where someone is held |
| How you use it | An HTTPS call from your server, JSON back | A search form, results on screen |
| Volume | One person or a whole list through batch | One name at a time |
| Where to start | The quickstart | Inmate search |
Inmate search API pricing
One price per search across every prison system and jail in the search. No per-state fee, no per-facility fee.
| Item | Price |
|---|---|
| Inmate search (cached answer) | $0.15 per search |
| Volume rate | $0.11 per search past 2,000 searches in a calendar month |
| Free to start | 25 searches, no card |
| Live re-verification | +$0.02 per completed source, capped at $2.00 per search; a failed live check is not billed |
| Batch (CSV or JSON list) | Each row billed as one search |
| FCRA workflows | Contact us for pricing |
Worked examples by volume: background check API pricing · all rates: pricing.
Making a hiring or tenant decision? Use an FCRA workflow.
FCRA workflows are built primarily for tenant screening and hiring decisions. If a result will help decide whether to hire someone or rent to them, the check has to run as an FCRA-regulated consumer report, with a permissible purpose, consent, accuracy controls and a dispute path for the person. Our standard search and API are not a consumer report. FCRA workflows run through FCRA Partner Access, for background check companies and screening platforms under a written FCRA agreement.
FCRA pricing is quoted per partner, so contact us for pricing.
Inmate search API questions
What is an inmate search API?
It lets your software check whether a person is in custody without visiting each prison system’s and each jail’s lookup page. You send a name and, ideally, a date of birth; the API returns matching custody records as JSON, with the facility, the status and the release date where one is published.
Which prisons and jails does the inmate search API cover?
Statewide prison systems are live for 51 states. On the county side the jail-roster catalog lists 1,375 jurisdictions, of which 992 are answering today. State prison coverage is broad; county jail depth varies a lot by state. GET /v1/criminal/jurisdictions?recordKind=doc-inmate (or jail-roster) returns the current list.
Can I look someone up by inmate number?
The search is by name: a surname is required, and a first name, date of birth and state narrow it. Each record returns a stable externalId built from the holding system and its own inmate or booking number, which you can store to recognise the same record on a later search.
What is the difference between a jail record and a prison record?
A county jail holds people who have just been arrested, are awaiting trial or are serving short sentences. A state prison holds people sentenced after a conviction, usually for more than a year. In the response, a prison record has a source code ending in -DOC and normally carries a sentence and the conviction case; a jail record has a bare county code and often no case at all.
Does the API show release dates and parole?
Where the prison system publishes them, yes. releaseDate is the projected release, actualReleaseDate is set once the person has left, and the parole block carries the eligibility date and the review status. A field the system does not publish comes back null rather than a guess.
Does it include people who have already been released?
Yes. A released person’s record stays searchable with currentlyIncarcerated false and everIncarcerated true, which is what a screening or reentry product usually needs to know.
How much does an inmate search cost?
$0.15 per search, dropping to $0.11 past 2,000 searches in a calendar month. One search checks the prison systems and the jails together, so there is no per-state or per-facility fee. The first 25 searches are free, no card.
Can I use inmate records for hiring or tenant decisions?
Not from the standard search — its results are not a consumer report. A hiring or tenant decision runs as an FCRA workflow through FCRA Partner Access, for consumer reporting agencies and screening platforms under a written FCRA agreement.
Run your first inmate search
25 free searches on one key. No card, no sales call.
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.
- Offender search API — The registry search and the criminal search side by side, on one key.
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.
- 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.