AB Jail logoAB Jail

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 error field containing code and message.
  • 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.