# U.S. Environmental Protection Agency (EPA)
> EPA publishes public environmental data through several unrelated APIs on several hosts. This file
> was GENERATED by API Evangelist from EPA's own published contracts and documentation — EPA serves
> no llms.txt of its own (probed 2026-09-06: /llms.txt returned 404 on epa.gov, www.epa.gov,
> aqs.epa.gov, api.epa.gov and echo.epa.gov, and a catch-all body on data.epa.gov).
Four public API surfaces, four different conventions. EPA's own API strategy is still a draft, and
the divergence below is the consequence: two of the four require a key and two do not, three
different error envelopes are in use, one surface encodes its whole query in the URL path, and none
of them returns a rate-limit header.
## APIs
- [Clean Air Markets (EASEY)](https://www.epa.gov/power-sector/cam-api-portal): Power-sector
emissions, allowance holdings and transactions, facility and unit data, monitoring plans and QA
certification. Base `https://api.epa.gov/easey`. Requires an `x-api-key` header (free, from
api.data.gov). 1,000 requests/hour, 500 rows/page, 15-minute request timeout. Eight OpenAPI 3.0
contracts, 206 operations, all published 2026-08-20.
- [Envirofacts Data Service](https://www.epa.gov/enviro/envirofacts-data-service-api): Query any
table in EPA's regulatory warehouse — RCRA, TRI, SEMS Superfund, SDWIS, GHG reporting. Base
`https://data.epa.gov/efservice/`. No key. The query is encoded in the URL path, not in a query
string. Eight output formats including Parquet.
- [UV Index](https://www.epa.gov/enviro/web-services): Hourly and daily UV forecasts by ZIP or
city/state. Base `https://data.epa.gov/dmapservice/`. No key.
- [Air Quality System (AQS) Data Mart](https://aqs.epa.gov/aqsweb/documents/data_api.html): Ambient
air sample data, monitor metadata, daily/quarterly/annual aggregates, QA results. Base
`https://aqs.epa.gov/data/api`. Requires `email` + `key` query parameters (free, self-service).
10 requests/minute, one calendar year per query, 5 parameter codes per request.
- [ECHO Compliance and Enforcement](https://echo.epa.gov/tools/web-services): Facility compliance
and enforcement history. Base `https://echodata.epa.gov/echo/`. No key, no published limit.
## Specs
- openapi/environmental-protection-agency-easey-emissions-mgmt-openapi.json — Emissions Management, 33 paths
- openapi/environmental-protection-agency-easey-streaming-services-openapi.json — Streaming Services, 37 paths
- openapi/environmental-protection-agency-easey-qa-certification-mgmt-openapi.json — QA Certification, 67 paths
- openapi/environmental-protection-agency-easey-monitor-plan-mgmt-openapi.json — Monitor Plan Management, 31 paths
- openapi/environmental-protection-agency-easey-account-mgmt-openapi.json — Account Management, 17 paths
- openapi/environmental-protection-agency-easey-master-data-mgmt-openapi.json — Master Data, 11 paths
- openapi/environmental-protection-agency-easey-facilities-mgmt-openapi.json — Facilities Management, 5 paths
- openapi/environmental-protection-agency-easey-camd-services-openapi.json — CAMD Administrative & General Services, 5 paths
- openapi/environmental-protection-agency-envirofacts-api-openapi.yml — Envirofacts path-query grammar
- openapi/environmental-protection-agency-uvindex-api-openapi.yml — UV Index hourly and daily
## Runtime rules an agent needs
- **No rate-limit headers anywhere.** Limits are published in prose and enforced at runtime, but no
EPA response carries `X-RateLimit-*`, `RateLimit-*` or `Retry-After`. Track your own spend.
- **No status page.** `status.epa.gov` does not resolve. The only anonymous liveness probe in the
whole estate is `https://aqs.epa.gov/data/api/metaData/isAvailable`.
- **Read-only.** 205 of 206 harvested EASEY operations are GET, and the single POST is a read that
uses a body. There is no write surface, therefore no idempotency key and nothing to reverse.
- **Three error envelopes, none of them RFC 9457.** EASEY returns `{"error":{"code":..,"message":..}}`,
AQS returns a Header/Body envelope with an `errors` array, Envirofacts returns `{"error":"text"}`.
- **No deprecation policy.** Retirement happens without notice — `api-ccte.epa.gov`, the old CompTox
API host, simply stopped resolving; the successor is `comptox.epa.gov/ctx-api/` and is key-gated.
## Client libraries
- [pyaqsapi](https://pypi.org/project/pyaqsapi/) — first-party Python client for AQS, v1.0.2 (2025-05-07)
- [RAQSAPI](https://cran.r-project.org/package=RAQSAPI) — first-party R client for AQS, v2.0.5 (2024-06-12)
- [USEPA/cam-api-examples](https://github.com/USEPA/cam-api-examples) — Python request examples for EASEY, not a package
There is no first-party SDK for Envirofacts, ECHO, the UV Index service or EASEY.
## Docs
- [EPA Developer Central](https://www.epa.gov/developers)
- [EPA APIs overview](https://www.epa.gov/data/application-programming-interface-api)
- [EPA Draft API Strategy](https://www.epa.gov/data/draft-api-strategy)
- [Envirofacts web services](https://www.epa.gov/enviro/web-services)
- [GitHub — USEPA](https://github.com/USEPA) · [GitHub — US-EPA-CAMD](https://github.com/US-EPA-CAMD)
## Sign-up
- EASEY key:
- AQS key:
- Envirofacts, UV Index and ECHO need no registration.
## Terms
All EPA data in these APIs is U.S. Government work in the public domain. See
[EPA disclaimers](https://www.epa.gov/web-policies-and-procedures/epa-disclaimers) and the
[privacy and security notice](https://www.epa.gov/privacy/privacy-and-security-notice). There is no
SLA and no uptime commitment.