Offendersearch
Guide · developers

How to add sex offender screening to your app

One REST call searches 58 US registries and returns scored, source-cited records. This is the whole integration — key, first call, reading the response, and the one field that separates a real “no match” from a partial one — with copy-paste examples you can run today.

Step 1

Get a key

Self-serve and instant — the reason to reach for an API in the first place is to start today, not after a sales cycle.

Create an account and a key is issued immediately — 25 searches free, no card, no credentialing wait. Keep it server-side: the key authenticates your backend, so calls go from your server to the API, never from a browser where the key would be exposed. Set it as an environment variable (OFFENDERSEARCH_KEY) and you are ready to make the first call.

Step 2

Make your first call

Send whatever identity you hold — last name is enough; add first name and dob to narrow. One call covers 58 US registries at once.

curl https://api.offendersearch.app/v1/search \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": { "firstName": "Jane", "lastName": "Roe",
                   "dob": "1985-07-30" } }'
Step 3

Read a scored, source-cited response

Every record carries a matchConfidence, the matchBasis that earned it, and the sources that hold it — each with a link to the official record and the time it was last checked. You render results; you never reconcile fifty different formats.

{
  "status": "complete",
  "counts": { "records": 1, "sourcesQueried": 58,
              "sourcesComplete": 58, "sourcesIncomplete": 0 },
  "records": [{
    "matchConfidence": 1.0,
    "matchBasis": ["lastName", "firstName", "dob"],
    "matchState": "dob_match",
    "name": { "full": "Jane A. Roe" },
    "sources": [
      { "jurisdiction": "TX", "registryName": "State Sex Offender Registry",
        "recordUrl": "https://…", "lastCheckedAt": "2026-09-06T08:20:00Z" }
    ]
  }]
}
Match quality

Reading matchState and matchConfidence

Two fields decide how your app should treat a result. matchConfidence is a 0–1 score; matchState tells you what evidence produced it, so you can set a defensible bar for auto-clearing versus sending to a human.

matchStateWhat it means, and how to treat it
dob_matchMatched on a full date of birth — the strongest evidence. Safe to treat as high-confidence.
year_matchMatched on birth year where the registry publishes only the year. Hold your own threshold for it.
age_matchMatched on age when no date was available; widen or tighten with ageTolerance.
name_matchMatched on name alone, with no date evidence to confirm it. Review by hand before acting.

A common pattern: auto-clear only on a high matchConfidence with a dob_match, and route everything weaker to a review queue.

Step 4

Handle completeness honestly

The single most important field for a screening product is whether the search was actually complete.

Compare counts.sourcesComplete against counts.sourcesQueried on every response. When they match, a “no match” is real and you can say so. When they differ, some registries did not answer on that pass — you are looking at a partial result, and your UI should say “checked 55 of 58 sources” rather than flashing an all-clear. A screening product that silently hides an incomplete search is worse than one that admits it: the whole value is trust, and trust is built on telling the user what you could not check.

At scale

Batch and async, when one call isn’t enough

Screen one person inline at the point of onboarding, or thousands at once when you re-screen an existing base.

  • Inline. Call /v1/search synchronously at signup or at match time and act on the result in the same request.
  • Batch. Send many people in one request and get one scored result per row, billed per row — see CSV batch screening.
  • Async. Submit high volume and collect results as they finish, so a large re-screen never blocks a request.
  • Criminal records too. Add county, state and federal records on the same key when the risk profile warrants it.
For AI agents

Skip the wrapper with MCP

Building on an AI agent instead of a classic backend? Point it at the hosted MCP server and the search becomes a tool the model can call directly.

The hosted MCP server exposes registry search to Claude, ChatGPT, Cursor and other agents, so you can build registry checks into an assistant or a workflow without writing and hosting a tool wrapper yourself. The field reference and error contract live in the quickstart and the Sex Offender Search API overview.

FAQ

Integration questions

How do I get an API key?

Sign up and a key is issued instantly — no sales call, no credentialing wait. The first 25 searches are free with no card, which is enough to build and test the integration before you commit.

Do I have to search each state separately?

No. One call to POST /v1/search fans out across 58 US registries — the 50 states, DC and the territories — and returns de-duplicated, scored records. The response also reports how many sources answered, so you can tell a clean "no match" from an incomplete search.

How do I know a search was complete?

Read counts.sourcesQueried against counts.sourcesComplete on every response. If they differ, some registries did not answer on that pass and you are looking at a partial result — surface that in your UI rather than presenting it as a definitive "no match".

What does matchState tell me?

It is how the match was earned: dob_match (full date of birth), year_match (birth year only), age_match (age only), or name_match (name with no date evidence). Pair it with matchConfidence (0–1) to set the bar at which your app auto-clears a person versus flags them for a human to review.

Can an AI agent run the search?

Yes. There is a hosted MCP server, so Claude, ChatGPT, Cursor and other agents can search the registries directly without you wrapping the API in a tool yourself.

Is this a consumer report?

No. Offendersearch is not a consumer reporting agency and results are not a consumer report. Do not use them for FCRA-covered decisions without appropriate process.

Offendersearch is not a consumer reporting agency and results are not a consumer report.

Ship registry screening this week

An instant key, 25 free searches, a five-minute quickstart, and one call that covers 58 US registries.