FERC APIelibrary.ferc.gov ↗
Search FERC eLibrary dockets and documents. Access filings, applicant details, CP dockets, and document metadata by accession number via 4 endpoints.
What is the FERC API?
The FERC eLibrary API provides access to Federal Energy Regulatory Commission regulatory filings and docket records across 4 endpoints. Use general_search to query documents by text, docket-number prefix, or filed-date range; use get_docket_details to retrieve applicant names, sub-docket numbers, and a full list of filings for any specific docket; or look up a single document directly by accession number with get_document_details.
curl -X POST 'https://api.parse.bot/scraper/8c295ce3-9094-4a7e-8fac-e15d4afa5636/general_search' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"page": "0",
"limit": "5",
"query": "natural gas",
"end_date": "2026-07-06",
"start_date": "2025-07-06",
"docket_number": "CP"
}'Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace elibrary-ferc-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: FERC eLibrary API — search filings, inspect dockets, look up documents."""
from parse_apis.ferc_elibrary_api import FERCLibrary, DocketNotFound
client = FERCLibrary()
# Search for recent natural gas documents with a docket prefix filter
for doc in client.documents.search(query="natural gas", docket_number="CP", limit=3):
print(doc.description, doc.filed_date, doc.score)
# Drill into a specific docket's full details
docket = client.dockets.get(docket_number="CP21-470")
print(docket.docket_number, docket.description)
for filing in docket.filings[:3]:
print(filing.category, filing.filed_date, filing.accession_number)
# Look up a single document by accession number
document = client.documents.get(accession_number="20210629-5262")
print(document.description, document.category)
for t in document.transmittals[:2]:
print(t.file_name, t.file_type, t.file_size)
# Typed error handling for a non-existent docket
try:
client.dockets.get(docket_number="ZZ99-999")
except DocketNotFound as exc:
print(f"Docket not found: {exc.docket_number}")
# Browse CP certificate dockets (paginated)
for doc in client.dockets.list_cp(limit=3):
print(doc.accession_number, doc.docket_numbers, doc.category)
print("exercised: documents.search / dockets.get / documents.get / dockets.list_cp")Full-text and filtered search across the entire FERC eLibrary. Supports query text (matched against document descriptions), docket-number prefix filtering (short prefixes like 'CP' are auto-wildcarded), and filed-date range. Returns paginated results ordered by relevance score. Each hit includes description, category, accession number, filed date, docket numbers, transmittals (attached files metadata), and author/recipient affiliations.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-based). |
| limit | integer | Maximum results per page. |
| query | string | Search query text matched against document descriptions. Omitting or leaving blank searches all documents. |
| end_date | string | End of filed-date range in YYYY-MM-DD format. |
| start_date | string | Start of filed-date range in YYYY-MM-DD format. |
| docket_number | string | Docket number or prefix to filter by. Short prefixes (4 chars or fewer) are automatically wildcarded (e.g. 'CP' becomes 'CP*'). Full docket numbers like 'CP21-470' search exactly. |
{
"type": "object",
"fields": {
"numHits": "integer number of results returned on this page",
"totalHits": "integer total number of matching documents across all pages",
"searchHits": "array of document objects with description, category, acesssionNumber, filedDate, docketNumbers, transmittals, affiliations, and score"
},
"sample": {
"data": {
"numHits": 5,
"success": true,
"totalHits": 332267,
"searchHits": [
{
"score": 81.68,
"category": "Submittal",
"filedDate": "10/21/1982",
"documentId": "62C752AA-C489-C48E-A6D2-773671F00000",
"description": "Fwds joint reply brief of Cascade Natural Gas",
"affiliations": [
{
"afType": "AUTHOR",
"lastName": "GALLOWAY",
"affiliation": "CASCADE NATURAL GAS CORP"
}
],
"transmittals": [
{
"fileId": "0",
"fileName": "",
"fileType": "",
"fileFormat": "Microfilm"
}
],
"docketNumbers": [
"RP81-47-000"
],
"acesssionNumber": "19821022-0131"
}
],
"errorMessage": null,
"searchResultId": null
},
"status": "success"
}
}About the FERC API
Search and Filter FERC Filings
The general_search endpoint accepts a free-text query matched against document descriptions, an optional docket_number prefix (prefixes of 4 characters or fewer are automatically wildcarded — entering CP returns all CP-prefixed dockets), and a start_date/end_date range in YYYY-MM-DD format. Results are paginated via 0-based page and limit parameters. Each result in searchHits carries a description, category, accessionNumber, filedDate, docketNumbers, transmittals, affiliations, and a relevance score. totalHits tells you how many documents match across all pages.
CP Docket Convenience Endpoint
get_cp_dockets is a pre-filtered variant scoped to Certificate of Public Convenience and Necessity filings. It returns the same paginated searchHits shape as general_search without requiring you to supply the docket prefix manually — useful when you only care about pipeline and LNG terminal certificate proceedings.
Docket Sheets and Document Lookup
get_docket_details takes an exact docket_number (for example, CP21-470) and returns five top-level fields: filings (a DataList of filing objects each containing DocumentsItem, AuthorsItem, and FedCitesItem), applicants (a DataList of applicant records), description (docket description text), sub_dockets (an array of related docket number strings), and an echo of the requested docket_number. get_document_details accepts an accession_number in YYYYMMDD-NNNN format and returns the matching document's full metadata including transmittals (file names, types, and sizes), author/recipient affiliations, and associated docketNumbers. It typically returns exactly one hit.
The FERC API is a managed, monitored endpoint for elibrary.ferc.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when elibrary.ferc.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official elibrary.ferc.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor new filings on a specific docket number by polling
get_docket_detailsand diffing thefilings.DataListarray. - Track all CP-prefix certificate proceedings over a date range using
get_cp_docketswithstart_dateandend_date. - Resolve an accession number found in a filing index to its full document metadata using
get_document_details. - Identify all applicants associated with a gas pipeline docket via the
applicants.DataListreturned byget_docket_details. - Build a text-search interface over FERC regulatory documents using the
queryparameter ingeneral_search. - Enumerate sub-dockets for a complex multi-phase proceeding via the
sub_docketsarray inget_docket_details. - Audit document file types and sizes by inspecting the
transmittalsfield returned in search results or document detail responses.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does FERC eLibrary have an official developer API?+
What does `get_docket_details` return beyond a list of filings?+
filings object (which contains a DataList of documents with author and federal-citation data), the endpoint returns applicants (names of parties to the proceeding), description (the official docket description text), and sub_dockets (an array of related docket number strings for multi-phase proceedings).How does docket-number prefix wildcarding work in `general_search`?+
docket_number value of 4 characters or fewer — such as CP or ER — the endpoint automatically appends a wildcard so it matches all dockets with that prefix. Longer, more specific values like CP21-470 are treated as exact matches.Does the API return the actual document files or only metadata?+
transmittals field tells you what files are attached, but retrieving those files is not currently covered. You can fork this API on Parse and revise it to add a download-link or file-retrieval endpoint.