For machines
Public API
Everything on this site is available as JSON, under the same measurement rules. Anonymous requests work immediately at a low rate limit so the docs are explorable without signing up.
Interactive docs ↗ OpenAPI 3.1 document ↗
Endpoints
All 16 of them. This table is generated at build time from the route definitions in the API's own source, so it cannot drift from what the service actually serves.
| Method | Path | Returns |
|---|---|---|
| Agencies | ||
| GET | /v1/agencies | List agencies with their word-count rollups |
| GET | /v1/agencies/{slug} | One agency, with every scope it claims |
| Amendments | ||
| GET | /v1/amendments | Section-level amendment history |
| Diff | ||
| GET | /v1/diff | Compare one CFR section between two eCFR issue dates |
| Meta | ||
| GET | /v1/meta | Freshness, corpus totals, and tier limits |
| Parts | ||
| GET | /v1/parts/{citation} | One CFR part |
| Search | ||
| GET | /v1/search | Find an agency, title, chapter, or part by name or citation |
| Shared jurisdiction | ||
| GET | /v1/overlap | CFR scopes claimed by more than one agency |
| Titles | ||
| GET | /v1/titles | All 50 CFR titles |
| GET | /v1/titles/{n}/structure | The table of contents for a title |
| Word counts | ||
| GET | /v1/word-counts | Published word counts, attributed and deduplicated |
| Account | ||
| GET | /v1/account/keys | List your keys |
| POST | /v1/account/keys | Mint another key |
| DELETE | /v1/account/keys/{id} | Revoke a key |
| POST | /v1/account/register | Request an API key |
| POST | /v1/account/verify | Verify an email and receive the first key |
Paths are shown as mounted; every one is relative to https://ecfr.fixit.works. Parameters,
response schemas and error shapes are in the OpenAPI document, which is the contract and is
generated from the same schemas the responses are validated against. Outside
/v1 the Worker also serves GET /openapi.json,
GET /docs and GET /health.
Rate limits and keys
- Anonymous. No key, low daily ceiling, per-IP. Enough to read the docs and try every endpoint; not enough to mirror the corpus.
- Registered. A free key, issued after email verification, with a much
higher daily quota. Send the key as
Authorization: Bearer <key>. - Elevated. For research or public-interest projects that need bulk access. Ask, and say what you are building.
Quota state comes back on every authenticated response, and a 429 tells you when the window resets rather than leaving you to guess.
Terms of use
- The data is public-domain federal material; this project's measurements and code are open source. Attribution is appreciated and, for the derived counts, expected — cite them as eCFR Atlas measurements, not as government figures.
- Do not use this API as a proxy for eCFR. If you need the corpus, fetch it from ecfr.gov directly and be a good citizen about it: sustained request rates above roughly 8 per second get throttled.
- Keys are per-project, not per-person. Do not embed one in a public client.
Read methodology for what the numbers mean, and data quality for what is missing from them.