Offendersearch
Inmate Search API

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"
    }
  }'
51
States with a statewide prison system live
1,375
County jurisdictions in the jail-roster catalog
1 call
Prisons and jails searched together
$0.15
Per search — $0.11 past 2,000 a month
The problem

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.

Response

What the inmate search API returns

Custody is a status plus dates. These are the real fields.

FieldWhat it holds
currentStatusin_custody, released, on_parole, on_probation and similar — where the person stands today.
currentlyIncarcerated, everIncarceratedTwo booleans that answer the two most common questions without parsing a status string.
custodyFacilityThe prison unit or jail holding the person, by name.
custody.custodyClass, description, facilityTypeSecurity classification, housing description and the kind of facility, where the system publishes them.
dateIncarceratedThe admission date on a prison record; the booking date on a jail record.
releaseDate, actualReleaseDateThe projected release date, and the date the person actually left once they have.
sentence.length, years, monthsThe sentence as stated, plus the same term as numbers.
sentence.minDate, maxDate, dischargeDateThe earliest and latest end of the sentence and the discharge date, where published.
parole.eligibilityDate, nextReviewDate, reviewStatus, lastDecisionParole eligibility and where the review stands.
cases[]On a prison record, the conviction case or cases behind the sentence, with charges and dispositions.
mugshotUrlA link to the custody photo where the system publishes one.
sources[].code, level, recordUrlThe 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.

Two custody layers

State prison records and county jail records

Both answer “is this person held?”, but they are different records with different depth.

State prison recordCounty jail record
Held byA state corrections departmentA county jail or sheriff
sources[].codeEnds in -DOC, for example TX-DOCA bare county code, for example TX-DALLAS
Who is in itPeople sentenced after a convictionPeople just arrested, awaiting trial or serving short sentences
Date of birthOften a full date; varies by stateUsually an age only
Sentence and paroleUsually publishedRarely
cases[]The conviction case behind the sentenceOften empty
Read moreThis pageArrest records API
Sentences

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”.

Status

In custody, released or on parole: reading custody status

Three fields cover almost every product decision.

QuestionField to readNotes
Is this person held right now?currentlyIncarceratedtrue or false — no string parsing
Has this person ever been held?everIncarceratedStays true after release
What is their status today?currentStatusin_custody, released, on_parole, on_probation and similar
Is the record still listed?lifecycle.droppedOuttrue when a record is no longer listed by the system that held it; the record is kept and flagged
Is this my subject?matchState, matchConfidenceFull-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.

For developers

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 live block to re-check named systems during the request.
  • Lists — POST /v1/criminal/batch takes 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"
    }
  }'
Coverage

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.

Two pages, two readers

Inmate search API or inmate search?

Same custody data, different job.

Inmate search API (this page)Inmate search
Who it is forA developer adding custody checks to a productA person trying to find where someone is held
How you use itAn HTTPS call from your server, JSON backA search form, results on screen
VolumeOne person or a whole list through batchOne name at a time
Where to startThe quickstartInmate search
Pricing

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.

ItemPrice
Inmate search (cached answer)$0.15 per search
Volume rate$0.11 per search past 2,000 searches in a calendar month
Free to start25 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 workflowsContact 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.

Contact us for FCRA pricingHow FCRA workflows work

FAQ

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

Criminal records

Build with it

Screening and compliance