The Criminal Background Check API: one cited answer per person
One call with a name and identifiers; one decision-ready answer across county, state and federal criminal records. Live now, on the same key that already runs our registry check.
Registry screening remains our primary product — the sex offender registry check, 58 US registries, continuously updated.
The flows this is being built for
Hiring
A candidate accepts an offer and your ATS needs an answer inside its own flow — not a login to a third-party portal and a PDF three days later. It sits behind exactly that call.
Tenancy
An application arrives with a name, a date of birth and yesterday as the deadline. A check belongs in the same screen the application is already on, with a result you can keep on file.
Marketplaces & platforms
Drivers, sitters, contractors, sellers: platform trust teams screen at signup and re-screen on a schedule. That is an API-shaped problem, and batch-shaped at renewal time.
Why a check needs all three layers
A background check that reads one layer is a check with a hole in it. Most criminal cases are county matters; a state repository may lag or omit them; a federal case — fraud, interstate offenses — appears in neither. The criminal search is being designed so one call reads across all three and tells you, per record, exactly which court it came from.
- One person in, one consistent, cited answer out
- County, state and federal layers in a single call
- Bulk screening for re-checks and renewals
- A dashboard for the teams who never want to write code
Screening today? The registry check is live, and the criminal reference shows the shape it follows.
One request, one cited answer
POST /v1/criminal/search takes a person and returns every matching record with the jurisdiction that holds it and how it matched. Add live to check named sources at the moment of the search.
POST /v1/criminal/search
{
"query": {
"firstName": "Alex",
"lastName": "Hamilton",
"dob": "1989-04-23",
"state": "TX"
},
"live": { "jurisdictions": ["TX-DALLAS"] }
}{
"status": "complete",
"counts": { "records": 1, "sourcesQueried": 1,
"sourcesComplete": 1, "sourcesIncomplete": 0 },
"sourceStatus": [{ "code": "TX-DALLAS", "ok": true,
"records": 1, "live": true }],
"records": [{
"externalId": "TX-DALLAS:booking:889201",
"name": { "first": "ALEX", "last": "HAMILTON" },
"matchState": "dob_match",
"matchConfidence": 0.95,
"liveChecked": true
}],
"legal": { "notice": "Not a consumer report. …" }
}More than two live sources, or ones that are not sync-eligible, run asynchronously: the response returns a searchId and a poll URL. Full reference: criminal search docs. Every parameter and record type, endpoint by endpoint, is on the criminal search API page; the county, state and federal layers it reaches are explained on the criminal records API page.
The fields a screening decision needs
| Field | What it tells you |
|---|---|
matchState | How the record was tied to the person: dob_match, year_match, age_match or name-only — the line between a lead and an identification |
matchBasis, matchConfidence | Which identifiers agreed, and a score you can threshold |
cases[], caseNumber, filedDate | The court case behind a record, with its county and filing date |
charges[], statute, level | Each charge, the statute where published, and felony, misdemeanor or infraction |
charges[].disposition, dispositionDate | How each charge ended — the field that decides whether a record is a conviction |
sentence, custody fields | Sentence where published; current or past incarceration and facility |
currentStatus | For warrants and custody records, whether the status is current |
sources[], sourceStatus[] | The jurisdiction holding each record, and whether each source answered — live or not |
The complete schema is the criminal record object. The guide to reading a background check explains each field in plain language.
Matching, and the false positives it prevents
The costly failure in criminal screening is not a missed record — it is a record attached to the wrong person. Public criminal records are filed under names, and most carry a date of birth with varying precision. An API that answers “match” or “no match” hides the difference between a full date-of-birth agreement and a shared surname.
Every record here says how it matched. A query with a date of birth labels each record by what its source published: a full date match, a birth-year match, an age-only match, or no date at all — flagged as unverified. Your system can act automatically on the first and route the rest to a person. That is the design that keeps a namesake from becoming an accusation.
Seconds per check, priced per call
$0.15 per call
The same price as a registry search, dropping to $0.11 past 2,000 calls in a month. One account and one key cover both products.
$0.02 per live source
A live check at a named source adds $0.02 per completed source, capped at $2.00 a search. Every response reports exactly what was charged.
Seconds, not days
A search answers in seconds; live checks of several sources run asynchronously and you poll for the result. See how long checks take.
Full detail on the pricing page, including batch and monitoring.
How this differs from a typical background check API
| Typical background check API | Offendersearch | |
|---|---|---|
| Result shape | A report, often a PDF, after hours or days | Structured JSON in the same call |
| Match evidence | Match / no match | Match state and basis on every record |
| Which sources answered | Rarely stated | Per-source status, live or not |
| Registry and criminal | Separate products or add-ons | One key, one price |
| Pricing | Per report, by package, often by quote | Published per call, from $0.11 |
| Consumer report? | Yes, when sold by a CRA | No — use a CRA for FCRA-covered decisions |
From key to first check in four steps
- Create an account and copy your API key — the free trial covers your first searches
- Send
POST /v1/criminal/searchwith a name and, ideally, a full date of birth - Act on
dob_matchrecords; route weaker matches to a reviewer; checksourceStatusbefore reading an empty result as clear - Add batch for re-screens and a monitor to keep watching after the check
What a criminal background check API cannot tell you
No API reaches a record a jurisdiction does not publish. Some states publish a statewide court index; many do not, and their dispositions live only in county files. Our state-by-state pages show which layers each state publishes, so you can see where an empty result is strong evidence and where it is not.
An empty result is only as good as the sources that answered. That is why the response separates sourcesComplete from sourcesIncomplete: a search with a source that did not answer is not a clear search, and your system should treat it that way.
And no data source makes a decision lawful by itself. If the result will be used to decide on hiring, housing, credit or insurance, the Fair Credit Reporting Act applies: order the report through a consumer reporting agency, get the applicant’s authorization, and follow the adverse action process. Offendersearch results are not a consumer report.
Keep watching after the check
A check answers today. A monitor keeps answering: POST /v1/monitors creates a recurring watch on a person by name and date of birth, evaluated every morning against our continuously updated data, and emails an alert when a matching criminal record appears or changes. Person monitoring is $3/mo.
Criminal and sex offender person monitors are billed separately, and criminal-record location monitoring is coming soon. Full reference: the Monitoring API docs. Monitoring is not a consumer report and must not be used for FCRA-governed hiring, tenancy, or credit decisions — those run through FCRA Partner Access.
POST /v1/monitors
{
"product": "criminal",
"type": "person",
"person": { "name": "Jordan Rivera", "dob": "1988-04-12" },
"channels": { "email": ["alerts@example.com"] }
}Background check API FAQ
Is the criminal background check API available today?
Yes. It is live and callable, reaching more than a thousand county, state and federal jurisdictions. The sex offender registry check — 58 US registries, continuously updated — remains our primary product and runs on the same key, callable from the API or without code from the dashboard.
How does a check differ from a records search?
A records search answers "what exists about this name". A check is that answer shaped for a decision: one person, their identifiers, the matching records across county, state and federal layers, each one cited to where it came from — in a schema your system can act on.
Can it be used for FCRA-regulated criminal checks?
Yes, through FCRA Partner Access — FCRA orders for approved consumer reporting agencies and screening platforms, under a written FCRA agreement, covering a criminal search, a registry search or both. It requires an exact date-of-birth match, withholds non-conviction records older than seven years unless the salary exemption applies, re-checks records live before they are furnished, and records evidence per order. Standard results are not a consumer report.
Can I screen against the sex offender registry today?
Yes, and it remains our primary product: 58 US registries behind one search, with photographs, aliases and the official record citation. The criminal layers run alongside it on the same key.
What does it cost to try?
There is a free trial on the same account as the registry search, and pricing is published before you are asked to commit to anything.
How much does the criminal background check API cost?
$0.15 per call, dropping to $0.11 per call past 2,000 calls in a month — the same price as a registry search. Live checks at named sources add $0.02 per completed source, capped at $2.00 per search. Batch rows are billed as one call each.
Do I need a date of birth?
It is optional but strongly recommended. With a date of birth, every record is labelled by how well it matched — full date, birth year, age or name only — so you can act on strong matches and review the rest. Without one, every result is a name match.
How fast is a criminal background check through the API?
A search answers in seconds. Asking for live checks at more than two sources, or at sources that are not sync-eligible, switches to asynchronous mode: you get a search ID and poll for the result.
Which jurisdictions does it cover?
It reaches more than a thousand county, state and federal jurisdictions. GET /v1/criminal/sources publishes the live list with per-jurisdiction status, and every response says which sources answered.
More criminal record types
Criminal Records API
The hub: county, state and federal criminal records behind one search — the same way the offender registry search works.
County Criminal Records
The courthouse layer — where most criminal cases actually live, spread across more than a thousand county jurisdictions.
Federal Criminal Records
The federal district courts: fraud, interstate and other federal offenses that never appear in a county search.
Statewide Criminal Search
One search per state instead of a patchwork of portals — or every covered state at once in a single 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.
Criminal records
- Criminal records API — County, state and federal records — jail, prison, court and warrant — through one API.
- Criminal search API — The search endpoint itself: parameters, record types and coverage, call by call.
- 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.
- Bulk criminal record search — Run a list of names against criminal records in one call.
Build with it
- API documentation — Quickstart, every endpoint, the record object and the OpenAPI spec.
- 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.
- MCP server for offender search — Give Claude and other AI agents the same search as a tool.
- Offendersearch vs offenders.io — A side-by-side comparison of the two registry APIs.