---
title: "Search sex offender records"
method: GET
path: "/sexoffender"
---

# Search sex offender records

`GET /sexoffender`

Search the national sex offender registry by name, address, zip code, GPS coordinates, or free-text query. For quick demos, GET with the key query parameter remains supported. For production, prefer POST with X-API-Key or Authorization: Bearer and JSON body fields. Send optional X-Request-Id for customer-side request correlation.

## Query parameters

- `key` string
- `firstName` string
- `lastName` string
- `dob` string, date
- `city` string
- `state` string
- `zipcode` string
- `address` string
- `lat` number
- `lng` number
- `radius` number
- `mode` 'extensive'
- `fuzzy` boolean
- `q` string
- `prefixMatch` 'firstName' | 'lastName'
- `uuid` string
- `personUuid` string
- `faceId` string
- `createdAtStart` string, date
- `createdAtEnd` string, date
- `updatedAtStart` string, date
- `updatedAtEnd` string, date
- `page` integer

## Headers

- `X-Request-Id` string

## 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)
