Skip to content

Federal Register

Federal Register documents — every rule, proposed rule, notice and presidential document published since 1994 — are exposed at /api/federal_register/. For field definitions, see the Federal Register Data Dictionary.

About 1.01 million documents are available, from January 1994 to the present, and the dataset is updated daily.

Authentication: Federal Register endpoints require authentication (API key or OAuth2). Unauthenticated requests receive HTTP 401.

Plans: every endpoint, every filter and every field — including a document's full_text — is available on every plan, including Free.

Endpoints

  • GET /api/federal_register/ — list, with filtering, search, ordering and pagination
  • GET /api/federal_register/{uuid}/ — one document

The detail path segment is the document's uuid, and it must be a valid RFC 4122 UUID — anything else is a 404. The uuid is derived from the document number and publication date rather than assigned, so it survives a rebuild of the dataset and is safe to store alongside your own records.

One row is one published document

Each row is one document as the Federal Register published it, identified by its document number and publication date together.

Three consequences are worth knowing before your first query:

  • A document number is not unique on its own. The Federal Register reused document numbers across genuinely different documents, as late as 2015 — 94-1021 is both a trademark-fee rule and a National Library of Medicine meeting notice. ?document_number= therefore can return more than one document; add a publication-date filter, or read publication_date on each result, to tell them apart.
  • A correction is its own document. Corrections are published as separate documents with their own numbers (R1-, C1-, and older X, Z and E prefixes). correction_of on the correction and corrections on the original carry the link; the two are never merged into one row.
  • type undercounts 1994. About 32,600 documents carry Uncategorized Document, and nearly all of them are from 1994, where it covers 92% of the year. ?type=Rule therefore misses most 1994 rules; use search, a CFR citation or an agency filter to reach them.

The agencies, cfr_references, dockets and topics fields are the Federal Register's own structures, served as it publishes them. In particular, agencies are the Federal Register's agency records, not Tango organizations.

Filtering

Identifier and classification filters accept | (or the word OR) for OR. Date filters require YYYY-MM-DD; invalid dates or inverted ranges return 400 (see Date filters). search must be at least 2 characters.

Param What it does
search Ranked full-text search over the document's title, abstract and action — see Search. Min 2 characters.
document_number Exact match on the Federal Register document number, e.g. 2016-31922. Multi-value: use \| for OR, up to 500 values.
publication_date_after, publication_date_before Publication-date range (YYYY-MM-DD).
effective_on_after, effective_on_before Effective-date range (YYYY-MM-DD).
comments_close_on_after, comments_close_on_before Comment-deadline range (YYYY-MM-DD).
comments_open Boolean — see Open comment periods.
cfr_title A CFR title number, e.g. 40. Matches documents citing any part of that title.
cfr_part A CFR part number, e.g. 52. Requires cfr_title — see Matching a CFR citation.
fr_agency The Federal Register's agency slug, e.g. environmental-protection-agency. Case-insensitive. Multi-value: use \| for OR.
type Rule, Proposed Rule, Notice, Presidential Document, Correction, Sunshine Act Document or Uncategorized Document. Case-insensitive; any other value returns 400. Multi-value: use \| for OR.
significant Boolean. Documents designated significant under Executive Order 12866. Most documents carry no designation either way, so false returns only documents explicitly marked not significant.
rin A Regulation Identifier Number, e.g. 2060-AV16. Case-insensitive. Multi-value: use \| for OR.
executive_order_number Exact match on an executive order number.

An unrecognized query parameter on the list endpoint returns 400 with a did-you-mean suggestion rather than being silently ignored, so a mistyped filter never returns a full, unfiltered page.

Matching a CFR citation

cfr_title and cfr_part match against the document's cfr_references — the parts of the Code of Federal Regulations the document amends or affects.

GET /api/federal_register/?cfr_title=40
GET /api/federal_register/?cfr_title=40&cfr_part=52
  • cfr_title alone finds every document that cites any part of that title.
  • cfr_title with cfr_part finds documents with one reference to that exact title and part — cfr_title=40&cfr_part=52 is 40 CFR Part 52. A document citing 40 CFR 60 and 49 CFR 52 does not match.
  • cfr_part without cfr_title returns 400: a part number means nothing outside its title.
  • cfr_title must be a number; anything else returns 400.

Open comment periods

?comments_open=true returns documents whose comment period closes today or later. ?comments_open=false returns documents whose comment period has already closed.

