Offendersearch API · OpenAPI Overlay 1.0.0

API Evangelist enhancements — Offendersearch API

51 actions 51 updates documentation extends https://offendersearch.app/openapi.json
Generated by API Evangelist Written by API Evangelist tooling for Offendersearch API's API. It is a proposal applied on top of the contract, not a document Offendersearch API publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

tagsoperationIdcontacttermsOfServiceparameters

Targets 39 · first 16 shown; the file carries all of them

$.info
$
$.paths['/v1/search'].post
$.paths['/v1/searches'].post
$.paths['/v1/searches/{searchId}'].get
$.paths['/v1/searches/{searchId}/proof'].post
$.paths['/v1/report'].post
$.paths['/v1/batch'].post
$.paths['/v1/proof-docs/{token}'].get
$.paths['/v1/records/{recordId}'].get
$.paths['/v1/sources'].get
$.paths['/v1/support'].post
$.paths['/v1/compat/sexoffender'].post
$.paths['/v1/compat/sexoffender'].get
$.paths['/v1/auth/signup'].post
$.paths['/v1/auth/login'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — Offendersearch API
  version: 1.0.0
extends: https://offendersearch.app/openapi.json
x-generated: '2026-08-18'
x-method: generated
x-source: openapi/_original/offendersearch-api-openapi.json
x-description: 'Non-destructive enhancements API Evangelist derived for the published Offendersearch OpenAPI
  3.1.0. It changes nothing the provider asserts: it adds a tag taxonomy (the spec declares no tags[]
  and tags no operation), operationIds for the twelve admin operations that ship without one, info.contact
  and info.termsOfService (both absent), and the Idempotency-Key header that the documentation defines
  but the contract omits. The original spec is never mutated — see openapi/_original/.'
actions:
- target: $.info
  description: Add machine-readable contact and terms to info — the spec ships neither, so a consumer
    cannot resolve an owner or a licence from the contract alone.
  update:
    contact:
      name: Offendersearch Support
      email: support@offendersearch.app
      url: https://offendersearch.app/about
    termsOfService: https://offendersearch.app/terms
- target: $
  description: Declare the tag set this overlay applies. The published spec has no tags[] and no operation
    is tagged, so every generator renders 36 operations as one flat list.
  update:
    tags:
    - name: Search
      description: Synchronous, asynchronous, batch and legacy-compatibility search across all 58 registries.
    - name: Records
      description: Fetch a single normalized record by recordId or uuid.
    - name: Reports
      description: Consolidated verification-report PDFs and per-registry proof documents.
    - name: Coverage
      description: Jurisdiction coverage catalog and live per-registry source health. Anonymous.
    - name: Support
      description: Send a message to the Offendersearch team.
    - name: Account
      description: Account, usage, team and billing — session-token surface.
    - name: Keys
      description: API key lifecycle — create, list, rotate, revoke.
    - name: Admin
      description: Internal ops surface behind the separate X-Admin-Key credential. Not part of the public
        API.
- target: $.paths['/v1/search'].post
  description: Tag syncSearch as Search.
  update:
    tags:
    - Search
- target: $.paths['/v1/searches'].post
  description: Tag asyncSearch as Search.
  update:
    tags:
    - Search
- target: $.paths['/v1/searches/{searchId}'].get
  description: Tag getSearch as Search.
  update:
    tags:
    - Search
- target: $.paths['/v1/searches/{searchId}/proof'].post
  description: Tag makeProof as Reports.
  update:
    tags:
    - Reports
- target: $.paths['/v1/report'].post
  description: Tag makeReport as Reports.
  update:
    tags:
    - Reports
- target: $.paths['/v1/batch'].post
  description: Tag batchSearch as Search.
  update:
    tags:
    - Search
- target: $.paths['/v1/proof-docs/{token}'].get
  description: Tag getProofDoc as Reports.
  update:
    tags:
    - Reports
- target: $.paths['/v1/records/{recordId}'].get
  description: Tag getRecord as Records.
  update:
    tags:
    - Records
- target: $.paths['/v1/sources'].get
  description: Tag listSources as Coverage.
  update:
    tags:
    - Coverage
- target: $.paths['/v1/support'].post
  description: Tag submitSupportMessage as Support.
  update:
    tags:
    - Support
- target: $.paths['/v1/compat/sexoffender'].post
  description: Tag compatSexoffenderPost as Search.
  update:
    tags:
    - Search
- target: $.paths['/v1/compat/sexoffender'].get
  description: Tag compatSexoffenderGet as Search.
  update:
    tags:
    - Search
- target: $.paths['/v1/auth/signup'].post
  description: Tag signup as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/auth/login'].post
  description: Tag login as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/account'].get
  description: Tag getAccount as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/keys'].get
  description: Tag listKeys as Keys.
  update:
    tags:
    - Keys
- target: $.paths['/v1/keys'].post
  description: Tag createKey as Keys.
  update:
    tags:
    - Keys
- target: $.paths['/v1/keys/{keyId}/rotate'].post
  description: Tag rotateKey as Keys.
  update:
    tags:
    - Keys
- target: $.paths['/v1/keys/{keyId}'].delete
  description: Tag deleteKey as Keys.
  update:
    tags:
    - Keys
- target: $.paths['/v1/usage'].get
  description: Tag getUsage as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/team'].get
  description: Tag getTeam as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/team'].post
  description: Tag inviteMember as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/team/{memberId}'].delete
  description: Tag removeMember as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/billing'].get
  description: Tag getBilling as Account.
  update:
    tags:
    - Account
- target: $.paths['/v1/admin/accounts'].get
  description: Tag GET /v1/admin/accounts as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/warm-queries'].get
  description: Tag GET /v1/admin/warm-queries as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/warm-queries'].post
  description: Tag POST /v1/admin/warm-queries as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/warm'].post
  description: Tag POST /v1/admin/warm as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/cache-stats'].get
  description: Tag GET /v1/admin/cache-stats as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/scraper-health'].get
  description: Tag GET /v1/admin/scraper-health as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/scraper-runs'].get
  description: Tag GET /v1/admin/scraper-runs as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/admin/ingest'].post
  description: Tag POST /admin/ingest as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/admin/ingest/rerun-failures'].post
  description: Tag POST /admin/ingest/rerun-failures as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/admin/ingest/status'].get
  description: Tag GET /admin/ingest/status as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/admin/freshness'].get
  description: Tag GET /admin/freshness as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/admin/ingest/report'].get
  description: Tag GET /admin/ingest/report as Admin.
  update:
    tags:
    - Admin
- target: $.paths['/v1/admin/accounts'].get
  description: Add a missing operationId for GET /v1/admin/accounts — the published spec leaves all 12
    admin operations without one, so no generator can name them.
  update:
    operationId: getV1AdminAccounts
- target: $.paths['/v1/admin/warm-queries'].get
  description: Add a missing operationId for GET /v1/admin/warm-queries — the published spec leaves all
    12 admin operations without one, so no generator can name them.
  update:
    operationId: getV1AdminWarmQueries
- target: $.paths['/v1/admin/warm-queries'].post
  description: Add a missing operationId for POST /v1/admin/warm-queries — the published spec leaves all
    12 admin operations without one, so no generator can name them.
  update:
    operationId: postV1AdminWarmQueries
- target: $.paths['/v1/admin/warm'].post
  description: Add a missing operationId for POST /v1/admin/warm — the published spec leaves all 12 admin
    operations without one, so no generator can name them.
  update:
    operationId: postV1AdminWarm
- target: $.paths['/v1/admin/cache-stats'].get
  description: Add a missing operationId for GET /v1/admin/cache-stats — the published spec leaves all
    12 admin operations without one, so no generator can name them.
  update:
    operationId: getV1AdminCacheStats
- target: $.paths['/v1/admin/scraper-health'].get
  description: Add a missing operationId for GET /v1/admin/scraper-health — the published spec leaves
    all 12 admin operations without one, so no generator can name them.
  update:
    operationId: getV1AdminScraperHealth
- target: $.paths['/v1/admin/scraper-runs'].get
  description: Add a missing operationId for GET /v1/admin/scraper-runs — the published spec leaves all
    12 admin operations without one, so no generator can name them.
  update:
    operationId: getV1AdminScraperRuns
- target: $.paths['/admin/ingest'].post
  description: Add a missing operationId for POST /admin/ingest — the published spec leaves all 12 admin
    operations without one, so no generator can name them.
  update:
    operationId: postAdminIngest
- target: $.paths['/admin/ingest/rerun-failures'].post
  description: Add a missing operationId for POST /admin/ingest/rerun-failures — the published spec leaves
    all 12 admin operations without one, so no generator can name them.
  update:
    operationId: postAdminIngestRerunFailures
- target: $.paths['/admin/ingest/status'].get
  description: Add a missing operationId for GET /admin/ingest/status — the published spec leaves all
    12 admin operations without one, so no generator can name them.
  update:
    operationId: getAdminIngestStatus
- target: $.paths['/admin/freshness'].get
  description: Add a missing operationId for GET /admin/freshness — the published spec leaves all 12 admin
    operations without one, so no generator can name them.
  update:
    operationId: getAdminFreshness
- target: $.paths['/admin/ingest/report'].get
  description: Add a missing operationId for GET /admin/ingest/report — the published spec leaves all
    12 admin operations without one, so no generator can name them.
  update:
    operationId: getAdminIngestReport
- target: $.paths./v1/searches.post
  description: Document the Idempotency-Key request header. It is documented on the website (docs/async-and-webhooks.md)
    but is absent from the contract, so a code generator produces a client that cannot send it.
  update:
    parameters:
    - name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
      description: A unique client-generated token. A repeated key returns the ORIGINAL job rather than
        starting — or billing — a second search.