API Access
Programmatic access to AB Jail's database for reporters, researchers, and anyone building on this data. Read-only, authenticated via API key.
Request an API Key
API keys are free and issued manually. Fill out the form below and we'll email you a key, usually within 24 hours.
Quick Start
1. Authentication
All requests require an API key. Pass it via the Authorization header:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://abjail.org/api/v1/submissions?limit=5"2. Response Format
All list endpoints return paginated JSON:
{
"data": [ ... ],
"pagination": {
"total": 1234,
"limit": 20,
"offset": 0,
"has_more": true
}
}3. Pagination
Use limit (max 100) and offset query parameters. Check pagination.has_more to determine if more pages exist.
Examples
Get recent submissions with violations:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://abjail.org/api/v1/submissions?has_violations=true&limit=10"Get a specific submission with all related data:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://abjail.org/api/v1/submissions/SUBMISSION_UUID"Search for a sender:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://abjail.org/api/v1/submissions?sender_name=ActBlue&limit=20"Get ActBlue-verified violations:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://abjail.org/api/v1/violations?actblue_verified=true"Get lifetime stats:
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://abjail.org/api/v1/stats?range=lifetime"Endpoints
All endpoints are read-only (GET). Click an endpoint to see its parameters and response fields.
Notes
- Image URLs for submissions and landing page screenshots are returned as temporary signed URLs that expire after 1 hour. Re-request the resource to get a fresh URL.
- Privacy: Submitter-identifying fields (forwarder email, uploader fingerprint) are never exposed through the API.
- Rate limits: There are no hard rate limits, but we monitor usage. Please be respectful and avoid excessive polling. If you need bulk data, paginate through results rather than making parallel requests.
- Errors return a JSON object with an
errorfield containingcodeandmessage. - Versioning: The API is versioned at
/api/v1/. Breaking changes will result in a new version.
Ready to get started? at the top of this page.