Offendersearch
API Reference · v1.0.0

Search — POST /v1/search

The primary endpoint. Every parameter, the four stages of a search, and nine worked query shapes.

Base URL https://api.offendersearch.appThis page as Markdown/docs/search.md

How a search works

Every search moves through the same four stages, so the response is predictable and the same query returns the same answer:

  1. Dispatch. Your query is matched across the jurisdictions you targeted — all 58 by default, or the codes in jurisdictions.
  2. Match & verify. Each jurisdiction’s rows are filtered by your match mode, then checked against any dob/age you supplied to confirm identity.
  3. De-duplicate & score. The same person present in multiple jurisdictions is merged into one record whose sources[] lists every corroborating jurisdiction, and each record gets a matchConfidence and matchBasis.
  4. Return. You get records, a per-jurisdiction sourceStatus, and counts — with status: "complete" or "partial".
Stage four is the one to build on. Every jurisdiction the search touched appears in sourceStatus[] with its own status and freshness, so coverage is reported per response rather than assumed. See Result completeness & per-source status.

Three companion pages carry the detail this endpoint reference assumes: Matching & confidence for the match modes and the closed strategy vocabulary, Searching by date of birth for matchState, and Jurisdictions for the difference between scoping a search and filtering a result.

What the envelope guarantees

  • Every top-level key is always present. Test the value, never for key existence. See The Record object.
  • Coverage is reported, not implied. counts.sourcesQueried, sourcesComplete, sourcesIncomplete and sourcesSkippedByScope appear on every response, alongside a sourceStatus[] entry per jurisdiction.
  • Match strength is labelled. matchState, matchBasis, matchDetail, matchedName and matchConfidence let you set your own auto-accept threshold rather than inherit one.
  • The contract is additive. New data lands as a new recordType; existing keys and their meanings do not change under you.
  • Ordering is total and stable. The same query returns the same records in the same order, so paging never reshuffles. See Pagination.