The EnergyLive API provides programmatic access to Day-Ahead Market (DAM) data stored in the EnergyLive database, so that it can be integrated into your own applications, models and reports.
All responses are JSON. All dates are in the format YYYY-MM-DD and refer to the CET/CEST delivery day (Europe/Berlin).
https://www.energylive.cloud/api/v1/
Every request must be authenticated with your personal API token. You can generate (and regenerate) the token on your User Account page.
Send the token in one of the following ways:
access-token:
https://www.energylive.cloud/api/v1/dam-results?access-token=XXXXXXXXAuthorization: Bearer XXXXXXXXKeep your token secret. If it may have been exposed, regenerate it from your User Account page.
| Subscription | Current data (today & tomorrow) | Historical data | Historical data of Italy (GME) |
|---|---|---|---|
| Basic | Yes | No | No |
| Full excluding GME | Yes | Yes | No |
| Full (with GME) | Yes | Yes | Yes |
"Historical" means any delivery day before today (CET). Requests for historical data without the required subscription return an error (see Error handling). With area=all, Italian zones are omitted from historical results when the subscription does not include GME data.
GET /dam-results
Returns the Day-Ahead Market results for all areas, as they appear on the platform's home page: base, peak and off-peak averages of the delivery day, plus month-to-date and year-to-date averages. By default the latest delivery day; with date, the results of an earlier day.
Parameters:
| Name | Required | Description |
|---|---|---|
date | No | Delivery day (YYYY-MM-DD, CET). Default: the latest available delivery day. Days before today are historical data (Full subscriptions; Italian zones only with GME data, otherwise omitted). Month-to-date and year-to-date are computed up to that day. |
Examples:
https://www.energylive.cloud/api/v1/dam-results?access-token=XXXXXXXX
https://www.energylive.cloud/api/v1/dam-results?access-token=XXXXXXXX&date=2025-01-15
Response:
{
"date": "2026-09-28",
"results": [
{"code": "gr", "name": "Greece (GR)", "base": 135.108, "peak": 82.014, "offpeak": 188.201, "mtd": 159.208, "ytd": 105.969},
...
],
"currency": "EUR",
"rate_GBP": 0.84,
"updated_CET": "2026-09-27 13:05:12",
"updated_ts": 1790507112
}
base, peak and offpeak with the rate of the day (rate_GBP, EUR/GBP), mtd and ytd day by day.peak: average of 08:00–20:00 CET; offpeak: the remaining hours.GET /daily-avg
Returns daily base and peak average prices, with the relative change from the previous day, for up to three areas.
Parameters:
| Name | Required | Description |
|---|---|---|
area | Yes | Up to 3 areas separated by commas, e.g. GR,BG,RO. See Available areas (price areas). |
date | No | Delivery day (YYYY-MM-DD). If omitted: Basic subscriptions get the latest available day; Full subscriptions get every day from the 1st of the current month up to the latest available day. |
Examples:
https://www.energylive.cloud/api/v1/daily-avg?access-token=XXXXXXXX&area=GR,BG
https://www.energylive.cloud/api/v1/daily-avg?access-token=XXXXXXXX&area=BG,RO,HU&date=2022-11-10
Response:
[
{"area": "GR", "date": "2026-09-28", "base": 135.11, "base_change": 0.328, "peak": 82.01, "peak_change": 1.1843},
...
]
base: average price of the day (EUR/MWh). peak: average of 08:00–20:00 CET.base_change, peak_change: change vs. the previous day as a fraction (0.328 = +32.8%)."" when the value cannot be computed (e.g. no data for the previous day, or the previous value is 0).[].GET /
Returns DAM prices and/or volumes for the requested areas and delivery period.
Since the move of the European Day-Ahead Market to a 15-minute Market Time Unit (1 October 2025), data is returned in 15-minute resolution (96 values per day; 92/100 on daylight-saving change days). Use averaging=hour to receive hourly averages instead. Earlier periods are available in the resolution in which they were published (hourly).
Parameters:
| Name | Required | Description |
|---|---|---|
area | Yes | Areas separated by commas (e.g. BG,GR,IT_PUN,HR), or all. |
param | Yes | price, volume, or all (comma separated). |
from | No | First delivery day (YYYY-MM-DD, CET). Default: the latest available delivery day. |
to | No | Last delivery day (YYYY-MM-DD, CET), inclusive. Default: same as from. |
averaging | No | hour returns hourly averages of the 15-minute values (the minute_local field is then omitted). |
page | No | Page number for results larger than 1,000 rows (see Pagination). Default: 1. |
Examples:
https://www.energylive.cloud/api/v1?access-token=XXXXXXX&area=BG,RO,GR,DE-LU,HU¶m=price&from=2022-05-01&to=2022-05-10
https://www.energylive.cloud/api/v1?access-token=XXXXXXX&area=GR¶m=price,volume&from=2026-09-01&to=2026-09-07&averaging=hour
https://www.energylive.cloud/api/v1?access-token=XXXXXXX&area=all¶m=all
https://www.energylive.cloud/api/v1?access-token=XXXXXXX&area=all¶m=price&page=2
Response:
[
{"name": "GR_price", "date_local": "2026-09-28", "hour_local": 1, "minute_local": 0, "datetime_CET": "2026-09-28 00:00:00", "value": 192.07},
{"name": "GR_price", "date_local": "2026-09-28", "hour_local": 1, "minute_local": 15, "datetime_CET": "2026-09-28 00:15:00", "value": 188.72},
...
]
name: series name, <AREA>_price (EUR/MWh) or <AREA>_volume (MWh).datetime_CET: start of the delivery period in CET/CEST. This is the recommended timestamp to use.date_local, hour_local (1–24, hour ending), minute_local (0, 15, 30, 45): delivery day, hour and quarter.to is before from, the response is an empty array.The time-series endpoint returns at most 1,000 rows per request. Always check the following response headers and request the next pages with page=2, page=3, … until all rows have been received:
| Header | Description |
|---|---|
X-Pagination-Total-Count | Total number of rows |
X-Pagination-Page-Count | Total number of pages |
X-Pagination-Current-Page | Current page |
X-Pagination-Per-Page | Rows per page (1000) |
Link | URLs of the self, first, prev, next and last pages |
For example, one day of area=all¶m=price in 15-minute resolution is about 4,000 rows (5 pages).
| Data | Areas / bidding zones |
|---|---|
Prices (param=price, /daily-avg) |
GR, BG, RO, HU, SK, CZ, RS, TR, HR, SI, FR, CH, AT, DE-LU, ES, PT, BE, GB, NL, IE, PL, FI, NO1, NO2, NO3, NO4, NO5, SE1, SE2, SE3, SE4, DK1, DK2, NI, AL, KS, ME, MK, IT_PUN, IT_NAT, IT_CNOR, IT_CSUD, IT_NORD, IT_SARD, IT_SICI, IT_SUD, IT_CALA |
Volumes (param=volume) |
GR, BG, RO, HU, RS, TR, HR, SI, FR, CH, AT, DE-LU, ES-PT, BE, GB, NL, PL, NI, AL, KS, ME, MK, IT_TOTAL, IT_NAT, IT_CNOR, IT_CSUD, IT_NORD, IT_SARD, IT_SICI, IT_SUD, IT_CALA |
Request errors (invalid parameters, subscription restrictions, no data) are returned with HTTP status 200 and the following JSON body. Check the status field of the body:
{
"name": "Bad Request",
"message": "You do not have access to historical data.",
"code": 0,
"status": 400
}
status | message | Cause |
|---|---|---|
| 400 | Error in area, parameters, processType combination. | Unknown area or param value |
| 400 | Invalid from / to / date. Expected format YYYY-MM-DD. | Invalid date |
| 400 | No areas found. | Unknown area in /daily-avg |
| 400 | You can select up to 3 areas. | More than 3 areas in /daily-avg |
| 400 | You do not have access to historical data. | Historical data not included in the subscription |
| 400 | You do not have access to historical data of Italy. | Italian historical data not included in the subscription |
| 404 | Please try again later. ("name": "Data not available") | Data temporarily unavailable |
| 404 | No results for YYYY-MM-DD. ("name": "Data not available") | No prices for the requested date in /dam-results (e.g. a future day) |
The following errors are returned with the corresponding HTTP status code and the same body structure:
| HTTP status | Cause |
|---|---|
400 Bad Request | A required parameter is missing (e.g. Missing required parameters: area) |
401 Unauthorized | Missing or invalid token |
403 Forbidden | The account has no active subscription, or the current Terms of Use and Privacy Notice have not been accepted (log in at www.energylive.cloud to accept them) |
429 Too Many Requests | Rate limit exceeded, or too many requests with an invalid or missing token from the same IP address (blocked for 15 minutes, see the Retry-After header) |
The API allows 60 requests per minute per account. Exceeding this limit results in a 429 Too Many Requests response; wait a few seconds and retry.
Requests with an invalid or missing token are limited per IP address: after 10 failed requests within one minute, all requests from that IP address receive 429 Too Many Requests for 15 minutes (see the Retry-After header). Do not retry requests that return 401; check the token instead.