---
title: "Search sex offender records with JSON body"
method: POST
path: "/sexoffender"
---

# Search sex offender records with JSON body

`POST /sexoffender`

Recommended production method. Send your API key in X-API-Key or Authorization: Bearer and send search fields in the JSON body. Send optional X-Request-Id for customer-side request correlation. The standard endpoint also remains compatible with key in the JSON body for existing clients.

## Headers

- `X-Request-Id` string

## Request body

- SearchRequest — JSON body for POST /sexoffender. Uses the same fields as the GET query parameters. At least one search field is required.
  - `key` string — Your API key (required). If using POST, you can send it in X-API-Key or Authorization: Bearer instead.
  - `firstName` string — First name of offender
  - `lastName` string — Last name of offender
  - `dob` string, date — Date of birth (YYYY-MM-DD)
  - `city` string — Residence city
  - `state` string — Residence state (full name or 2-letter code)
  - `zipcode` string — Residence zip code
  - `address` string — Street address search. Fuzzy by default; supports common address abbreviations and is billed at the fuzzy search rate (+$0.02/call). Do not combine with q or lat/lng. For mode=extensive, combine with firstName and lastName.
  - `lat` number — Latitude for GIS radius search
  - `lng` number — Longitude for GIS radius search
  - `radius` number — Radius in miles for GIS search (default 1, max 100)
  - `mode` 'extensive' — Set to 'extensive' for alias search, state-level enrichment, and additional response fields (aliases, locations, stateData). +$0.05/call.
  - `fuzzy` boolean — Enable fuzzy name matching — handles typos, partial names, nicknames, hyphenated names, and address abbreviations. +$0.02/call.
  - `q` string — Free-text search across names, aliases, address, city, and zip code. Use with fuzzy=true instead of firstName/lastName.
  - `prefixMatch` 'firstName' | 'lastName' — Enable prefix matching on the specified name field
  - `uuid` string — Pull a single record by UUID
  - `personUuid` string — Pull a single record by Person UUID
  - `faceId` string — Face ID from Facial Search API
  - `createdAtStart` string, date — Filter by first appearance in system (YYYY-MM-DD)
  - `createdAtEnd` string, date — Filter by first appearance in system (YYYY-MM-DD)
  - `updatedAtStart` string, date — Filter by last update in system (YYYY-MM-DD)
  - `updatedAtEnd` string, date — Filter by last update in system (YYYY-MM-DD)
  - `page` integer — Page number for GIS search pagination. Each page is billed as a separate API call.

## Response `200`

Successful search

- object
  - `offenders` Offender[]
    - `name` string — Full name
    - `firstName` string
    - `lastName` string
    - `middleName` string
    - `aliases` Alias[] — Known aliases (Extensive Mode only)
      - `prefix` string, nullable
      - `givenName` string
      - `middleName` string, nullable
      - `surName` string
      - `suffix` string, nullable
    - `dob` string, date-time, nullable
    - `dobPrecision` 'exact' | 'year' | 'year_month' | 'unknown' — Precision of the dob field. Some registries provide only a birth year, which is normalized to YYYY-01-01 and marked as year.
    - `address` string
    - `city` string
    - `state` string
    - `zipcode` string
    - `locations` Location[] — All official addresses (Extensive Mode only)
      - `type` string
      - `address` string
      - `streetAddress` string
      - `city` string
      - `county` string
      - `state` string
      - `zipcode` string
      - `zipCode` string
      - `fromDate` string
      - `toDate` string
    - `sex` string
    - `age` string
    - `eyeColor` string
    - `hairColor` string
    - `height` string
    - `weight` string
    - `race` string
    - `ethnicity` string
    - `marks` string — Tattoos, scars, marks
    - `riskLevel` string
    - `crime` string
    - `registrationDate` string, date-time, nullable
    - `offenderUrl` string, uri — URL to source state registry page
    - `offenderImageUrl` string, uri — Profile image URL from state registry
    - `offenderImageUrlR2` string, uri — Cached profile image URL
    - `lat` number — Latitude (-1 if unknown)
    - `lng` number — Longitude (-1 if unknown)
    - `jurisdiction` string — State/jurisdiction code
    - `isAbsconder` boolean, nullable
    - `isPredator` boolean, nullable
    - `updatedAt` string, date-time
    - `createdAt` string, date-time, nullable
    - `uuid` string, uuid
    - `sources` Source[]
      - `id` string
      - `name` string
      - `url` string, uri
    - `stateData` StateData — State-specific registry data (Extensive Mode only). Availability varies by state.
      - `stateOffenderId` string
      - `status` string
      - `designation` string
      - `registrationEnds` string
      - `verificationRequirement` string
      - `lawAgency` string
      - `judgmentOfConvictionUrl` string, uri
      - `locations` Location[]
        - `type` string
        - `address` string
        - `streetAddress` string
        - `city` string
        - `county` string
        - `state` string
        - `zipcode` string
        - `zipCode` string
        - `fromDate` string
        - `toDate` string
      - `offenses` object[]
        - `offense` string
        - `convictionDate` string
        - `releaseDate` string
        - `statute` string
        - `victimAge` string
        - `victimSex` string
        - `jurisdiction` string
        - `caseNumber` string
      - `vehicles` object[]
      - `names` string[]
      - `photos` object[]
        - `photoId` string, nullable
        - `isCurrent` string
        - `datePosted` string
  - `page` integer — Current page (GIS only)
  - `totalPages` integer — Total pages (GIS only)

## Other responses

- `400` — Bad request — missing or invalid parameters
- `401` — Unauthorized — missing or invalid API key
- `405` — Method not allowed

---

[API](https://skmtc.dev/offenders/apis/offenders-io-sex-offender-registry-api.md) · [All operations](https://skmtc.dev/offenders/apis/offenders-io-sex-offender-registry-api/llms.txt) · [OpenAPI document](https://skmtc.dev/offenders/apis/offenders-io-sex-offender-registry-api/revisions/add08704c7cd?raw)
