ENTSO-E Day-Ahead Prices API

Wholesale day-ahead electricity prices (Transparency Regulation article 12.1.D) for every European bidding zone, per market time unit in currency per MWh - the reference price behind consumer kWh rates and dynamic tariffs. Query with documentType=A44 and the bidding zone EIC code in both in_Domain and out_Domain; up to one year per request, returned as a Publication_MarketDocument.

OpenAPI Specification

entso-e-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: ENTSO-E Transparency Platform RESTful API
  description: >-
    The ENTSO-E Transparency Platform RESTful API provides programmatic access
    to the central European electricity market dataset published under EU
    Regulation 543/2013 - day-ahead prices, system load, generation,
    transmission, balancing, outages, and congestion management data for
    bidding zones, control areas, and borders across Europe. The API is
    deliberately NOT a resource-per-path REST design: it exposes a single
    endpoint (GET or POST /api) and the data item you receive is selected by
    coded query parameters - documentType (e.g. A44 = price document, A65 =
    system total load, A75 = actual generation per type, A85 = imbalance
    prices), processType (e.g. A01 = day ahead, A16 = realised), psrType
    (production types B01-B24), businessType, and domain parameters populated
    with EIC area codes (e.g. 10YCZ-CEPS-----N). Responses are XML market
    documents defined by the IEC 62325-451 standards (Publication_MarketDocument,
    GL_MarketDocument, Balancing_MarketDocument, TransmissionNetwork_MarketDocument);
    a few data items (imbalance prices and volumes, outages) return a ZIP archive
    of XML documents. All timestamps are UTC. Rejections and empty results return
    an Acknowledgement_MarketDocument with a Reason code (999 = no matching data
    found). Access is free - register on the Transparency Platform, request
    Restful API access from transparency@entsoe.eu, and generate a security
    token under My Account Settings.


    Common data-item recipes (mandatory parameters beyond securityToken and
    periodStart/periodEnd):

    - Day-ahead prices [12.1.D] - documentType=A44, in_Domain and out_Domain
    set to the SAME bidding-zone EIC code. One-year range limit.

    - Actual total load [6.1.A] - documentType=A65, processType=A16,
    outBiddingZone_Domain. Day-ahead load forecast [6.1.B] uses processType=A01;
    week/month/year-ahead use A31/A32/A33.

    - Actual generation per production type [16.1.B&C] - documentType=A75,
    processType=A16, in_Domain; optional psrType filters to one production type.

    - Installed generation capacity aggregated [14.1.A] - documentType=A68,
    processType=A33, in_Domain.

    - Wind and solar forecast [14.1.D] - documentType=A69, processType=A01
    (or A40 intraday), in_Domain.

    - Cross-border physical flows [12.1.G] - documentType=A11, in_Domain,
    out_Domain (one direction per request; swap domains for the other).

    - Forecasted transfer capacities [11.1.A] - documentType=A61,
    contract_MarketAgreement.Type (A01 daily - A04 yearly), in_Domain, out_Domain.

    - Accepted aggregated offers [17.1.D] - documentType=A82,
    controlArea_Domain; optional businessType (A95 FCR, A96 FRR, A97
    replacement reserve, A98 interconnector trading).

    - Activated balancing energy [17.1.E] - documentType=A83, controlArea_Domain.

    - Imbalance prices [17.1.G] - documentType=A85, controlArea_Domain
    (returns ZIP of XML).

    - Total imbalance volumes [17.1.H] - documentType=A86, controlArea_Domain
    (returns ZIP of XML).

    - Contracted reserves [17.1.B] / prices of contracted reserves [17.1.C] -
    documentType=A81 / A89, type_MarketAgreement.Type, controlArea_Domain.
  version: '1.0'
  contact:
    name: ENTSO-E Transparency Platform Helpdesk
    email: transparency@entsoe.eu
    url: https://transparency.entsoe.eu/
  termsOfService: https://transparency.entsoe.eu/content/static_content/Static%20content/terms%20and%20conditions/terms%20and%20conditions.html
externalDocs:
  description: Transparency Platform RESTful API user guide (knowledge base)
  url: https://transparencyplatform.zendesk.com/hc/en-us
servers:
  - url: https://web-api.tp.entsoe.eu
    description: Transparency Platform production web API
