Estonia aFRR capacity prices
BBCM-cleared aFRR 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; aFRR capacity procurement on BBCM started 15 April 2025.
Endpoints
- Latest (rolling 7-day):
https://public-data.volton.energy/v1/afrr-capacity-price/latest.json - Per-day archive:
https://public-data.volton.energy/v1/afrr-capacity-price/{YYYY-MM-DD}.json— immutable, available from2025-04-15
Row schema
| Column | Type | Unit | Nullable | Description |
|---|---|---|---|---|
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 aFRR 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/afrr-capacity-price/latest.json
DuckDB
SELECT * FROM read_json_auto(
'https://public-data.volton.energy/v1/afrr-capacity-price/latest.json',
records = false
);
Python (pandas)
import pandas as pd
resp = pd.read_json('https://public-data.volton.energy/v1/afrr-capacity-price/latest.json')
df = pd.DataFrame(resp['rows'])
R (jsonlite)
library(jsonlite)
data <- fromJSON('https://public-data.volton.energy/v1/afrr-capacity-price/latest.json')
df <- data$rows
JavaScript (fetch)
const r = await fetch('https://public-data.volton.energy/v1/afrr-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/afrr-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. aFRR capacity clears daily on the Baltic Balancing Capacity Market (BBCM), live for aFRR since 15 April 2025 — the day after Estonia joined PICASSO.
aFRR capacity prices are typically lower per MW/h than mFRR because the technical bar is lower (continuous control signal, smaller activations). Total revenue depends on the size of the qualified capacity and how many hours the BSP cleared.
Prices may be null for an MTU when no capacity was procured in that direction.
FAQ
- aFRR capacity vs mFRR capacity — which earns more?
- Both are paid per MW/h. mFRR capacity prices are usually higher per unit (higher technical bar, larger activations). But aFRR capacity has more hours qualified — fewer scarcity drops to zero. Total revenue depends on your asset profile.
- Why is the data only since April 2025?
- Estonia joined PICASSO on 9 April 2025; aFRR capacity procurement on BBCM started 15 April 2025. Before that, aFRR capacity wasn't cleared cross-border, so there is no comparable price series.
License + citation
Source: Baltic Transparency Dashboard via Volton, CC-BY-4.0. CC-BY-4.0.
Volton Technology OÜ (2026). Estonia aFRR capacity prices.
CC-BY-4.0. https://public-data.volton.energy/afrr-capacity-price/