Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Nord Pool Market Data Balance Market API
description: 'Nord Pool''s Market Data API (v2) provides programmatic access to European power exchange market data: day-ahead auction prices, price indices, volumes, capacities, flows and aggregated bid curves; intraday continuous statistics, orders, trades and order books; balance market (mFRR) data; power system data (production, consumption, forecasts, hydro reservoir reserves); system price and turnover; and exchange rates. This document is the provider''s published OpenAPI definition, retrieved from https://data-api.nordpoolgroup.com/swagger/v2/swagger.json on 2026-07-11. Access to the data requires a paid Nord Pool Power Data Services subscription; authentication is OAuth 2.0 against https://sts.nordpoolgroup.com.'
version: v2
contact:
name: Nord Pool Power Data Services
url: https://www.nordpoolgroup.com/en/services/power-market-data-services/
servers:
- url: https://data-api.nordpoolgroup.com
description: Nord Pool Market Data API (production)
security:
- oauth2: []
tags:
- name: BalanceMarket
paths:
/api/v2/BalanceMarket/ManualFrequencyRestorationReserves/ByAreas:
get:
tags:
- BalanceMarket
summary: Manual Frequency Restoration Reserves
description: "Returns a list of Manual Frequency Restoration Reserves (mFRR) for a date, currency and a list of areas. \n\n### Response field descriptions\n- **status**: Missing if no data exists. Available if data is present\n- **exchangeRate**: exchange rate used to calculate values from EUR. If the currency is EUR, then the exchange rate is 1\n \n**manualFrequencyRestorationReserves**: a list of delivery periods for the day, containing\n - **deliveryStart**: start of delivery period\n - **deliveryEnd**: end of delivery period\n - **acceptedUpBidVolume**: the total volume of orders available for up activation, given in MW\n - **activatedUpVolume**: the volume of activated up regulation, given in MW\n - **acceptedDownBidVolume**: the total volume of orders available for down activation, given in MW\n - **activatedDownBidVolume**: the volume of activated down regulation, given in MW\n - **downPrice**: the price for down regulation. Given in currency/MWh \n - **upPrice**: the price for up regulation. Given in currency/MWh\n - **imbalancePrice**: the overall imbalance price. Usually equal to either upPrice or downPrice depending on what activations are done.\n \nNote that non-EUR prices are just estimates - we do not guarantee (or expect) that TSOs are using the same exchange rates as we do.\n \nData source: **Entso-e Transparency platform. Update frequency and data availability depends on data being reported to Entso-e.**"
externalDocs:
description: Data portal link
url: https://data.nordpoolgroup.com/power-system/manual-frequency-restoration-reserve?deliveryDate=latest&deliveryAreas=NO1&viewMode=All
parameters:
- name: areas
in: query
description: 'Comma-separated list of areas (e.g., NO1, NO2).
Supported: NO1,NO2,NO3,NO4,NO5,SE1,SE2,SE3,SE4,FI,DK1,DK2'
required: true
schema:
minItems: 1
type: string
items:
type: string
- name: currency
in: query
description: 'Currency of returned prices. Restricted to 1 currency per query. Supported: EUR, SEK, NOK, DKK'
required: true
schema:
maxLength: 3
minLength: 3
type: string
- name: date
in: query
description: Delivery date, referring to CET date. Format yyyy-MM-dd, for example 2024-08-15
required: true
schema:
type: string
format: date
responses:
'200':
description: OK
content:
text/plain:
schema:
type: array
items:
$ref: '#/components/schemas/ApiMfrr'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ApiMfrr'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/ApiMfrr'
'401':
description: Unauthorized
content:
text/plain:
schema:
type: string
application/json:
schema:
type: string
text/json:
schema:
type: string
'403':
description: Forbidden
content:
text/plain:
schema:
type: string
application/json:
schema:
type: string
text/json:
schema:
type: string
'400':
description: Bad Request
content:
text/plain:
schema:
$ref: '#/components/schemas/ValidationProblemDetails'
application/json:
schema:
$ref: '#/components/schemas/ValidationProblemDetails'
text/json:
schema:
$ref: '#/components/schemas/ValidationProblemDetails'
/api/v2/BalanceMarket/ManualFrequencyRestorationReserves/Yearly/ByArea:
get:
tags:
- BalanceMarket
summary: Yearly Manual Frequency Restoration Reserves
description: " Returns an annual summary of Manual Frequency Restoration Reserves (mFRR) for a year, currency and one area.\n \n This yearly summary is updated in a rolling manner, and is updated daily.\n \n### Response field descriptions\n \n**yearlySummary**:\n- **acceptedUpBidVolume**: total volume of accepted orders for up regulation for the year, in MWh\n- **activatedUpBidVolume**: total volume of activated up regulation bids for the year, in MWh\n- **acceptedDownBidVolume**: total volume of accepted orders for down regulation for the year, in MWh\n- **activatedDownBidVolume**: total volume of activated down regulation bids for the year, in MWh\n- **downPrice**: average down price for the year, in currency / MWh\n- **upPrice**: average up price for the year, in currency / MWh\n- **imbalancePrice**: average imbalance price for the year, in currency / MWh\n\n**monthlySummaries**: \n- **acceptedUpBidVolume**: total volume of accepted orders for up regulation for the month, in MWh\n- **activatedUpBidVolume**: total volume of activated up regulation bids for the month, in MWh\n- **acceptedDownBidVolume**: total volume of accepted orders for down regulation for the month, in MWh\n- **activatedDownBidVolume**: total volume of activated down regulation bids for the month, in MWh\n- **downPrice**: average down price for the month, in currency / MWh\n- **upPrice**: average up price for the month, in currency / MWh\n- **imbalancePrice**: average imbalance price for the month, in currency / MWh\n- **deliveryDateStartCET**: the earliest date taken into account in this monthly summary\n- **deliveryDateEndCET**: the latest date taken into account in this monthly summary \n\n**dailySummaries**: a list of average values for the day\n- **acceptedUpBidVolume**: total volume of accepted orders for up regulation for the day, in MWh\n- **activatedUpBidVolume**: total volume of activated up regulation bids for the day, in MWh\n- **acceptedDownBidVolume**: total volume of accepted orders for down regulation for the day, in MWh\n- **activatedDownBidVolume**: total volume of activated down regulation bids for the day, in MWh\n- **downPrice**: average down price for the day, in currency / MWh\n- **upPrice**: average up price for the day, in currency / MWh\n- **imbalancePrice**: average imbalance price for the day, in currency / MWh\n- **deliveryDateCET**: the CET delivery date for this summary \n\n**content**: a list of delivery periods, containing\n - **deliveryStart**: start of delivery period\n - **deliveryEnd**: end of delivery period\n - **acceptedUpBidVolume**: the total volume of orders available for up activation, given in MW\n - **activatedUpVolume**: the volume of activated up regulation, given in MW\n - **acceptedDownBidVolume**: the total volume of orders available for down activation, given in MW\n - **activatedDownBidVolume**: the volume of activated down regulation, given in MW\n - **downPrice**: the price for down regulation. Given in currency/MWh \n - **upPrice**: the price for up regulation. Given in currency/MWh\n - **imbalancePrice**: the overall imbalance price. Usually equal to either upPrice or downPrice depending on what activations are done.\n \nNote that non-EUR prices are just estimates - we do not guarantee (or expect) that TSOs are using the same exchange rates as we do.\n \nData source: **Entso-e Transparency platform. Update frequency and data availability depends on data being reported to Entso-e.**"
parameters:
- name: area
in: query
description: 'One area. For example NO1.
Supported: NO1,NO2,NO3,NO4,NO5,SE1,SE2,SE3,SE4,FI,DK1,DK2'
required: true
schema:
minLength: 1
type: string
- name: currency
in: query
description: 'Currency of returned prices. Restricted to 1 currency per query. Supported: EUR, SEK, NOK, DKK'
required: true
schema:
maxLength: 3
minLength: 3
type: string
- name: year
in: query
description: 'Year in CET (format: yyyy, e.g., 2024)'
required: true
schema:
type: integer
format: int32
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/ApiYearlyMfrr'
application/json:
schema:
$ref: '#/components/schemas/ApiYearlyMfrr'
text/json:
schema:
$ref: '#/components/schemas/ApiYearlyMfrr'
'401':
description: Unauthorized
content:
text/plain:
schema:
type: string
application/json:
schema:
type: string
text/json:
schema:
type: string
'403':
description: Forbidden
content:
text/plain:
schema:
type: string
application/json:
schema:
type: string
text/json:
schema:
type: string
'400':
description: Bad Request
content:
text/plain:
schema:
$ref: '#/components/schemas/ValidationProblemDetails'
application/json:
schema:
$ref: '#/components/schemas/ValidationProblemDetails'
text/json:
schema:
$ref: '#/components/schemas/ValidationProblemDetails'
components:
schemas:
MfrrMonthlySummary:
type: object
properties:
acceptedUpBidVolume:
type:
- number
- 'null'
format: double
acceptedDownBidVolume:
type:
- number
- 'null'
format: double
activatedUpVolume:
type:
- number
- 'null'
format: double
activatedDownVolume:
type:
- number
- 'null'
format: double
downPrice:
type:
- number
- 'null'
format: double
upPrice:
type:
- number
- 'null'
format: double
imbalancePrice:
type:
- number
- 'null'
format: double
deliveryDateStartCET:
type: string
format: date
deliveryDateEndCET:
type: string
format: date
additionalProperties: false
ApiAvailableStatus:
enum:
- Missing
- Available
type: string
ApiYearlyMfrr:
required:
- currency
- deliveryArea
type: object
properties:
year:
type: integer
format: int32
deliveryArea:
type:
- string
- 'null'
currency:
type:
- string
- 'null'
status:
$ref: '#/components/schemas/ApiAvailableStatus'
updatedAt:
type: string
format: date-time
unit:
type:
- string
- 'null'
readOnly: true
totalVolumeUnit:
type:
- string
- 'null'
readOnly: true
dailySummaries:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/MfrrDailySummary'
monthlySummaries:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/MfrrMonthlySummary'
yearlySummary:
$ref: '#/components/schemas/MfrrEntry'
content:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/YearlyMfrrEntry'
additionalProperties: false
ApiMfrrEntry:
type: object
properties:
deliveryStart:
type: string
format: date-time
deliveryEnd:
type: string
format: date-time
acceptedUpBidVolume:
type:
- number
- 'null'
format: double
acceptedDownBidVolume:
type:
- number
- 'null'
format: double
activatedUpVolume:
type:
- number
- 'null'
format: double
activatedDownVolume:
type:
- number
- 'null'
format: double
downPrice:
type:
- number
- 'null'
format: double
upPrice:
type:
- number
- 'null'
format: double
imbalancePrice:
type:
- number
- 'null'
format: double
additionalProperties: false
ValidationProblemDetails:
type: object
properties:
type:
type:
- string
- 'null'
title:
type:
- string
- 'null'
status:
type:
- integer
- 'null'
format: int32
detail:
type:
- string
- 'null'
instance:
type:
- string
- 'null'
errors:
type:
- object
- 'null'
additionalProperties:
type: array
items:
type: string
additionalProperties: {}
MfrrEntry:
type: object
properties:
acceptedUpBidVolume:
type:
- number
- 'null'
format: double
acceptedDownBidVolume:
type:
- number
- 'null'
format: double
activatedUpVolume:
type:
- number
- 'null'
format: double
activatedDownVolume:
type:
- number
- 'null'
format: double
downPrice:
type:
- number
- 'null'
format: double
upPrice:
type:
- number
- 'null'
format: double
imbalancePrice:
type:
- number
- 'null'
format: double
additionalProperties: false
MfrrDailySummary:
type: object
properties:
acceptedUpBidVolume:
type:
- number
- 'null'
format: double
acceptedDownBidVolume:
type:
- number
- 'null'
format: double
activatedUpVolume:
type:
- number
- 'null'
format: double
activatedDownVolume:
type:
- number
- 'null'
format: double
downPrice:
type:
- number
- 'null'
format: double
upPrice:
type:
- number
- 'null'
format: double
imbalancePrice:
type:
- number
- 'null'
format: double
deliveryDateCET:
type: string
format: date
additionalProperties: false
YearlyMfrrEntry:
type: object
properties:
acceptedUpBidVolume:
type:
- number
- 'null'
format: double
acceptedDownBidVolume:
type:
- number
- 'null'
format: double
activatedUpVolume:
type:
- number
- 'null'
format: double
activatedDownVolume:
type:
- number
- 'null'
format: double
downPrice:
type:
- number
- 'null'
format: double
upPrice:
type:
- number
- 'null'
format: double
imbalancePrice:
type:
- number
- 'null'
format: double
deliveryStart:
type: string
format: date-time
deliveryEnd:
type: string
format: date-time
additionalProperties: false
ApiMfrr:
required:
- currency
type: object
properties:
deliveryDateCET:
type: string
format: date
updatedAt:
type: string
format: date-time
deliveryArea:
type:
- string
- 'null'
status:
$ref: '#/components/schemas/ApiAvailableStatus'
currency:
type:
- string
- 'null'
exchangeRate:
type:
- number
- 'null'
format: double
manualFrequencyRestorationReserves:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ApiMfrrEntry'
additionalProperties: false
securitySchemes:
oauth2:
type: oauth2
description: Oauth2 Authentication
flows:
authorizationCode:
authorizationUrl: https://sts.nordpoolgroup.com/connect/authorize
tokenUrl: https://sts.nordpoolgroup.com/connect/token
scopes:
marketdata_api: '...'
externalDocs:
description: Nord Pool Developer Portal
url: https://developers.nordpoolgroup.com/