Skip to content

EDITION 2026.08 /8,821 RECORDS / PUBLIC DOMAIN

§00

Developers

Public API

Four endpoints are live and need no key. Collection endpoints are planned but not built — they are listed below as planned rather than quietly omitted, because an API page that describes endpoints that do not answer is worse than no API page.
§01

Endpoints

API endpoints
MethodPathReturnsStatus
GET/api/export/hospital/{slug}.jsonOne hospital with every reported measure, rank and provenance● Live
GET/api/export/hospital/{slug}.csvThe same, one row per measure● Live
GET/api/export/agency/{slug}.jsonOne federal agency: budget authority, obligations, outlays● Live
GET/api/export/agency/{slug}.csvThe same, flattened● Live
GET/api/v1/hospitals?state=MNFiltered collections with pagination○ Planned
GET/api/v1/geo/{geoid}/spendingFederal obligations time series for a geography○ Planned
GET/api/v1/search?q=Full-text search across every entity type○ Planned
§02

Using it

No key, no rate limit, for single records

Per-record endpoints are cached at the edge and cost nothing to serve, so there is nothing to protect them from. Collection endpoints will need a key when they exist, because an unbounded query is a different thing from a cached document.

CORS

Every export sends Access-Control-Allow-Origin: *, so these work from a browser, a notebook, or a spreadsheet without a proxy.

Provenance travels with the data

Each response carries the agency, dataset URL, licence and effective date. A figure that leaves this site without its source is the problem this site exists to solve, so it is not possible to export one that has.

Caching

Responses are cached for seven days with a thirty-day stale-while-revalidate window, matching the underlying release cadence. Requesting more often than the agency publishes returns the same bytes.

Example

$ curl -s https://publicdatahub.org/api/export/hospital/mayo-clinic-hospital-rochester.json \
    | jq '{name, measures: [.measures[] | {label, value, national_rank}], provenance}'