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
}'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.
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.
| Field | What it holds |
|---|---|
cases[].caseNumber | The docket or case number exactly as the court writes it — the key a clerk needs to pull the file. |
cases[].court | The court that holds the case, by name. |
cases[].county, state, level | Where the case sits, and whether the court is a county, state or federal one. |
cases[].filedDate | The date the case was filed, where the court publishes it. |
cases[].status | open or disposed. An open case has no outcome yet, and its charges carry an empty disposition. |
cases[].charges[].statute | The code section charged, as cited by the court. |
cases[].charges[].description | The charge as the record describes it. |
cases[].charges[].severity | felony, misdemeanor or infraction, where the court states it. |
cases[].charges[].disposition | The outcome of that single charge — GUILTY, DISMISSED, DEFERRED, ACQUITTED and the like. Empty while the charge is pending. |
cases[].charges[].dispositionDate, offenseDate | When the charge was decided and when the offense is alleged to have happened. |
cases[].charges[].plea, counts | The plea entered and the number of counts, where published. |
sources[].code, level, recordUrl | The 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 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 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.
| Field | What it holds |
|---|---|
name, aliases | The defendant as the court names them, plus any alias the record lists. |
dob.date, dob.birthYear, dobPrecision | Courts differ most here: a full date of birth, a year only, or nothing where the court redacts it. dobPrecision says which. |
matchState | dob_match, year_match, age_match or no_dob_age_year — how strongly the birth evidence ties this record to your query. |
matchConfidence, matchBasis, matchDetail | The score, the fields that agreed, and one plain sentence explaining the match. |
unverified | true when the court published no birth evidence to compare. The record is kept and flagged, never silently dropped. |
currentStatus | For 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.
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 check | A court record | Other record kinds |
|---|---|---|
sources[].code | Ends in -COURT, for example OK-COURT | A bare county code (jail booking), -DOC, -WARRANT or -REGISTRY |
cases[] | Always at least one case — it is the whole point of the record | Often empty on a jail booking; present on prison records as the conviction case |
custodyFacility | null — a court does not hold anyone | Filled on jail and prison records |
currentStatus | disposed or open | in_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.
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 —
pageandperPagesit at the top level;totalPagestells you when to stop. - Lists —
POST /v1/criminal/batchtakes a CSV or a JSON list, one result per row. - Stable reference — store
externalIdto recognise the same case on a later 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
}'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.
Court records API or court records search?
Same records, different job.
| Court records API (this page) | Court records search | |
|---|---|---|
| Who it is for | A developer adding case lookups to a product | A person looking up one case by name |
| How you use it | An HTTPS call from your server, JSON back | A form in the dashboard, results on screen |
| Volume | One person or a whole list through batch | One name at a time |
| Where to start | The quickstart | Court records search |
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.
| Item | Price |
|---|---|
| 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 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.
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
- 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.
- 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.