Base URL https://api.pucdocs.com · 592,894 dockets · 28 state commissions
Every /api/* endpoint requires a key. Send it as a bearer token or a query parameter. /health is open.
# bearer header (preferred)
curl https://api.pucdocs.com/api/states \
-H "Authorization: Bearer pk_YOUR_KEY"
# or as a query param
curl "https://api.pucdocs.com/api/states?key=pk_YOUR_KEY"
Search the corpus. Results are ordered newest filing first and paginated.
| Parameter | Type | Description |
|---|---|---|
state optional | string | Two-letter code, case-insensitive (e.g. NY, tx). Exact match. |
number optional | string | Docket number substring match (e.g. 26-018). |
industry optional | string | Normalized vertical: electric, gas, water, sewer, telecom, other. |
status optional | string | Case status where the source provides one (e.g. Open, CLOSED). |
filed_after optional | date | YYYY-MM-DD — inclusive lower bound on filing date. |
filed_before optional | date | YYYY-MM-DD — inclusive upper bound on filing date. |
limit optional | int | Rows per page. Default 100, maximum 1000. |
offset optional | int | Pagination offset. Default 0. |
# New York interconnection matters filed in the last month
curl "https://api.pucdocs.com/api/dockets?state=NY&filed_after=2026-08-10&limit=50" \
-H "Authorization: Bearer pk_YOUR_KEY"
{
"total": 128,
"limit": 50,
"offset": 0,
"dockets": [
{
"state": "NY",
"docket_number": "26-01853",
"title": "Joint Petition of Ventura Group Inc. and Nivo Mountain LLC…",
"industry": "other",
"status": null,
"date_filed": "2026-09-08",
"date_closed": null,
"url": "https://documents.dps.ny.gov/public/MatterManagement/CaseMaster.aspx?MatterSeq=89804"
}
]
}
total is the full match count before paging — walk the corpus with offset, up to 1000 rows per call.Fetch one docket by exact state and docket number. Returns 404 if not found.
curl "https://api.pucdocs.com/api/dockets/NY/26-01853" \
-H "Authorization: Bearer pk_YOUR_KEY"
Includes row_hash — a stable per-record fingerprint, so you can detect when a docket's fields change between polls.
Coverage summary: docket count and date range per state. Useful for knowing what's available before querying.
On dates: we report the filing dates the source publishes. Two states' sources do not carry a filed date for part of their docket history — South Carolina (6,127 rows) and Connecticut (8,358 rows). Those records return date_filed: null and are therefore excluded by the filed_after/filed_before filters. This is a limitation of what the source publishes, not a gap in collection; both ceilings are enforced by a test in our suite so the number cannot drift silently.
curl https://api.pucdocs.com/api/states -H "Authorization: Bearer pk_YOUR_KEY"
{ "states": [
{ "state": "ny", "dockets": 75208, "earliest": "1981-04-01", "latest": "2026-09-09" },
{ "state": "pa", "dockets": 59053, "earliest": "2015-01-05", "latest": "2026-09-08" }
] }
Industry breakdown of the corpus, optionally scoped to one state.
| Parameter | Type | Description |
|---|---|---|
state optional | string | Restrict the breakdown to a single state. |
curl "https://api.pucdocs.com/api/industries?state=TX" \
-H "Authorization: Bearer pk_YOUR_KEY"
Issue a free key instantly. No card, no approval step.
| Body field | Type | Description |
|---|---|---|
email required | string | Your address — used for quota and support. |
name optional | string | Display name. |
curl -X POST https://api.pucdocs.com/api/signup \
-H "content-type: application/json" \
-d '{"email":"you@firm.com","name":"Your Name"}'
{ "key": "pk_...", "plan": "free",
"quota": { "limit": 100, "period": "day", "watches": 1 } }
| Status | Meaning | What to do |
|---|---|---|
200 | OK | — |
400 | Bad request (e.g. signup without email) | Check the field listed in error. |
401 | Missing or invalid key | Send Authorization: Bearer pk_…. |
403 | Admin-only endpoint | POST /api/key and DELETE /api/key/… are admin-scoped. |
404 | Unknown endpoint, or docket not found | Check the path; docket lookups need exact number. |
429 | Daily/monthly quota exhausted | Response carries the reset time. Upgrade for a higher ceiling. |
500 | Server error | Retry with backoff; the body carries a short error string. |
limit is capped at 1000 rows per request — page with offset.curl https://api.pucdocs.com/health
# {"service":"puc-dockets-api","status":"ok","rows":"...","built_at":"..."}