ENTSO-E / EPEX SPOT
This implementation uses the ENTSO-E Transparency Platform to receive day-ahead electricity prices for European bidding zones.
Authentication
To request a (free) authentication token, please see chapter "How to get security token?" in the official API documentation: https://transparencyplatform.zendesk.com/hc/en-us/articles/12845911031188-How-to-get-security-token
Currency Conversion
Prices retrieved from ENTSO-E are automatically converted to the user’s configured currency (set in the Core.Meta component) using the ECB Exchange Rates API.
Configuration
The component expects the following configuration inputs:
-
biddingZone: ENTSO-E bidding zone (e.g.,
GERMANY) -
ancillaryCosts: JSON string defining additional costs on top of the day-ahead price
You can configure ancillary costs in two ways: by using a predefined German Distribution System Operator (DSO) or by providing a custom schedule.
Using a Predefined DSO
For convenience, several German DSOs are already predefined in the implementation. For example:
{
"dso": "BAYERNWERK"
}
Configuration example:
-
biddingZone:GERMANY -
ancillaryCosts:{"dso":"BAYERNWERK"}
For a list of predefined DSOs see GermanDSO.java.
Using Custom Ancillary Costs (DSO = "OTHER")
If your DSO is not on the predefined list, or if you need to define a custom time-of-use tariff structure, you can provide your own schedule.
In this case, set "dso": "OTHER" and provide a schedule array with quarterly definitions.
Each entry in the schedule contains:
-
year: calendar year (e.g.,2025) -
tariffs: fixed additional costs (per kWh) for each tariff level (low,standard,high) -
quarters: quarterly schedules (Q1–Q4) withdailyScheduledefinitions
Example configuration:
-
biddingZone::
GERMANY -
ancillaryCosts:: See the detailed JSON string below.
{
"dso": "OTHER",
"schedule": [
{
"year": 2025,
"tariffs": {
"low": 0.10,
"standard": 0.20,
"high": 0.30
},
"quarters": [
{
"quarter": 1,
"dailySchedule": [
{ "tariff": "low", "from": "00:00", "to": "06:00" },
{ "tariff": "standard", "from": "06:00", "to": "18:00" },
{ "tariff": "high", "from": "18:00", "to": "23:59" }
]
},
{
"quarter": 2,
"dailySchedule": []
},
{
"quarter": 3,
"dailySchedule": []
},
{
"quarter": 4,
"dailySchedule": [
{ "tariff": "low", "from": "00:00", "to": "06:00" },
{ "tariff": "standard", "from": "06:00", "to": "18:00" },
{ "tariff": "high", "from": "18:00", "to": "23:59" }
]
}
]
}
]
}
Custom Schedule JSON Structure Explained
The schedule is a JSON array where each object defines the tariffs for a specific year.
-
year:: The year for which this schedule is valid (e.g.,2025). -
tariffs:: An object defining the named price levels. You can define your own names (e.g.,low,standard,high) and assign a cost to each. The namestandardis special and is used as a fallback if no time slot applies. -
quarters:: An array defining the schedule for each quarter of the year.-
quarter:: The quarter number (1to4). -
dailySchedule:: An array specifying the time slots and their corresponding tariffs for each day in that quarter.-
tariff:: The tariff name, which must match one of the keys defined in thetariffsobject. -
from:: The start time of the slot inHH:mmformat. -
to:: The end time of the slot inHH:mmformat.
-
-
Notes
-
If the
dailySchedulefor a quarter is empty ([]), the system will default to using the price defined for thestandardtariff for that entire quarter. This is useful for seasons with flat ancillary costs. -
Tariff boundaries (
from/to) must not overlap and must follow chronological order. -
Multiple years can be defined by adding more entries to the
schedulearray.