Documents with no comment deadline match neither — false is the closed set, not everything that is not open. Most notices and final rules carry no deadline, so ?comments_open=false is far smaller than the resource.

"Today" is evaluated when you make the request, so the same query returns fewer documents tomorrow. For a fixed window, use comments_close_on_after and comments_close_on_before instead.

?search= is a ranked full-text query over each document's title, abstract and action.

Wrap a value in double quotes for a phrase: ?search="regional haze". Without quotes, the terms are matched individually.

Search does not reach the body of the document. full_text is served, but it is not searched; a term that appears only in a document's body will not match. Pair search with a CFR, agency or RIN filter to narrow by subject instead.

Under search= with no explicit ordering, results come back by relevance. ordering=rank asks for that explicitly and requires a non-empty search — passing it alone returns 400.

Ordering

ordering= allowlist:

  • publication_date — the default is -publication_date (newest first)
  • effective_on
  • comments_close_on
  • document_number
  • rank — relevance; requires a non-empty search, and is the implicit default under one

Results are tie-broken deterministically, so paging through a large result set never repeats or skips a document.

Sorting descending on effective_on or comments_close_on puts documents without that date first. Most documents have neither date, so ?ordering=-comments_close_on alone opens on undated notices. Pair it with the matching range filter, which excludes them: ?comments_close_on_after=2026-01-01&ordering=-comments_close_on.

Pagination

Standard page-number pagination:

  • page (default 1)
  • limit (default 10, max 100)

Responses carry count / next / previous / results.

Shaping

Federal Register documents are a flat resource: every field is a leaf, and there are no expandable relations (so no * expansions). See Response shaping for the syntax.

  • List default: uuid, document_number, publication_date, type, subtype, title, abstract, action, agencies, cfr_references, citation, significant, comments_close_on, effective_on, html_url, pdf_url
  • Detail default: the list fields plus dates, signing_date, start_page, end_page, volume, docket_ids, dockets, regulation_id_numbers, topics, correction_of, corrections, executive_order_number, presidential_document_number, proclamation_number, comment_url, regulations_dot_gov_url, raw_text_url, body_html_url

Every other field — page_length, toc_doc, toc_subject, disposition_notes, executive_order_notes, not_received_for_publication, public_inspection_pdf_url, regulation_id_number_info, regulations_dot_gov_info and, on the detail endpoint only, full_text — is available by naming it in ?shape=. The full list is in the data dictionary.

full_text — the document body

GET /api/federal_register/{uuid}/?shape=uuid,document_number,title,full_text

full_text is the plain-text body of the document, populated for nearly every document in every year from 1994 on. It is available on every plan, and it is detail only, and only when named: it is in neither default shape, and a list request naming it in shape returns 400. A single document can run to several megabytes, so a list page never carries it — find documents on the list endpoint, then fetch each body by uuid.

Alerts

federal_register is an alertable query type — alerts.federal_register.match, using the same filters documented above. See the webhooks guide.

An alert fires when a matching document is first published and when a matching document changes. The Federal Register commonly fills in a document's details over the few days after it is published, so expect a document you were alerted to as new to arrive again as modified.

A comment period closing does not fire. comments_open is evaluated at query time from comments_close_on, so a deadline passing is not a change to the document. A comments_open=true alert tells you when a matching document opens for comment, not when its period ends.

Examples

# Proposed rules still open for comment
GET /api/federal_register/?type=Proposed%20Rule&comments_open=true

# Everything amending 40 CFR Part 52 since the start of 2025
GET /api/federal_register/?cfr_title=40&cfr_part=52&publication_date_after=2025-01-01

# Significant EPA documents
GET /api/federal_register/?fr_agency=environmental-protection-agency&significant=true

# A phrase, ranked by relevance
GET /api/federal_register/?search=%22greenhouse%20gas%22

# Every document under one RIN
GET /api/federal_register/?rin=2060-AV16&ordering=publication_date

# Comment deadlines closing soonest first, within a window
GET /api/federal_register/?comments_close_on_after=2026-10-01&comments_close_on_before=2026-10-31&ordering=comments_close_on

# One document number (may return more than one document before 2016)
GET /api/federal_register/?document_number=2016-31922

# Detail, with the body
GET /api/federal_register/{uuid}/?shape=uuid,document_number,publication_date,title,full_text

Notes:

  • * is only valid inside expansions; Federal Register documents have none, so use explicit field lists.
  • Invalid shape fields return HTTP 400 with structured validation errors.