Offendersearch
Court Records API

The Court Records API

A court records API for criminal cases. Send a name and a date of birth and get back the cases filed against that person — case number, court, every charge and how each charge ended — as JSON, with a link to the court that holds the record.

One of five record types on 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": "Morgan",
      "lastName": "Okafor",
      "dob": "1990-06-18",
      "state": "OK"
    },
    "page": 1,
    "perPage": 50
  }'
22
States with a statewide court source
24
Court sources in the catalog
Per charge
Dispositions are returned charge by charge
$0.15
Per search — $0.11 past 2,000 a month
The record

What a court record is, and what it proves

A court record is the only criminal record that says how a charge ended. That is why it answers a different question from a booking or a prison record.

An arrest says a person was taken into custody. A prison record says a person is serving, or served, a sentence. A court record sits between the two: it is the case a prosecutor filed, the charges in it, and what the court did with each one. Guilty, dismissed, deferred, acquitted, still pending — only the court record tells you which.

That makes it the record to read when the question is “was this person convicted, and of what?” It is also the record with the most variation between states. Some courts publish a full date of birth, some a year, some none at all, and many states have no statewide case search to query. The API returns what the court published and labels the gaps, so your code can tell a confirmed match from a name-only one.

Response

What the court records API returns

Cases sit in a cases[] array on the record; each case carries its own charges[]. These are the real fields.

FieldWhat it holds
cases[].caseNumberThe docket or case number exactly as the court writes it — the key a clerk needs to pull the file.
cases[].courtThe court that holds the case, by name.
cases[].county, state, levelWhere the case sits, and whether the court is a county, state or federal one.
cases[].filedDateThe date the case was filed, where the court publishes it.
cases[].statusopen or disposed. An open case has no outcome yet, and its charges carry an empty disposition.
cases[].charges[].statuteThe code section charged, as cited by the court.
cases[].charges[].descriptionThe charge as the record describes it.
cases[].charges[].severityfelony, misdemeanor or infraction, where the court states it.
cases[].charges[].dispositionThe outcome of that single charge — GUILTY, DISMISSED, DEFERRED, ACQUITTED and the like. Empty while the charge is pending.
cases[].charges[].dispositionDate, offenseDateWhen the charge was decided and when the offense is alleged to have happened.
cases[].charges[].plea, countsThe plea entered and the number of counts, where published.
sources[].code, level, recordUrlThe jurisdiction that holds the record (for example OK-COURT) and its own link to it, so a result can be confirmed at the court.

Every field, with a complete example of each record type: the record object.

Dispositions

Dispositions and sentences, charge by charge

A case is not one outcome. It is one outcome per charge, and the API keeps them apart.

In the example at the top of this page, one case holds two charges: a misdemeanor that was deferred and a felony that was dismissed. Collapse that into a single “case status” and you lose the only fact that matters. So disposition, dispositionDate, severity and plea live on each entry in charges[], and cases[].status only says whether the case as a whole is open or disposed.

A disposition is reported for each charge as the record gives it, not rolled up into a single verdict for the person, because a deferred charge and a dismissed one are not the same thing and should not be made to look it. Where a conviction led to prison, the sentence — length, minimum and maximum dates, parole — is published by the prison system and arrives on the matching inmate search API record, with the conviction case attached.

Matching

Matching a defendant to the person you searched

A court case names a defendant. Whether that defendant is your subject is a separate question, and every record answers it explicitly.

FieldWhat it holds
name, aliasesThe defendant as the court names them, plus any alias the record lists.
dob.date, dob.birthYear, dobPrecisionCourts differ most here: a full date of birth, a year only, or nothing where the court redacts it. dobPrecision says which.
matchStatedob_match, year_match, age_match or no_dob_age_year — how strongly the birth evidence ties this record to your query.
matchConfidence, matchBasis, matchDetailThe score, the fields that agreed, and one plain sentence explaining the match.
unverifiedtrue when the court published no birth evidence to compare. The record is kept and flagged, never silently dropped.
currentStatusFor a court record, typically disposed or open — the state of the matter, not of the person.

Send a full date of birth whenever you have one. One dob in the query is compared against whatever each court published — a full date, a year or an age — and each record comes back labelled with the strength of that comparison. A record is only dropped when it has birth evidence that conflicts with yours. See matching and confidence for the thresholds.

Record kind

Getting only court records from a search

There is one search endpoint and no record-type parameter. Court records are recognised in the response.

