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