Resolve a website to a code
Map a roster or court website you know to the neutral jurisdiction code to search with.
Base URL https://api.offendersearch.appYour site in, our neutral code out
You may already know the roster or records website for a place you care about — a county sheriff’s inmate page, a court portal — without knowing our jurisdiction code for it. The resolver maps a website to that code, so you can drive a search from a URL.
POST /v1/criminal/resolve
X-API-Key, available on every account exactly like search — no entitlement required. Not metered — a cheap in-memory lookup that consults no data source, so it emits no criminal_call. Send one website or a list of websites; a request with neither is 422 no_website.
curl -X POST https://api.offendersearch.app/v1/criminal/resolve \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{ "website": "https://sheriff.examplecounty.gov/inmates" }'{
"input": "https://sheriff.examplecounty.gov/inmates",
"supported": true,
"code": "TX-DALLAS",
"state": "TX",
"county": "Dallas",
"note": "equivalent data available for this jurisdiction"
}Response fields
| Field | Type | Meaning |
|---|---|---|
| input | string | Your website, echoed back verbatim so you can line results up with inputs. |
| supported | boolean | true = we have equivalent data and code is populated. false = not covered. |
| code | string | null | The public jurisdiction code to use in a search. null when unsupported. |
| state | string | null | The jurisdiction’s state, when we can identify it — even for an unsupported site. |
| county | string | null | The jurisdiction’s county, when we can identify it. |
| note | string | A plain-language explanation, e.g. "equivalent data available for this jurisdiction" or "Baldwin, AL is not currently covered". |
An unsupported site is supported: false with a plain-language reason — not an error. Only a request with no site at all is a 422 no_website.
Resolving a list
A list of websites returns a results[] wrapper, one entry per input, in order — so a mixed batch of sites still resolves the ones we cover and tells you which ones we do not.
curl -X POST https://api.offendersearch.app/v1/criminal/resolve \
-H "X-API-Key: $OFFENDERSEARCH_KEY" \
-H "Content-Type: application/json" \
-d '{ "websites": ["https://sheriff.examplecounty.gov/inmates",
"https://jail.baldwincounty.example/roster"] }'{
"count": 2,
"results": [
{ "input": "https://sheriff.examplecounty.gov/inmates",
"supported": true, "code": "TX-DALLAS", "state": "TX", "county": "Dallas",
"note": "equivalent data available for this jurisdiction" },
{ "input": "https://jail.baldwincounty.example/roster",
"supported": false, "code": null, "state": "AL", "county": "Baldwin",
"note": "Baldwin, AL is not currently covered" }
]
}Using a website inline in a search
You don’t have to resolve first. query.website scopes a cached search to the resolved jurisdiction; live.websites live-verifies the resolved jurisdictions, exactly as if you had listed their codes. Whenever a search resolves a website, the response carries a top-level resolution[] array so you can see which code each site mapped to. See Search and Jurisdictions & codes.