Texas APIpuc.texas.gov ↗
Access Texas Public Utility Commission dockets, filings, and document links via 7 endpoints. Search cases by control number, utility type, date, and document type.
What is the Texas API?
The puc.texas.gov API provides structured access to the Texas Public Utility Commission Interchange system across 7 endpoints, covering docket search, filing retrieval, and document-level metadata. search_dockets lets you filter PUCT cases by utility type, date range, and keywords, while get_document_details returns downloadable document URLs alongside filing party and case style metadata — giving developers a direct path into Texas utility regulatory records.
curl -X GET 'https://api.parse.bot/scraper/d02e185d-5b07-44e6-a934-f03130fa799a/search_dockets?page=1&case_style=electric&utility_type=A&date_filed_to=07%2F06%2F2026&document_type=ALL&date_filed_from=06%2F06%2F2026' \ -H 'X-API-Key: $PARSE_API_KEY'
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 puc-texas-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: PUCT SDK — bounded, re-runnable; every call capped."""
from parse_apis.texas_public_utility_commission_filing_api import PUCT, UtilityType, DocketNotFound
puct = PUCT()
# Search for electric utility dockets with a date range
for docket in puct.dockets.search(
utility_type=UtilityType.ELECTRIC,
date_filed_from="01/01/2025",
date_filed_to="01/31/2025",
limit=3,
):
print(docket.control, docket.utility, docket.description)
# Drill into one docket's filings and document details
docket = puct.docket(control="59697")
for filing in docket.filings.list(limit=3):
print(filing.item, filing.file_stamp, filing.party, filing.filing_description)
# Get document details for a specific filing item
detail = docket.get_document_details(item_number="1")
print(detail.control_number, detail.item_number)
print(detail.metadata.case_style, detail.metadata.filing_party)
for doc in detail.documents:
print(doc.name, doc.name_url, doc.type)
# Search daily filings for a specific date range
for daily in puct.dailyfilings.search(
date_filed_from="06/01/2026",
date_filed_to="06/05/2026",
utility_type=UtilityType.ALL,
limit=5,
):
print(daily.control_number, daily.item_number, daily.filing_party, daily.filing_description)
# List recently issued control numbers
for new_docket in puct.newdockets.list(limit=5):
print(new_docket.control_number, new_docket.date_filed, new_docket.description)
# Typed error handling
try:
bad_docket = puct.docket(control="9999999")
bad_docket.filings.list(limit=1).first()
except DocketNotFound as exc:
print(f"Docket not found: {exc.control_number}")
print("exercised: dockets.search / docket.filings.list / docket.get_document_details / dailyfilings.search / newdockets.list")
Search for dockets/cases in the PUCT Interchange system. Returns paginated results (25 per page) sorted descending by default. At least one filter (control_number, date range, case_style, or filing_description) should be provided for meaningful results.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for paginated results. |
| case_style | string | Case style or description keywords to filter by. |
| utility_type | string | Utility type filter. |
| date_filed_to | string | End date in MM/DD/YYYY format. |
| document_type | string | Filter by document type code. Use get_item_types endpoint for the full list of accepted values. |
| control_number | string | Docket control number to search for. |
| date_filed_from | string | Start date in MM/DD/YYYY format. |
| filing_description | string | Filing description keywords to filter by. |
{
"type": "object",
"fields": {
"page": "string - current page number",
"dockets": "array of docket objects with Control, Control_url, Filings, Utility, and Description (Case Style) fields",
"total_records": "string - total records found message"
},
"sample": {
"data": {
"page": "1",
"dockets": [
{
"Control": "20310",
"Filings": "6",
"Utility": "PUC-ELEC",
"Control_url": "https://interchange.puc.texas.gov/search/filings/?ControlNumber=20310",
"Description (Case Style)": "ELECTRIC UTILITIES SECURITIES AND EXCHANGE COMMISSION (SEC) FORM 8-K"
}
],
"total_records": "350 record(s) found."
},
"status": "success"
}
}About the Texas API
Docket and Filing Search
The search_dockets endpoint accepts filters for case_style, control_number, utility_type (E for Electric, W for Water, T for Telephone, O for Others, or A for All), date_filed_from/date_filed_to in MM/DD/YYYY format, and document_type codes sourced from get_item_types. Results are paginated and return each docket's control number with a URL, filing count, utility type, and case description. The daily_filing_search endpoint narrows results to a specific date or date range, returning item number, item type, date filed, and utility type per filing.
Case-Level Filing and Document Retrieval
get_case_filings takes a required control_number and returns every filing under that case: item number with URL, file stamp, party name, item type, and filing description. An optional document_type filter reduces the result set. To drill further, get_document_details accepts both control_number and item_number and returns file-level metadata — file stamp, filing party, case style, filing description — plus an array of documents each with a name, URL, description, and type classification.
Reference and Discovery Endpoints
get_recently_issued_control_numbers returns the last 15 days of new dockets with control number, date filed, and description — useful for change-detection workflows without querying by date manually. get_utility_types and get_item_types return the accepted filter codes and their human-readable labels, so applications can build dropdowns or validate inputs without hardcoding values that may change.
Coverage and Scope
All data reflects proceedings filed with the PUCT through the Interchange portal. Dockets span electric, water, and telephone utility sectors in Texas. Document URLs returned by get_document_details point to filings within the PUCT system; the API does not fetch or proxy the document content itself.
The Texas API is a managed, monitored endpoint for puc.texas.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when puc.texas.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 puc.texas.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 Texas utility regulatory filings by polling
get_recently_issued_control_numbersdaily - Build a docket alert system that watches specific
control_numbervalues for new filings viaget_case_filings - Aggregate all PUCT electric utility cases by passing
utility_type=Eintosearch_dockets - Retrieve document download links for a specific filing using
get_document_detailswith control and item numbers - Track filings submitted within a custom date window using
daily_filing_searchwithdate_filed_fromanddate_filed_to - Populate a regulatory research tool with case styles, filing parties, and document types from PUCT dockets
- Validate document type filter codes dynamically by calling
get_item_typesbefore constructing search queries
| 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 the Texas PUC have an official developer API for Interchange data?+
What does `get_document_details` return versus `get_case_filings`?+
get_case_filings lists all filings under a docket — item numbers, file stamps, parties, and item types — but does not go below the filing level. get_document_details takes a specific item_number and control_number and returns the individual documents within that filing, including each document's name, URL, description, and type. Use get_case_filings to enumerate items, then get_document_details to retrieve the actual document links.Does the API expose full document text or PDF content from PUCT filings?+
get_document_details returns document names, URLs, descriptions, and type classifications, but the document content itself is not fetched or returned. The URLs point to the PUCT system where the files are hosted. You can fork this API on Parse and revise it to add an endpoint that fetches and parses content from those document URLs.How does pagination work in `search_dockets` and `daily_filing_search`?+
page parameter. search_dockets returns a total_records string indicating the total match count alongside the current page value in the response. daily_filing_search similarly accepts a page input. Neither endpoint documents a fixed page size, so iterate page incrementally until the returned filings array is empty or smaller than a full page.