Free Electricity Data API
A free, read only JSON API with 4 datasets and 5 endpoints, data to 2026-09-20.
There is no key and no server: each response is a static file at /api/v1/, rebuilt with every site build and
served with open CORS headers. Every payload carries the source attribution and licence you must keep.
Key Facts
- Annual electricity generation, demand and emissions by country: 215 countries, 1985 to 2025, from Ember (CC BY 4.0).
- Monthly electricity generation and demand by country: 88 countries, 1999-01 to 2026-08, from Ember (CC BY 4.0).
- US grid region daily electricity demand and generation: 14 US grid regions, 2025-08-16 to 2026-09-20, from U.S. Energy Information Administration (US Government work, public domain).
- European cross border physical electricity flows: 88 borders, 2026-08-21 to 2026-09-19 (30 days), from ENTSO-E Transparency Platform (ENTSO-E Terms of Use plus CC BY 4.0 for listed data items).
- 5 endpoints, plus an index and an OpenAPI 3 description. Files are static and rebuilt with every site build.
Endpoints
Base https://worldpowermonitor.com/api/v1| Path | Returns | Files |
|---|---|---|
| /api/v1/index.json | Datasets with coverage, cadence, attribution and endpoints. | 1 |
| /api/v1/openapi.json | OpenAPI 3 description of the endpoints below. | 1 |
| /api/v1/countries.json | List of countries with a data file. | 215 |
| /api/v1/countries/{id}.json | Ember annual and monthly series for one country. | 215 |
| /api/v1/regions.json | List of US grid regions with a daily file. | 14 |
| /api/v1/regions/{id}.json | Daily demand and generation for one US grid region. | 14 |
| /api/v1/europe/flows.json | Physical cross border flows between European zones over a dated window. | 1 |
Examples
curl
curl -s https://worldpowermonitor.com/api/v1/index.json curl -s https://worldpowermonitor.com/api/v1/countries/germany.json
JavaScript fetch, which works from a browser on any site
const res = await fetch('https://worldpowermonitor.com/api/v1/countries/germany.json');
const data = await res.json();
console.log(data.attribution); Operator data is a separate dataset: https://worldpowermonitor.com/api/v1/regions/eia-texas.json.
Fields
| Field | Type | Meaning |
|---|---|---|
| api_version | text | Always v1 for these files. |
| attribution | object or list | Source name and URL, the exact attribution text, licence name and licence URL. Keep it with any copy. |
| dataset, as_of, changes | text | Dataset id, the last year, month or day in the file, and what World Power Monitor changed from the source. |
| years, months, dates | list | The time axis. Every series in the same block has one value per entry, in the same order. |
| *_twh, *_gw, *_mwh, *_pct, *_mtco2, *_gco2_kwh | number | Raw values, never formatted strings. The unit is the field name suffix. null means missing. |
| generation_twh, share_pct, capacity_gw, emissions_mtco2 | object | Series keyed by fuel id (coal, gas, nuclear, hydro, wind, solar and others). |
Datasets, licences and update cadence
Data as of 2026-09-20| Dataset | Coverage | Licence | Update cadence |
|---|---|---|---|
| Annual electricity generation, demand and emissions by country | 215 countries, 1985 to 2025 | CC BY 4.0 | Ember publishes annual figures as national statistics arrive, mostly once a year, with revisions. The files are rebuilt from the latest Ember release with every site build. |
| Monthly electricity generation and demand by country | 88 countries, 1999-01 to 2026-08 | CC BY 4.0 | Ember adds a month of data as national sources publish it, usually a month or two after the month ends. The file is rebuilt from the latest release with every site build. |
| US grid region daily electricity demand and generation | 14 US grid regions, 2025-08-16 to 2026-09-20 | US Government work, public domain | EIA publishes hourly grid data with a lag of about one hour for demand and up to 13 hours for generation by fuel. Daily totals are rebuilt with every site build and cover a rolling window of about 400 days. |
| European cross border physical electricity flows | 88 borders, 2026-08-21 to 2026-09-19 (30 days) | ENTSO-E Terms of Use plus CC BY 4.0 for listed data items | A rolling 30 day window, rebuilt with every site build from the latest ENTSO-E physical flow data. |
Using the API
- Attribution. Keep the
attributionfield, or the text below, with any copy or derived work. It is the same text on every dataset page. - Two layers. Ember statistics (countries) and operator data (EIA, ENTSO-E) are separate endpoints and are not merged into one figure. Do not add the US Lower 48 region to the other US regions.
- Only cleared datasets. A dataset is served only when its licence allows republishing it; other series on the site are not available here.
- CORS and caching. Responses send
Access-Control-Allow-Origin: *and cache for an hour at the edge. Files change at most once per site build, so poll no more than hourly. - Stability. Version 1 keeps existing fields; new fields may be added. A breaking change would ship as /api/v2/.
- Missing values. A null is a value the source did not report. Days of exactly zero regional demand are reported as null, not zero.
Annual electricity generation, demand and emissions by country. Source: Ember (ember-energy.org), licensed under CC BY 4.0.
Monthly electricity generation and demand by country. Source: Ember (ember-energy.org), licensed under CC BY 4.0.
US grid region daily electricity demand and generation. Source: U.S. Energy Information Administration (EIA).
European cross border physical electricity flows. Source: ENTSO-E Transparency Platform (transparency.entsoe.eu), CC BY 4.0. Aggregated and converted by World Power Monitor; ENTSO-E does not endorse this site.
Source: Ember (ember-energy.org), licensed under CC BY 4.0. Source: U.S. Energy Information Administration (EIA). (US Government work, public domain) Source: ENTSO-E Transparency Platform (transparency.entsoe.eu), CC BY 4.0. Aggregated and converted by World Power Monitor; ENTSO-E does not endorse this site. (ENTSO-E Terms of Use plus CC BY 4.0 for listed data items) Data as of 2026-09-20. Each dataset has its own as-of date.