security:
  - securityToken: []
tags:
  - name: Market Data Query
    description: >-
      Single query endpoint for every Transparency Platform data item. The
      documentType, processType, and domain parameters select the dataset.
paths:
  /api:
    get:
      operationId: queryMarketDocument
      tags:
        - Market Data Query
      summary: Query Transparency Platform data (GET)
      description: >-
        Retrieves one Transparency Platform data item as an IEC 62325 XML
        market document (or ZIP of XML for imbalance and outage items). The
        combination of documentType, processType, businessType, and domain
        parameters selects the data item; periodStart/periodEnd (or
        timeInterval) bound the query window. Parameter names are
        case-sensitive and must start lowercase on GET. Standard (table) data
        items are limited to a one-year range per request; document-based
        (curve) items are limited to 100 documents per request (200 for
        outages), with an offset parameter available on some items to page up
        to 4,900 documents. Exceeding a limit, omitting a mandatory parameter,
        or matching no data returns an Acknowledgement_MarketDocument with the
        reason.
      parameters:
        - name: securityToken
          in: query
          required: true
          description: >-
            Personal API token. Free - register on the Transparency Platform,
            email transparency@entsoe.eu with subject "Restful API access",
            then generate the token under My Account Settings. Missing or
            invalid tokens receive HTTP 401.
          schema:
            type: string
        - name: documentType
          in: query
          required: true
          description: >-
            Coded document type selecting the data item family. Key codes:
            A44 price document (day-ahead prices), A65 system total load,
            A75 actual generation per type, A73 actual generation (per unit),
            A74 wind and solar generation, A71 generation forecast, A69 wind
            and solar forecast, A68 installed generation per type, A72
            reservoir filling information, A70 load forecast margin, A11
            aggregated energy data report (physical flows), A61 estimated net
            transfer capacity, A09 finalised schedule (commercial exchanges),
            A31 agreed capacity, A25 allocation result document, A26 capacity
            document, A81 contracted reserves, A82 accepted offers, A83
            activated balancing quantities, A84 activated balancing prices,
            A85 imbalance prices, A86 imbalance volume, A87 financial
            situation, A88 cross border balancing, A89 contracted reserve
            prices, A15 acquiring system operator reserve schedule (procured
            balancing capacity), A76-A80 unavailability (outage) documents.
          schema:
            type: string
            enum: [A09, A11, A15, A24, A25, A26, A31, A37, A38, A44, A61, A63,
                   A65, A68, A69, A70, A71, A72, A73, A74, A75, A76, A77, A78,
                   A79, A80, A81, A82, A83, A84, A85, A86, A87, A88, A89, A90,
                   A91, A92, A93, A94, A95, B11, B17, B45]
          example: A44
        - name: processType
          in: query
          required: false
          description: >-
            Process the data belongs to. A01 day ahead, A02 intra day
            incremental, A16 realised, A18 intraday total, A31 week ahead,
            A32 month ahead, A33 year ahead, A39 synchronisation process,
            A40 intraday process, A46 replacement reserve, A47 manual
            frequency restoration reserve, A51 automatic frequency restoration
            reserve, A52 frequency containment reserve, A56 frequency
            restoration reserve, A60 scheduled activation mFRR, A61 direct
            activation mFRR, A67 central selection aFRR, A68 local selection
            aFRR.
          schema:
            type: string
            enum: [A01, A02, A16, A18, A31, A32, A33, A39, A40, A46, A47,
                   A51, A52, A56, A60, A61, A67, A68]
          example: A16
        - name: businessType
          in: query
          required: false
          description: >-
            Business type filter used mainly by balancing and outage items,
            e.g. A95 frequency containment reserve, A96 automatic frequency
            restoration reserve, A97 manual frequency restoration reserve,
            A98 replacement reserve, A53 planned maintenance, A54 unplanned
            outage, A19 balance energy deviation.
          schema:
            type: string
          example: A96
        - name: psrType
          in: query
          required: false
          description: >-
            Power system resource (production) type filter. B01 biomass, B02
            fossil brown coal/lignite, B04 fossil gas, B05 fossil hard coal,
            B09 geothermal, B10 hydro pumped storage, B11 hydro run-of-river,
            B12 hydro water reservoir, B14 nuclear, B16 solar, B17 waste, B18
            wind offshore, B19 wind onshore, B20 other, plus A03 mixed, A04
            generation, A05 load.
          schema:
            type: string
          example: B16
        - name: in_Domain
          in: query
          required: false
          description: >-
            EIC code of the in area (bidding zone, control area, or border
            end). For day-ahead prices (A44) in_Domain and out_Domain must be
            the same bidding-zone EIC code, e.g. 10YCZ-CEPS-----N.
          schema:
            type: string
          example: 10YCZ-CEPS-----N
        - name: out_Domain
          in: query
          required: false
          description: >-
            EIC code of the out area. For border data items (physical flows,
            transfer capacities, schedules) the API returns one direction per
            request; swap in_Domain and out_Domain for the other direction.
          schema:
            type: string
          example: 10YSK-SEPS-----K
        - name: outBiddingZone_Domain
          in: query
          required: false
          description: EIC code of the bidding zone for load data items (documentType A65, A70).
          schema:
            type: string
          example: 10YCZ-CEPS-----N
        - name: biddingZone_Domain
          in: query
          required: false
          description: EIC code of the bidding zone, used by outage and some generation items.
          schema:
            type: string
        - name: controlArea_Domain
          in: query
          required: false
          description: >-
            EIC code of the control / market balance area for balancing data
            items (documentType A81-A89).
          schema:
            type: string
          example: 10YCZ-CEPS-----N
        - name: area_Domain
          in: query
          required: false
          description: EIC code of the scheduling area, used by procured balancing capacity (A15).
          schema:
            type: string
        - name: acquiring_Domain
          in: query
          required: false
          description: EIC code of the acquiring area for cross-border balancing (A88).
          schema:
            type: string
        - name: connecting_Domain
          in: query
          required: false
          description: EIC code of the connecting area for cross-border balancing (A88).
          schema:
            type: string
        - name: periodStart
          in: query
          required: false
          description: >-
            Start of the query window in yyyyMMddHHmm format, interpreted as
            UTC (e.g. 201512312300). Use together with periodEnd; cannot be
            combined with timeInterval.
          schema:
            type: string
            pattern: '^[0-9]{12}$'
          example: '202506302200'
        - name: periodEnd
          in: query
          required: false
          description: >-
            End of the query window in yyyyMMddHHmm format, interpreted as
            UTC. Use together with periodStart; cannot be combined with
            timeInterval.
          schema:
            type: string
            pattern: '^[0-9]{12}$'
          example: '202507012200'
        - name: timeInterval
          in: query
          required: false
          description: >-
            ISO 8601 interval alternative to periodStart/periodEnd, e.g.
            2015-12-31T23:00Z/2016-12-31T23:00Z. Cannot be combined with
            periodStart/periodEnd.
          schema:
            type: string
        - name: contract_MarketAgreement.Type
          in: query
          required: false
          description: >-
            Contract type for capacity allocation items (A61, A31, A09 and
            others). A01 daily, A02 weekly, A03 monthly, A04 yearly, A05
            total, A06 long term, A07 intraday.
          schema:
            type: string
            enum: [A01, A02, A03, A04, A05, A06, A07]
          example: A01
        - name: type_MarketAgreement.Type
          in: query
          required: false
          description: >-
            Contract type for balancing reserve items (A81, A89). A01 daily,
            A02 weekly, A03 monthly, A04 yearly, A06 long term, A13 hourly.
          schema:
            type: string
            enum: [A01, A02, A03, A04, A05, A06, A07, A13]
        - name: auction.Type
          in: query
          required: false
          description: Auction type for capacity allocation items. A01 implicit, A02 explicit.
          schema:
            type: string
            enum: [A01, A02]
        - name: auction.Category
          in: query
          required: false
          description: Auction category. A01 base, A02 peak, A03 off peak, A04 hourly.
          schema:
            type: string
            enum: [A01, A02, A03, A04]
        - name: classificationSequence_AttributeInstanceComponent.Position
          in: query
          required: false
          description: Classification sequence position for explicit allocation results.
          schema:
            type: integer
        - name: registeredResource
          in: query
          required: false
          description: EIC code of a specific generation unit or transmission asset.
          schema:
            type: string
        - name: docStatus
          in: query
          required: false
          description: >-
            Document status filter, mainly for outages. A01 intermediate, A02
            final, A05 active, A09 cancelled, A13 withdrawn, X01 estimated.
          schema:
            type: string
            enum: [A01, A02, A05, A09, A13, X01]
        - name: standard_MarketProduct
          in: query
          required: false
          description: Standard market product filter for balancing energy items (A01 standard, A02 specific, A03 integrated process, A04 local).
          schema:
            type: string
        - name: original_MarketProduct
          in: query
          required: false
          description: Original market product filter for balancing energy items.
          schema:
            type: string
        - name: direction
          in: query
          required: false
          description: Flow direction filter for balancing items. A01 up, A02 down, A03 symmetric.
          schema:
            type: string
            enum: [A01, A02, A03]
        - name: offset
          in: query
          required: false
          description: >-
            Paging offset for document-limited items (outages, procured
            balancing capacity, contracted reserves). Range 0-4800; offset=n
            returns documents n+1 through n+100 (n+200 for outages), so at
            most 4,900 documents are reachable per query.
          schema:
            type: integer
            minimum: 0
            maximum: 4800
        - name: periodStartUpdate
          in: query
          required: false
          description: Start of the publication/update window (yyyyMMddHHmm) for outage items; cannot be combined with timeIntervalUpdate.
          schema:
            type: string
            pattern: '^[0-9]{12}$'
        - name: periodEndUpdate
          in: query
          required: false
          description: End of the publication/update window (yyyyMMddHHmm) for outage items; cannot be combined with timeIntervalUpdate.
          schema:
            type: string
            pattern: '^[0-9]{12}$'
        - name: timeIntervalUpdate
          in: query
          required: false
          description: ISO 8601 publication/update interval for outage items; cannot be combined with periodStartUpdate/periodEndUpdate.
          schema:
            type: string
      responses:
        '200':
          description: >-
            Matching data as an IEC 62325 XML market document. Load and
            generation items return a GL_MarketDocument; prices, flows,
            capacities, and schedules return a Publication_MarketDocument;
            balancing items return a Balancing_MarketDocument; grid
            unavailability returns a TransmissionNetwork_MarketDocument.
            Imbalance prices (A85), imbalance volumes (A86), and outage
            documents are delivered as a ZIP archive of XML files. Note that
            some rejections (including "no matching data found", Reason code
            999) are returned as an Acknowledgement_MarketDocument.
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/MarketDocument'
            application/zip:
              schema:
                type: string
                format: binary
                description: ZIP archive of IEC 62325 XML market documents.
        '400':
          description: >-
            Request rejected - missing or duplicate mandatory parameters,
            wrong parameter case, range over the one-year limit, or more than
            the allowed number of matching documents. Body is an
            Acknowledgement_MarketDocument stating the reason.
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/AcknowledgementMarketDocument'
        '401':
          description: Missing or invalid securityToken (including suspended accounts).
        '429':
          description: >-
            Too many requests - more than 400 requests per minute from one IP
            address or security token results in a 10-minute ban with the
            message "Max allowed requests per minute from each unique IP is
            max up to 400 only".
    post:
      operationId: queryMarketDocumentPost
      tags:
        - Market Data Query
      summary: Query Transparency Platform data (POST)
      description: >-
        Same query capability as GET, expressed as an IEC 62325-451-5
        StatusRequest_MarketDocument XML body in which each query parameter is
        an AttributeInstanceComponent (attribute/attributeValue pair, with
        parameter names capitalized, e.g. DocumentType, In_Domain,
        TimeInterval). The security token is passed in the SECURITY_TOKEN
        request header instead of the query string.
      security: []
      parameters:
        - name: SECURITY_TOKEN
          in: header
          required: true
          description: Personal API token (POST method equivalent of the securityToken query parameter).
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/StatusRequestMarketDocument'
      responses:
        '200':
          description: Matching data as an IEC 62325 XML market document or ZIP archive (see GET).
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/MarketDocument'
            application/zip:
              schema:
                type: string
                format: binary
        '400':
          description: Request rejected; body is an Acknowledgement_MarketDocument stating the reason.
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/AcknowledgementMarketDocument'
        '401':
          description: Missing or invalid SECURITY_TOKEN header.
        '429':
          description: More than 400 requests per minute from one IP address or security token.
