API Documentation

The SafeWatch API provides programmatic access to sex offender registry data from all 50 US states. All responses are JSON with consistent schemas regardless of source state.

Base URL:https://api.safewatch.io/v1

Getting Started

1

Get Your API Key

Sign up for a free account to receive your API key. No credit card required.

2

Make Your First Request

Include your API key in the Authorization header:

bash
curl -X GET "https://api.safewatch.io/v1/search?address=1600+Pennsylvania+Ave+NW,+Washington,+DC+20500&radius=1" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"
3

Parse the Response

All responses follow a consistent JSON schema:

json
{
  "query": {
    "address": "1600 Pennsylvania Ave NW, Washington, DC 20500",
    "radius_miles": 1,
    "results_count": 3
  },
  "offenders": [
    {
      "id": "DC-00234",
      "name": "John Doe",
      "tier": 2,
      "offense": "Sexual abuse, 2nd degree",
      "address": "1234 Example St NW, Washington, DC 20001",
      "distance_miles": 0.4,
      "registration_date": "2019-03-15",
      "state_registry_url": "https://mpdc.dc.gov/service/sex-offender-registry",
      "photo_url": null
    },
    {
      "id": "DC-00891",
      "name": "James Smith",
      "tier": 1,
      "offense": "Indecent exposure",
      "address": "567 H Street NW, Washington, DC 20001",
      "distance_miles": 0.7,
      "registration_date": "2021-08-22",
      "state_registry_url": "https://mpdc.dc.gov/service/sex-offender-registry",
      "photo_url": null
    },
    {
      "id": "DC-01456",
      "name": "Robert Johnson",
      "tier": 3,
      "offense": "First degree sexual abuse",
      "address": "890 K Street NW, Washington, DC 20001",
      "distance_miles": 0.9,
      "registration_date": "2015-01-10",
      "state_registry_url": "https://mpdc.dc.gov/service/sex-offender-registry",
      "photo_url": null
    }
  ],
  "metadata": {
    "data_updated": "2026-03-08T06:00:00Z",
    "source": "DC Sex Offender Registry",
    "response_time_ms": 142
  }
}

Authentication

All API requests require a valid API key passed in the Authorization header:

http
Authorization: Bearer YOUR_API_KEY

Security: Never expose your API key in client-side code. Always make API calls from your server.

Endpoints

GET/v1/search

Search for registered sex offenders near an address

Parameters

NameTypeRequiredDescription
addressstringYesUS address, city, or zip code
radiusnumberNoSearch radius in miles (default: 1, max: 5)
limitnumberNoMax results to return (default: 25, max: 100)
offsetnumberNoPagination offset (default: 0)
GET/v1/offender/:id

Get detailed information about a specific registrant

Parameters

NameTypeRequiredDescription
idstringYesOffender ID (e.g., DC-00234)
GET/v1/state/:state

Get registry statistics and metadata for a state

Parameters

NameTypeRequiredDescription
statestringYesTwo-letter state abbreviation (e.g., CA)
POST/v1/batch

Search multiple addresses in a single request (Enterprise)

Parameters

NameTypeRequiredDescription
addressesarrayYesArray of address objects with address and radius

Error Codes

CodeMeaningResolution
400Bad RequestCheck your parameters — address may be invalid
401UnauthorizedAPI key is missing or invalid
403ForbiddenYour plan doesn't include this endpoint
404Not FoundThe requested resource doesn't exist
429Rate LimitedYou've exceeded your rate limit. Wait or upgrade.
500Server ErrorSomething went wrong on our end. Try again.

Rate Limits

PlanCalls/MonthCalls/Minute
Free10010
Growth10,00060
EnterpriseUnlimitedCustom

Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

SDKs & Libraries

🐍PythonComing Soon
pip install safewatch
💚Node.jsComing Soon
npm install @safewatch/sdk
💎RubyComing Soon
gem install safewatch