Retrieving Pricing Data
RABOT provides two endpoints for retrieving pricing data, each serving a different purpose:- EPEX Spot Price — raw market prices sourced from the EPEX energy exchange, independent of any contract. Useful for price visualisation, market analysis, and building price forecasting logic.
- Working Price — contract-specific pricing that combines the EPEX spot price with procurement costs, grid fees, and levies. This is the price a customer actually pays per kWh and is the data required for asset optimisation.
EPEX Spot Price
This endpoint is most useful for price transparency displays, customer-facing price charts, or as an input to your own pricing models. For asset optimisation against actual customer costs, use the Working Price endpoint instead.
Query Parameters
Data Availability
Day-ahead spot prices are published by EPEX daily at 16:00 CET for the following day. Thefrom field in the response confirm the date of the data returned.
Response Structure
Spot prices are returned in cent/kWh (pricesUnit.main: "Cent", pricesUnit.per: "Kwh"). Each day is represented as 96 intervals of 15 minutes, with each interval identified by a timestamp in YYYY-MM-DD HH:mm format.
Example Response
The example above shows 3 of the 96 intervals returned for a full day. A complete day response contains one entry per 15-minute interval from
00:00 to 23:45.Working Price
The working price returned by this endpoint is not identical to the billed settlement price a customer will see on their invoice. The billing engine calculates a consumption-weighted average of realised spot prices using the customer’s Standard Load Profile (SLP), which results in a different effective working price than the interval-by-interval values provided here. This endpoint is the correct data source for asset optimisation and consumption steering — do not use it to derive or display billed prices to customers.
Path Parameters
Query Parameters
Data Availability and Time Window
The endpoint returns working price data across a rolling three-day window:
The
dataAvailableAt field in the response indicates the datetime from which the next day’s data becomes available.
Response Structure
All prices are returned in cent/kWh (unit: "cent/kWh"). Each day is represented as 96 intervals of 15 minutes, identified by timestamp and interval: "15min".
Working Price Components
Example Request
Example Response
The example above shows 2 of the 96 intervals returned for a full day. A complete day response contains one entry per 15-minute interval from
00:00 to 23:45.Using Pricing Data
The two endpoints serve complementary purposes and can be used independently or together depending on your use case:Relationship Between the Two Endpoints
TheenergyPrice.spotPrice field in the Working Price response is the gross (VAT-inclusive) equivalent of the raw EPEX spot price returned by the Spot Price endpoint. The relationship is exact:
2026-03-30 00:00:
- EPEX Spot Price (netto):
1.7760 cent/kWh energyPrice.spotPrice(gross):2.1134 cent/kWh1.7760 × 1.19 = 2.1134✓
Asset Optimisation
The Working Price endpoint is the primary data source for EMS partners performing smart asset steering — including peak shaving, load shifting, and consumption optimisation against actual customer costs.Smart Meter Requirements for Effective Asset Optimisation
The working price data provided by this endpoint enables interval-level asset steering — but the financial benefit of that optimisation is only realised by the customer if they are billed on actual 15-minute consumption data rather than a Standard Load Profile (SLP). This requires all of the following to be in place: An intelligent metering system (iMSys) is installed — a smart meter with a certified smart meter gateway (SMGW), installed by the metering point operator (MSB). TAF7 billing is confirmed as active — the electricity supplier has confirmed TAF7 (15-minute interval billing) is in place, following confirmation from both the MSB and the distribution grid operator (VNB) that the iMSys is operational. Without TAF7 active, the customer continues to be billed based on their SLP regardless of when they consume electricity, meaning the savings generated by optimising against this endpoint will not be reflected in their bill.§14a Module 3 and Variable Grid Fees
§14a EnWG is a German regulation, in effect from January 1, 2024, that requires newly installed high-power controllable devices (>4.2 kW) — such as heat pumps, EV chargers, and battery storage systems — to be remotely dimmable by the grid operator during periods of grid stress. In return, customers receive a reduction in their grid fees. There are three compensation modules a customer can choose from:
- Module 1: A flat-rate annual reduction of approximately €110–190, depending on the grid operator.
- Module 2: A 60% reduction on the volumetric grid fee, requiring a separate meter for the controllable device.
- Module 3: An add-on to Module 1 (available from April 1, 2025) that introduces time-variable grid fees within the day — across peak, off-peak, and standard tariff windows — to incentivise consumption shifting to off-peak periods.
gridFees.variableGridFee changes across defined time windows within each day. Unlike the other fee components, it cannot be treated as a stable offset — your optimisation model must consume it dynamically per interval.
For contracts without Module 3, gridFees.variableGridFee equals gridFees.total and is stable across the forecast horizon — it can be stored as a fixed offset alongside the other fee components. The gridFees object is structured to accommodate additional components in future.
Whether a contract has a §14a module active — and which module — can be confirmed via the GET Contracts endpoint. Check this at contract onboarding before deciding how to handle gridFees.variableGridFee in your model.
Module 3 Time Windows and Tariff Levels
Module 3 introduces three tariff levels within each day, with the specific time windows defined individually by each grid operator and published annually on their Preisblatt (price sheet) by October 15 for the following year. There is no national standard for when each tariff applies — hours vary by grid territory. The BNetzA sets only the regulatory boundaries for the tariff levels themselves:
At least two quarters per year must apply HT and NT levels. The remaining months use the standard tariff. Multiple HT, NT, and ST windows per day are permitted.
Because time windows are grid-operator-specific and published annually (due by October 15 annually), the
variableGridFee values in the API response will differ between contracts in different grid territories and may change each year. Your optimisation model should not assume fixed time windows across contracts — always consume variableGridFee dynamically per interval for contracts with Module 3 active.If you store fee components as fixed offsets and notice variableGridFee values changing unexpectedly, this is likely the result of an annual Preisblatt update and your offsets should be refreshed.Recommended Integration Approach
Day X+1 Data Unavailable After 16:00 CET
If Day X+1 data is not returned after 16:00 CET, retry the request. If data is still unavailable by 17:30 CET, escalate to your partner and integration manager immediately, providing thetraceId and instanceId from any error responses received.
Testing
Due to the nature of the underlying data sources, the Working Price endpoint is not currently fully replicable in our test environment. Two equivalent testing options are available: Option 1 (Recommended) — Use your own test environment Use your existing RABOT production client credentials with production customer and contract data in your own local or test environment: Option 2 — Use RABOT demo credentials Swap your test environment credentials for the RABOT demo partner client credentials and use the customer and contract numbers below. Contact your account manager to obtain the demo credentials, if not readily available.- Customer No:
41219866 - Contract No:
49321434
Error Reference
When a request fails, the API returns an error response. Note that error responses use a different structure from successful responses — there is noisSuccess or data wrapper.
Error responses include a traceId and instanceId. Always include both values when raising an issue with your partner or integration manager, as these are required to investigate the request server-side.
404 — Customer or Contract Not Found
500 — Date Range Outside Permitted Window
Returned when the requested date range falls outside the rolling three-day window (Day X-1 to Day X+1).500 — Missing Query Parameters or Unhandled Error
Returned whenfrom or to query parameters are omitted, or when an unexpected internal error occurs. If you receive this response with no descriptive detail field, escalate immediately to your partner and integration manager with the traceId and instanceId.