Estonia mFRR capacity prices

BBCM-cleared mFRR capacity availability prices for the Estonian bidding zone — what BSPs are paid for *being available*, separate from energy activation prices. One value per 15-minute MTU, per direction. Sourced from the Baltic Transparency Dashboard, refreshed hourly.

Endpoints

Row schema

ColumnTypeUnitNullableDescription
mtu_start string (date-time) no Market Time Unit start (ISO 8601 UTC). Each MTU is a 15-minute settlement interval.
direction string enum: up | down no Reserve direction the capacity is procured for.
price_eur_mw_h number EUR/MW/h yes BBCM-cleared mFRR capacity availability price (paid per MW of qualified capacity per hour). Null when no capacity procured in this direction.

Top-level response: { schema_version, generated_at, meta, rows: [...] }

Code samples

curl
curl https://public-data.volton.energy/v1/mfrr-capacity-price/latest.json
DuckDB
SELECT * FROM read_json_auto(
  'https://public-data.volton.energy/v1/mfrr-capacity-price/latest.json',
  records = false
);
Python (pandas)
import pandas as pd

resp = pd.read_json('https://public-data.volton.energy/v1/mfrr-capacity-price/latest.json')
df = pd.DataFrame(resp['rows'])
R (jsonlite)
library(jsonlite)
data <- fromJSON('https://public-data.volton.energy/v1/mfrr-capacity-price/latest.json')
df <- data$rows
JavaScript (fetch)
const r = await fetch('https://public-data.volton.energy/v1/mfrr-capacity-price/latest.json');
const { rows, meta } = await r.json();
Excel Power Query (M)
let
    Source = Json.Document(Web.Contents("https://public-data.volton.energy/v1/mfrr-capacity-price/latest.json")),
    Rows = Source[rows],
    AsTable = Table.FromRecords(Rows)
in
    AsTable

Methodology

Capacity prices are paid hourly to every BSP that committed reserve capacity to the TSO ahead of time, regardless of whether activation happens. They clear daily on the Baltic Balancing Capacity Market (BBCM), live since 4 February 2025 with FCR + mFRR (aFRR added 15 April 2025).

Capacity revenue is materially the bigger income stream for Estonian BSPs vs energy: a typical 1 MW BESS earns the capacity price every hour it is qualified, whereas activation only triggers in some MTUs.

Prices may be null for an MTU when no capacity was procured in that direction.

FAQ

How does capacity differ from energy clearing price?
Capacity = what you are paid for *being available* (the option). Energy = what you are paid when actually activated (the strike). Most Estonian BSP revenue comes from capacity, because activations are infrequent but capacity is paid every hour.
Why €/MW/h instead of €/MWh?
You are paid per MW of available capacity per hour. €/MW/h × hours qualified = total capacity revenue. Energy prices are €/MWh because they price actual energy delivered.

License + citation

Source: Baltic Transparency Dashboard via Volton, CC-BY-4.0. CC-BY-4.0.

Volton Technology OÜ (2026). Estonia mFRR capacity prices.
CC-BY-4.0. https://public-data.volton.energy/mfrr-capacity-price/

Related