components:
  securitySchemes:
    securityToken:
      type: apiKey
      in: query
      name: securityToken
      description: >-
        Free personal token issued after registering on the Transparency
        Platform and requesting Restful API access from transparency@entsoe.eu.
  schemas:
    MarketDocument:
      type: object
      description: >-
        An IEC 62325-451 market document. The concrete root element depends on
        the data item queried - Publication_MarketDocument (prices, flows,
        capacities, schedules; namespace urn:iec62325.351:tc57wg16:451-3),
        GL_MarketDocument (load and generation; 451-6 generation-load),
        Balancing_MarketDocument (balancing; 451-6 balancing),
        TransmissionNetwork_MarketDocument, or Unavailability_MarketDocument
        (outages, inside ZIP). All share the mRID/type/sender/receiver/
        period/TimeSeries structure below; TimeSeries Points carry
        position/quantity pairs, or position/price.amount (EUR per MWh) for
        price documents.
      properties:
        mRID:
          type: string
          description: Unique identifier of the returned document.
        revisionNumber:
          type: integer
        type:
          type: string
          description: Document type code (mirrors the documentType query parameter, e.g. A44).
        process.processType:
          type: string
          description: Process type code (e.g. A01 day ahead, A16 realised).
        sender_MarketParticipant.mRID:
          type: string
          description: EIC code of the sender (the Transparency Platform, 10X1001A1001A450).
        receiver_MarketParticipant.mRID:
          type: string
        createdDateTime:
          type: string
          format: date-time
        period.timeInterval:
          type: object
          description: Overall time interval of the returned data (UTC).
          properties:
            start:
              type: string
            end:
              type: string
        TimeSeries:
          type: array
          description: >-
            One or more time series. Each series identifies the area(s) via
            in_Domain.mRID / out_Domain.mRID / outBiddingZone_Domain.mRID,
            the measure unit (e.g. MAW, MWH, EUR), currency for price
            documents, the market time unit resolution (e.g. PT15M, PT60M),
            and a Period containing Point elements.
          items:
            type: object
            properties:
              mRID:
                type: string
              businessType:
                type: string
              curveType:
                type: string
                description: A01 for all data items except production/generation unit outages (A03).
              Period:
                type: object
                properties:
                  timeInterval:
                    type: object
                    properties:
                      start:
                        type: string
                      end:
                        type: string
                  resolution:
                    type: string
                    description: Market time unit resolution, e.g. PT15M or PT60M.
                  Point:
                    type: array
                    items:
                      type: object
                      properties:
                        position:
                          type: integer
                        quantity:
                          type: number
                          description: Quantity value (MW/MWh items).
                        price.amount:
                          type: number
                          description: Price value for price documents (e.g. day-ahead price in currency per MWh).
    AcknowledgementMarketDocument:
      type: object
      description: >-
        IEC 62325-451-1 acknowledgement document returned when a request is
        rejected or matches no data. Reason code 999 with text "No matching
        data found" indicates an empty result; other reasons include missing
        mandatory parameters, ranges over the one-year limit, and document
        counts over the 100/200-document limit.
      properties:
        mRID:
          type: string
        createdDateTime:
          type: string
          format: date-time
        Reason:
          type: object
          properties:
            code:
              type: string
              example: '999'
            text:
              type: string
              example: No matching data found
    StatusRequestMarketDocument:
      type: object
      description: >-
        IEC 62325-451-5 status request document (namespace
        urn:iec62325.351:tc57wg16:451-5:statusrequestdocument:4:0) used as the
        POST body. type is A59; each query parameter is expressed as an
        AttributeInstanceComponent with capitalized attribute names
        (DocumentType, ProcessType, In_Domain, Out_Domain, TimeInterval, ...).
      properties:
        mRID:
          type: string
          example: SampleCallToRestfulApi
        type:
          type: string
          example: A59
        sender_MarketParticipant.mRID:
          type: string
          example: 10X1001A1001A450
        receiver_MarketParticipant.mRID:
          type: string
          example: 10X1001A1001A450
        createdDateTime:
          type: string
          format: date-time
        AttributeInstanceComponent:
          type: array
          items:
            type: object
            properties:
              attribute:
                type: string
                example: DocumentType
              attributeValue:
                type: string
                example: A44