openapi: 3.0.3 info: title: Nord Pool Data Portal API (Public) Auction BalanceMarket API version: '1.0' description: The unauthenticated JSON API behind the Nord Pool Data Portal (data.nordpoolgroup.com), where Nord Pool publishes day-ahead electricity prices for the Nordic, Baltic, CWE, and UK bidding areas. These endpoints return the same day-ahead auction results shown on the public website, in 15-minute Market Time Unit resolution, and are widely used by open-source integrations such as Home Assistant. IMPORTANT - this API is not part of Nord Pool's officially documented, subscription-backed developer offering. It is not covered by an SLA or the API General Terms, and Nord Pool may change or restrict it at any time. The two operations below were observed live and verified returning data on 2026-07-11; request and response shapes are modeled from those observed responses rather than from official reference documentation. For supported programmatic access, use the Nord Pool Market Data API (data-api.nordpoolgroup.com) with a Power Data Services subscription. contact: name: Nord Pool url: https://data.nordpoolgroup.com/ servers: - url: https://dataportal-api.nordpoolgroup.com description: Nord Pool Data Portal backend (public, unauthenticated) 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: ApiYearlyMfrr: required: - currency - deliveryArea type: object properties: year: type: integer format: int32 deliveryArea: type: string nullable: true currency: type: string nullable: true status: $ref: '#/components/schemas/ApiAvailableStatus' updatedAt: type: string format: date-time unit: type: string nullable: true readOnly: true totalVolumeUnit: type: string nullable: true readOnly: true dailySummaries: type: array items: $ref: '#/components/schemas/MfrrDailySummary' nullable: true monthlySummaries: type: array items: $ref: '#/components/schemas/MfrrMonthlySummary' nullable: true yearlySummary: $ref: '#/components/schemas/MfrrEntry' content: type: array items: $ref: '#/components/schemas/YearlyMfrrEntry' nullable: true additionalProperties: false ApiAvailableStatus: enum: - Missing - Available type: string MfrrDailySummary: type: object properties: acceptedUpBidVolume: type: number format: double nullable: true acceptedDownBidVolume: type: number format: double nullable: true activatedUpVolume: type: number format: double nullable: true activatedDownVolume: type: number format: double nullable: true downPrice: type: number format: double nullable: true upPrice: type: number format: double nullable: true imbalancePrice: type: number format: double nullable: true deliveryDateCET: type: string format: date additionalProperties: false ValidationProblemDetails: type: object properties: type: type: string nullable: true title: type: string nullable: true status: type: integer format: int32 nullable: true detail: type: string nullable: true instance: type: string nullable: true errors: type: object additionalProperties: type: array items: type: string nullable: true additionalProperties: {} MfrrEntry: type: object properties: acceptedUpBidVolume: type: number format: double nullable: true acceptedDownBidVolume: type: number format: double nullable: true activatedUpVolume: type: number format: double nullable: true activatedDownVolume: type: number format: double nullable: true downPrice: type: number format: double nullable: true upPrice: type: number format: double nullable: true imbalancePrice: type: number format: double nullable: true additionalProperties: false ApiMfrr: required: - currency type: object properties: deliveryDateCET: type: string format: date updatedAt: type: string format: date-time deliveryArea: type: string nullable: true status: $ref: '#/components/schemas/ApiAvailableStatus' currency: type: string nullable: true exchangeRate: type: number format: double nullable: true manualFrequencyRestorationReserves: type: array items: $ref: '#/components/schemas/ApiMfrrEntry' nullable: true additionalProperties: false YearlyMfrrEntry: type: object properties: acceptedUpBidVolume: type: number format: double nullable: true acceptedDownBidVolume: type: number format: double nullable: true activatedUpVolume: type: number format: double nullable: true activatedDownVolume: type: number format: double nullable: true downPrice: type: number format: double nullable: true upPrice: type: number format: double nullable: true imbalancePrice: type: number format: double nullable: true deliveryStart: type: string format: date-time deliveryEnd: type: string format: date-time additionalProperties: false MfrrMonthlySummary: type: object properties: acceptedUpBidVolume: type: number format: double nullable: true acceptedDownBidVolume: type: number format: double nullable: true activatedUpVolume: type: number format: double nullable: true activatedDownVolume: type: number format: double nullable: true downPrice: type: number format: double nullable: true upPrice: type: number format: double nullable: true imbalancePrice: type: number format: double nullable: true deliveryDateStartCET: type: string format: date deliveryDateEndCET: type: string format: date additionalProperties: false ApiMfrrEntry: type: object properties: deliveryStart: type: string format: date-time deliveryEnd: type: string format: date-time acceptedUpBidVolume: type: number format: double nullable: true acceptedDownBidVolume: type: number format: double nullable: true activatedUpVolume: type: number format: double nullable: true activatedDownVolume: type: number format: double nullable: true downPrice: type: number format: double nullable: true upPrice: type: number format: double nullable: true imbalancePrice: type: number format: double nullable: true additionalProperties: false externalDocs: description: Nord Pool Data Portal (public day-ahead prices site) url: https://data.nordpoolgroup.com/