What to checkA court recordOther record kinds
sources[].codeEnds in -COURT, for example OK-COURTA bare county code (jail booking), -DOC, -WARRANT or -REGISTRY
cases[]Always at least one case — it is the whole point of the recordOften empty on a jail booking; present on prison records as the conviction case
custodyFacilitynull — a court does not hold anyoneFilled on jail and prison records
currentStatusdisposed or openin_custody, released, active_warrant and similar

To list the court sources that exist before you search, call GET /v1/criminal/jurisdictions?recordKind=court, optionally with a state. To re-verify a case at the court during the request, add a live block naming the court’s code. Both are covered in jurisdictions.

For developers

Court records API code samples

Plain REST and JSON, with your key in the X-API-Key header. The person goes inside query, and query.lastName is required — a search without a surname is declined with a 422 rather than answered with a guess.

  • One call — court cases come back alongside custody and warrant records for the same person.
  • Paged — page and perPage sit at the top level; totalPages tells you when to stop.
  • Lists — POST /v1/criminal/batch takes a CSV or a JSON list, one result per row.
  • Stable reference — store externalId to recognise the same case on a later search.

Quickstart · criminal search API parameters · errors

curl -X POST \
  https://api.offendersearch.app/v1/criminal/search \
  -H "X-API-Key: $OFFENDERSEARCH_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "firstName": "Morgan",
      "lastName": "Okafor",
      "dob": "1990-06-18",
      "state": "OK"
    },
    "page": 1,
    "perPage": 50
  }'
Coverage

Court records coverage by state

Court data is the layer where we say the least, because it is the layer the country publishes least evenly.

Statewide court sources are live for 22 states, from 24 court sources in the catalog. In the remaining states there is no statewide court source in the search today; a person’s history there is answered from the custody layers instead — county jail bookings and the state prison system — and a conviction that led to prison still arrives with its case attached.

The whole criminal search reaches more than a thousand county, state and federal jurisdictions, with coverage in every US state. Which of those are court sources, state by state, is listed on the court records search page and in the coverage reference, and each response reports which sources answered so an incomplete search is never mistaken for a clean one.

Two pages, two readers

Court records API or court records search?

Same records, different job.

Court records API (this page)Court records search
Who it is forA developer adding case lookups to a productA person looking up one case by name
How you use itAn HTTPS call from your server, JSON backA form in the dashboard, results on screen
VolumeOne person or a whole list through batchOne name at a time
Where to startThe quickstartCourt records search
Pricing

Court records API pricing

One price per search, whatever comes back. A person with three cases in two states costs the same as a person with none.

ItemPrice
Court records 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

Court records API questions

What is a court records API?

It is a way to look up court cases from your own software instead of a clerk’s website. You send a name and, ideally, a date of birth; you get back the criminal cases filed against the matching person as JSON — case number, court, charges and how each charge ended. Ours is one endpoint, POST /v1/criminal/search, on the same key as the rest of the Offendersearch API.

Which courts does the API cover?

Statewide court sources are live for 22 states today, and that is the narrowest of the layers we search — US court publishing is fragmented, and many states do not offer a statewide case search at all. Conviction cases also arrive attached to state prison records. GET /v1/criminal/jurisdictions?recordKind=court lists the court sources that exist right now; build against that list rather than a number on this page.

Is there a separate endpoint for court records?

No. Court cases, prison records, jail bookings and warrants all come back from the same search call in one schema. A court record is the one with a filled cases[] block and a source code ending in -COURT, so keeping only court records is a one-line filter in your own code.

Does a court record show whether someone was convicted?

It shows what the court published. Each charge carries its own disposition, so one case can hold a dismissed felony and a guilty misdemeanor side by side. Read the disposition on each charge rather than the status of the case. A charge with an empty disposition is pending, and a filed case is not a conviction.

Does it include civil, family or traffic cases?

No. The API returns criminal cases. Civil suits, family matters, small claims and bankruptcy are different records and are not part of this product.

Are federal court cases included?

Federal matters appear where a federal source holds them, marked with level "federal" on the case and the source. The federal layer is described on the federal criminal records page; it is separate from the state court sources counted here.

How much does a court records search cost?

$0.15 per search, dropping to $0.11 past 2,000 searches in a calendar month. A search covers every record type at once, so the court cases, custody records and warrants for one person cost one search. The first 25 searches are free and need no card.

Can I use court records from this API for hiring or tenant decisions?

Not through the standard search. Standard results are not a consumer report. A hiring or tenant decision has to run as an FCRA workflow through FCRA Partner Access, which is for consumer reporting agencies and screening platforms under a written FCRA agreement.

Run your first court records 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