Nord Pool BalanceMarket API

The BalanceMarket API from Nord Pool — 2 operation(s) for balancemarket.

OpenAPI Specification

nordpool-balancemarket-api-openapi.yml Raw ↑
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/