Lithuania aFRR capacity prices
BBCM-cleared aFRR capacity availability prices for the Lithuanian 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-lt/latest.json - Per-day archive:
https://public-data.volton.energy/v1/afrr-capacity-price-lt/{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-lt/latest.json
DuckDB
SELECT * FROM read_json_auto(
'https://public-data.volton.energy/v1/afrr-capacity-price-lt/latest.json',
records = false
);
Python (pandas)
import pandas as pd
resp = pd.read_json('https://public-data.volton.energy/v1/afrr-capacity-price-lt/latest.json')
df = pd.DataFrame(resp['rows'])
R (jsonlite)
library(jsonlite)
data <- fromJSON('https://public-data.volton.energy/v1/afrr-capacity-price-lt/latest.json')
df <- data$rows
JavaScript (fetch)
const r = await fetch('https://public-data.volton.energy/v1/afrr-capacity-price-lt/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-lt/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), the joint market shared by Estonia, Latvia and Lithuania, live for aFRR since 15 April 2025.
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?
- aFRR capacity procurement on the BBCM started 15 April 2025, once all three Baltic states had joined PICASSO (Lithuania on 5 March, Estonia on 9 April, Latvia on 10 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). Lithuania aFRR capacity prices.
CC-BY-4.0. https://public-data.volton.energy/afrr-capacity-price-lt/