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.
https://api.safewatch.io/v1Getting Started
Get Your API Key
Sign up for a free account to receive your API key. No credit card required.
Make Your First Request
Include your API key in the Authorization header:
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"Parse the Response
All responses follow a consistent JSON schema:
{
"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:
Authorization: Bearer YOUR_API_KEYSecurity: Never expose your API key in client-side code. Always make API calls from your server.
Endpoints
/v1/searchSearch for registered sex offenders near an address
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | US address, city, or zip code |
| radius | number | No | Search radius in miles (default: 1, max: 5) |
| limit | number | No | Max results to return (default: 25, max: 100) |
| offset | number | No | Pagination offset (default: 0) |
/v1/offender/:idGet detailed information about a specific registrant
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Offender ID (e.g., DC-00234) |
/v1/state/:stateGet registry statistics and metadata for a state
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| state | string | Yes | Two-letter state abbreviation (e.g., CA) |
/v1/batchSearch multiple addresses in a single request (Enterprise)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| addresses | array | Yes | Array of address objects with address and radius |
Error Codes
| Code | Meaning | Resolution |
|---|---|---|
| 400 | Bad Request | Check your parameters — address may be invalid |
| 401 | Unauthorized | API key is missing or invalid |
| 403 | Forbidden | Your plan doesn't include this endpoint |
| 404 | Not Found | The requested resource doesn't exist |
| 429 | Rate Limited | You've exceeded your rate limit. Wait or upgrade. |
| 500 | Server Error | Something went wrong on our end. Try again. |
Rate Limits
| Plan | Calls/Month | Calls/Minute |
|---|---|---|
| Free | 100 | 10 |
| Growth | 10,000 | 60 |
| Enterprise | Unlimited | Custom |
Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
SDKs & Libraries
pip install safewatchnpm install @safewatch/sdkgem install safewatch