Federal Register document search
Documents published in the US Federal Register (rules, proposed rules, notices, presidential documents) by full text, with filters for document type, presidential document type, agency, publication, effective and comment-closing date ranges, docket id, RIN, CFR title and part, significance and open comment period, and sort. Each document has number, title, type, action, abstract, matching excerpt, dates, agencies, citation and pages, dockets, RINs, CFR references, topics and links to the page, PDF and full text. Pass next_page back as page; null on the last page (up to 10,000 matches).
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
q | string | Full-text search words. Example: artificial intelligence |
type | string | Comma-separated: rule, proposed_rule, notice, presidential. |
presidential_type | string | Comma-separated presidential document types: executive_order, proclamation, memorandum, determination, notice, order, other. |
agency | string | Comma-separated agency slugs (see /federal-register/v1/agencies), e.g. environmental-protection-agency. |
from | string | Published on or after (YYYY-MM-DD). |
to | string | Published on or before (YYYY-MM-DD). |
effective_from | string | Effective on or after (YYYY-MM-DD). |
effective_to | string | Effective on or before (YYYY-MM-DD). |
comment_close_from | string | Comment period closing on or after (YYYY-MM-DD). |
comment_close_to | string | Comment period closing on or before (YYYY-MM-DD). |
docket_id | string | Agency docket id. |
rin | string | Regulation Identifier Number. |
cfr_title | integer | CFR title the document affects (1-50). |
cfr_part | integer | CFR part, with cfr_title. |
significant | boolean | Only significant (true) or non-significant (false) documents (EO 12866). |
sort | relevance | newest | oldest | executive_order_number | relevance (default with q), newest (default without), oldest, executive_order_number. |
limit | integer | Documents per page, 2-100. Example: 20 |
page | integer | Page number, starting at 1. Pass next_page back as page; it is null on the last page. Example: 1 |
comment_open | boolean | true: documents whose comment period is still open (closing today or later). |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/federal-register/v1/search?q=artificial+intelligence" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/federal-register/v1/search",
params={"q": "artificial intelligence"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/federal-register/v1/search");
url.searchParams.set("q", "artificial intelligence");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).