JSON API

Consuming the data

Every page on this site publishes a machine-readable JSON companion. This documents the published format — normalized for consumers, not the raw research format the site is built from.

A record, end to end

Every datatype is a variation on this. One real published record, abridged — flip the tiers to see what each file adds.

legislation/<abbr>.json
{
  "schema": "abhortion.org/legislation.summary/v1",
  "id": "legality-us-al",
  "type": "legislation",
  "level": "state",
  "jurisdiction": "Alabama",
  "as_of_date": "2026-07-12",
  "research_completed_date": "2026-07-12",
  "headline": "Total ban since June 24, 2022",
  "summary": "Alabama enforces a near-total ban on abortion from fertilization, with a narrow exception for serious health …",
  "machine_readable_summary": {
    "legal_classification": "total_ban",
    "gestational_limit_weeks": 0,
    "limit_measured_from": "fertilization",
    "abortion_currently_available": "no",
    "ban_or_limit_enjoined": false,
    "mother_expressly_exempt": true,
    "…": "+30 more fields"
  },
  "links": {
    "html": "https://www.abhortion.org/legislation/al.html",
    "markdown": "https://www.abhortion.org/legislation/al.md",
    "summary_json": "https://www.abhortion.org/legislation/al.json",
    "full_json": "https://www.abhortion.org/legislation/al-full.json",
    "verbose_json": "https://www.abhortion.org/legislation/al-verbose.json"
  }
}

Identity, the bottom line, the whole machine-readable summary, and links. Enough to build a map or a table without fetching anything else.

Lines in this colour are elisions made for this page, not part of the format.

Datatypes

Pick the datatype you're consuming. Each page is complete on its own — file layout, envelope, finding atom, every field and enum. You should never need to cross-reference another page.

Which file do I want?

Legislation and agitation records each come in three sizes. Cases are a single file.

If you are…Fetch
Building a map, a comparison table, or a filter over jurisdictions<id>.json S
Rendering the written analysis — sections, penalties, timelines<id>-full.json F
Quoting the law, or checking a claim against its source<id>-verbose.json V

Every file for one page

Pick any page on the site and this lists everything it publishes — the page itself, its Markdown companion, each JSON tier, and any pre-rendered print variants. The URLs are absolute and canonical; fetch them as-is.

What every datatype shares

The three datatypes are documented independently, but they're built from the same conventions — once you've read one the others feel familiar.

MinifiedAll JSON is emitted minified (single line). Pretty-print it locally if you need to read it.
Key-addressableContent is reached by key, not by searching arrays — e.g. sections.methods.medication, sections.exceptions.life.
Absent = not applicableEmpty values (null, "", [], {}) are omitted. A missing key means "not present / not applicable", never "we forgot".
TiersLegislation and agitation records come in three sizes — <id>.json (summary), -full.json, and -verbose.json. Cases are a single file.
Absolute cross-linksThe links block on every record uses absolute https://www.abhortion.org URLs to reach the sibling HTML, Markdown, and JSON representations.