{"openapi":"3.1.0","info":{"title":"Rebase Grid API","version":"1","description":"REST API for European power system data: production, consumption, prices, exchanges, capacities\nand balancing, collected from TSOs, exchanges and transparency platforms. Every value is stored\nas the provider published it, with the time it became known and every later version.\n\nThe guides at grid.rebase.energy/docs/v1/ explain entities, timeseries names, providers and\nreading values; this document is the endpoint contract. Before scripting calls, read\ngrid.rebase.energy/docs/v1/guides/agents/#calling-rules: one values call reads one timeseries\nand `POST /timeseries/values` reads up to 2,000 in one request (5 without a key), 240 requests\nper minute per key, at most 100,000 points per values request, and the paging rules.\n\nNo API key is needed: every endpoint but `/me` answers a request without one, at 30 requests\nper minute per IP address (grid.rebase.energy/docs/v1/guides/open-access/). A free key raises\nthe limit to 240 per minute.\n"},"tags":[{"name":"Discover","description":"Find an entity, and the names of the timeseries on it."},{"name":"Describe","description":"What a timeseries measures, and the metadata of each provider that publishes it."},{"name":"Read","description":"The values of one timeseries from one provider, in the version selected by `as_of`."},{"name":"Account","description":"The owner of an API key, and the deployed build."}],"servers":[{"url":"https://grid.rebase.energy/api/v1"}],"security":[{"apiKey":[]},{}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional. The Grid API key, also accepted as `?api_key=`; without it a request is answered at 30 per minute per IP address. How to get a key: grid.rebase.energy/docs/v1/guides/authentication/. The key is in the API tab of the grid map."}},"parameters":{"entity":{"name":"entity","in":"path","required":true,"description":"The entity id, e.g. `SE-SE3`, `Sweden`, `sync:NSA`, `ca:DE-Amprion`, `bnd:GB-B1`, `sub:Blyth`, `border:FI~SE-SE3`, `icx:BritNed`, or a plant, unit or portfolio: `plant:11WD4SAEK2HS---S`, `unit:…`, `portfolio:…` — the key, or the name after the kind prefix (`plant:Säckingen hydroelectric plant`). A name shared by several records is 404 listing their ids. See the Entities guide for every kind.","schema":{"type":"string"}},"name":{"name":"name","in":"path","required":true,"description":"The quantity, `category.sub_category.definition[.component]`, never with the provider suffix.","schema":{"type":"string","pattern":"^[a-z0-9_]+(\\.[a-z0-9_]+){2,}$"}}},"schemas":{"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","enum":["not_found","bad_request","unauthorized","rate_limited","not_implemented","platform_unavailable","index_warming"]},"message":{"type":"string"},"param":{"type":"string","description":"On bad_request, the offending parameter when there is one."},"anonymous":{"type":"boolean","description":"On rate_limited, true when the request carried no API key."},"limit_rpm":{"type":"integer","description":"On rate_limited without a key, the requests per minute an address may make."},"key_limit_rpm":{"type":"integer","description":"On rate_limited without a key, the requests per minute a free key may make."},"retry_after_s":{"type":"integer","description":"On rate_limited without a key, seconds to wait before repeating the request."},"sign_up":{"type":"string","description":"Without a key, the form that requests a free one."},"docs":{"type":"string","description":"Without a key, the documentation."},"info":{"type":"string","description":"On rate_limited without a key, the Grid API product page."},"reason":{"type":"string","description":"On not_found, `index_stale` when the series index may simply not have caught up with a new series."},"closest":{"type":"array","items":{"type":"string"},"description":"On not_found, the three closest ids or names."},"providers":{"type":"array","items":{"type":"string"},"description":"On bad_request for a missing/unknown provider, the providers available."}}},"DataType":{"type":"string","enum":["actual","forecast","capacity","price","schedule","other"],"description":"Derived from the category and sub-category of the name."},"TimeseriesSummary":{"type":"object","required":["total","providers","categories"],"properties":{"total":{"type":"integer"},"providers":{"type":"object","additionalProperties":{"type":"integer"}},"categories":{"type":"object","additionalProperties":{"type":"integer"}}}},"TreeEntity":{"type":"object","required":["id","kind","timeseries"],"properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/Kind"},"name":{"type":"string","description":"Only when it differs from id."},"timeseries":{"type":"integer","description":"Series on this entity itself (not descendants)."},"children":{"type":"array","items":{"$ref":"#/components/schemas/TreeEntity"}}}},"Kind":{"type":"string","enum":["sync_area","country","price_zone","area","aggregate","boundary","substation","plant","unit","portfolio","border","interconnector"]},"EntityRef":{"type":"object","required":["id","kind"],"properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/Kind"},"timeseries":{"type":"integer"}}},"KindSummary":{"type":"object","description":"One line per listed kind under a grid entity (plants, units, portfolios), when its count is not zero: how much sits under the entity before any list is paged. Counts descend the tree (Sweden includes SE-SE1…SE4).","required":["kind","count","capacity_mw","with_timeseries","list"],"properties":{"kind":{"type":"string","enum":["plant","unit","portfolio"]},"count":{"type":"integer"},"capacity_mw":{"type":"number"},"with_timeseries":{"type":"integer","description":"How many of them hold at least one timeseries."},"list":{"type":"string","description":"Path of the paged list."}}},"Location":{"type":"object","required":["latitude","longitude","accuracy"],"properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"accuracy":{"type":"string","enum":["exact","approximate","placeholder","unknown"],"description":"`exact`: the plant's own point (a register coordinate, or a researched point at site precision). `approximate`: municipality precision, or a matched point rated approximate by its source. `placeholder`: a stand-in the source uses when it has no position — a country or municipality centroid shared by five or more plants; do not map it as the plant's position. `unknown`: no rating."}}},"Provider":{"type":"object","description":"The register the record comes from, and the record's id there.","required":["name","id"],"properties":{"name":{"type":"string","description":"entsoe, bmrs, gem, mastr, epias, vbk, energistyrelsen, georisques, …"},"id":{"type":["string","null"]},"registry_name":{"type":"string"}}},"PlantCard":{"type":"object","description":"A plant wherever one appears: a unit's parent, a portfolio's child line, a paged list item.","required":["id","kind","name","parent","timeseries","units"],"properties":{"id":{"type":"string"},"kind":{"type":"string","const":"plant"},"name":{"type":"string","description":"The register's name."},"common_name":{"type":"string","description":"The name people use (GEM), when the register's differs."},"parent":{"type":"string","description":"The zone the plant sits in."},"technology":{"type":"string"},"sub_technology":{"type":"string","description":"pumped_storage, reservoir, run_of_river; onshore, offshore; …"},"psr_type":{"type":"string","description":"ENTSO-E production type code, joins to the zone's per-type series."},"capacity_mw":{"type":"number"},"location":{"$ref":"#/components/schemas/Location"},"portfolio":{"type":"string","description":"The portfolio id, when the plant belongs to one."},"provider":{"$ref":"#/components/schemas/Provider"},"units":{"type":"integer","description":"Units under the plant."},"timeseries":{"type":"integer","description":"Series on the plant itself (not its units)."}}},"UnitCard":{"type":"object","description":"A unit has no location of its own: it sits at its plant's `location`, and the plant's `accuracy` applies to it.","required":["id","kind","name","parent","timeseries"],"properties":{"id":{"type":"string"},"kind":{"type":"string","const":"unit"},"name":{"type":"string"},"parent":{"type":"string","description":"The plant id."},"type":{"type":"string","description":"wind, solar, hydro, gas, battery, …"},"production_type":{"type":"string","description":"pv, onshore, combined_cycle, lithium_ion, …"},"psr_type":{"type":"string"},"capacity_kw":{"type":"integer"},"energy_mwh":{"type":"number","description":"Storage units."},"fuel":{"type":"string"},"provider":{"$ref":"#/components/schemas/Provider"},"timeseries":{"type":"integer"}}},"PortfolioCard":{"type":"object","required":["id","kind","name","parent","timeseries","plants"],"properties":{"id":{"type":"string"},"kind":{"type":"string","const":"portfolio"},"name":{"type":"string"},"parent":{"type":"string","description":"The zone or GSP group."},"portfolio_kind":{"type":"string","enum":["aggregator","aggregate","virtual","supplier_base","supplier_additional"],"description":"`aggregate`: an ENTSO-E production unit that is several plants under one registration (a hydro cascade, a developer's cluster of wind farms, a stacked solar site); the plants are its `plants`. `aggregator`: a party that trades or balances other owners' plants as one unit (an ENTSO-E aggregator's trading unit, an Elexon aggregator). `virtual`: an Elexon virtual lead party BM unit (`V__`), a virtual power plant; Elexon publishes no site list for these, so `plants` is empty. `supplier_base`: an Elexon supplier's base BM unit in one GSP group (register type G); demand, no plants. `supplier_additional`: a supplier's additional BM unit in one GSP group (type S, `2__` or `C__`); sometimes one embedded farm traded through the supplier, so `technology` and `fuel_type` say what it is; no plants."},"technology":{"type":"string"},"capacity_mw":{"type":"number"},"demand_capacity_mw":{"type":"number"},"lead_party":{"type":"string"},"fuel_type":{"type":"string","description":"Elexon's register fuel type (`WIND`, `CCGT`…), GB BM units only."},"transmission_loss_factor":{"type":"number","description":"Elexon's transmission loss factor, GB BM units only; it locates the unit's zone."},"gsp_group":{"type":"string","description":"The GSP group's name, GB supplier and virtual units only."},"provider":{"$ref":"#/components/schemas/Provider"},"plants":{"type":"integer","description":"Plants attached to the portfolio."},"timeseries":{"type":"integer"}}},"AssetEntity":{"type":"object","description":"A plant, unit or portfolio as an entity: its card, the full record (what the register gives; `provenance` says how the record was built), one hop up in `parent`, one hop down in `children` (a plant's units), and the portfolio inline. A unit is a leaf, and so is a portfolio: the platform holds the portfolio as a reference on the Site, so the plants that name a portfolio are its `plants` field, not children.","required":["id","kind","name","parent","country","sync_area","children","relations","timeseries"],"properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["plant","unit","portfolio"]},"name":{"type":"string"},"common_name":{"type":"string"},"parent":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"$ref":"#/components/schemas/PlantCard"},{"type":"object"},{"type":"null"}]},"country":{"type":["string","null"]},"sync_area":{"type":["string","null"]},"portfolio":{"type":"object","description":"One line: `{id, kind, name, timeseries}`."},"technology":{"type":"string"},"sub_technology":{"type":"string"},"type":{"type":"string"},"production_type":{"type":"string"},"portfolio_kind":{"type":"string"},"psr_type":{"type":"string"},"capacity_mw":{"type":"number"},"capacity_kw":{"type":"integer"},"demand_capacity_mw":{"type":"number"},"generation_capacity_mw":{"type":"number"},"voltage_kv":{"type":"number"},"commissioned":{"type":"integer"},"operator":{"type":"string"},"lead_party":{"type":"string"},"capacity_note":{"type":"string","description":"A corrected register figure (e.g. kW published as MW)."},"status":{"type":"string","description":"Only when not operational."},"location":{"$ref":"#/components/schemas/Location"},"provider":{"$ref":"#/components/schemas/Provider"},"external_ids":{"type":"object","additionalProperties":true},"publishes":{"type":"array","items":{"type":"string"},"description":"`provider/dataset` the register says should exist for the record; compare with `timeseries` for what is held."},"provenance":{"type":"object","description":"How the record was built: zone source, geometry source, GEM match, split reason."},"members":{"type":"array","items":{"type":"object"},"description":"A plant that is several ENTSO-E production units on one GEM location lists them."},"children":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/PlantCard"},{"$ref":"#/components/schemas/UnitCard"}]}},"plants":{"type":"array","description":"Portfolios only: the plants whose `portfolio` field names this one, as plant cards (the inverse of the Site's reference; also `GET /entities/{portfolio}/plants`).","items":{"$ref":"#/components/schemas/PlantCard"}},"plants_capacity_mw":{"type":"number","description":"Portfolios only: the sum of `capacity_mw` over `plants`; beside the register's own `capacity_mw`, the difference is a data-quality signal."},"relations":{"type":"array","maxItems":0},"timeseries":{"allOf":[{"$ref":"#/components/schemas/TimeseriesSummary"},{"type":"object","properties":{"list":{"type":"string","description":"Path of the timeseries listing."}}}]}}},"AssetList":{"type":"object","required":["id","total","items","next"],"properties":{"id":{"type":"string"},"total":{"type":"integer"},"items":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/PlantCard"},{"$ref":"#/components/schemas/UnitCard"},{"$ref":"#/components/schemas/PortfolioCard"}]}},"next":{"type":["string","null"],"description":"Path of the next page. Null on the last page."}}},"Relation":{"type":"object","required":["id","kind","between","timeseries"],"properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["border","interconnector"]},"to":{"type":"string","description":"The country the far end is part of; relations are grouped by it."},"between":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},"positive":{"type":"string","description":"Direction that is positive for the signed flow series, e.g. 'FI → SE-SE3'."},"interconnectors":{"type":"array","items":{"$ref":"#/components/schemas/Interconnector"},"description":"Cables under a border (from the substations in its two entities)."},"timeseries":{"$ref":"#/components/schemas/TimeseriesSummary"}}},"Interconnector":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"interconnector"},"name":{"type":"string"},"between":{"type":"array","items":{"type":"string"},"description":"The two substations."},"connects":{"type":"array","items":{"type":"string"},"description":"The two entities the substations are part of."},"on":{"type":["string","null"],"description":"The border this cable sits on."},"technology":{"type":"string"},"rated_mw":{"type":"number"},"voltage_kv":{"type":"number"},"length_km":{"type":"number"},"eic":{"type":"string"},"bundle":{"type":"string","description":"For a circuit, the bundle it belongs to (icx:IFA_C1 → icx:IFA)."},"positive":{"type":"string"},"timeseries":{"$ref":"#/components/schemas/TimeseriesSummary"}}},"Entity":{"type":"object","description":"A grid entity. A plant, unit or portfolio id answers with the AssetEntity shape.","required":["id","kind","children","relations","timeseries"],"properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/Kind"},"name":{"type":"string"},"parent":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}]},"country":{"type":["string","null"],"description":"Nearest country up the tree (the entity itself if it is one)."},"sync_area":{"type":["string","null"],"description":"From the synchronous-area tag, never a parent."},"children":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"$ref":"#/components/schemas/KindSummary"}]}},"relations":{"type":"array","items":{"$ref":"#/components/schemas/Relation"}},"timeseries":{"$ref":"#/components/schemas/TimeseriesSummary"},"geometry":{"type":"object","description":"GeoJSON, only with ?geo=true."}}},"NameEntry":{"type":"object","required":["name","provider","data_type"],"properties":{"name":{"type":"string"},"provider":{"type":"string"},"data_type":{"$ref":"#/components/schemas/DataType"}}},"Definition":{"type":"object","required":["path","measures"],"properties":{"path":{"type":"string"},"measures":{"type":"string"},"vs_baseline":{"type":"string"},"document":{"type":["string","null"]},"baseline":{"type":"boolean"},"ref":{"type":"string"}}},"Component":{"type":"object","required":["key","description"],"properties":{"key":{"type":"string"},"description":{"type":["string","null"]},"siblings":{"type":"array","items":{"type":"string"},"description":"Other components of the same definition on this entity."}}},"Licence":{"type":"object","description":"The terms the publisher releases the data under (src/gridapi/licences.yaml). The data stays under these terms; follow them and show `attribution` when you republish it.","required":["name","url","attribution"],"properties":{"name":{"type":"string","description":"The licence, e.g. `CC BY 4.0`; `unreviewed` when its terms are still being read."},"url":{"type":["string","null"],"description":"The publisher's terms page."},"attribution":{"type":["string","null"],"description":"The credit line the publisher asks for."}}},"ProviderMetadata":{"type":"object","required":["provider","resolution","extent","publication_time","values"],"properties":{"provider":{"type":"string"},"resolution":{"type":["string","null"],"description":"ISO 8601 duration, null when the series has no fixed grid."},"resolution_history":{"type":"array","description":"The grid changes over time, oldest first; from the platform series tag.","items":{"type":"object","required":["valid_from","resolution"],"properties":{"valid_from":{"type":"string","format":"date-time"},"resolution":{"type":"string"}}}},"resolution_history_truncated":{"type":"boolean","description":"True when the platform's 500-character tag cap dropped the oldest spans."},"extent":{"type":["object","null"],"description":"Null when the platform reports no extent.","properties":{"first":{"type":"string","format":"date-time"},"last":{"type":"string","format":"date-time"}}},"publication_time":{"type":"string","enum":["declared","measured"],"description":"declared = the provider states its publication time and we store it; measured = knowledge_time is when we observed the value appear."},"licence":{"oneOf":[{"$ref":"#/components/schemas/Licence"},{"type":"null"}],"description":"The publisher's licence and the credit line to show when republishing; null when the licence register has no entry."},"latency_minutes":{"type":["object","null"],"properties":{"p05":{"type":"integer"},"p50":{"type":"integer"},"p95":{"type":"integer"}}},"coverage":{"type":["number","null"],"minimum":0,"maximum":1},"annotations_seen":{"type":"object","additionalProperties":{"type":"integer"}},"component":{"$ref":"#/components/schemas/Component","description":"Only when the component's meaning is provider-specific (per_provider in components.yaml)."},"inputs":{"type":"array","items":{"type":"string"},"description":"Only for provider rebase (clean series)."},"method":{"type":"string","description":"Only for provider rebase."},"values":{"type":"string","description":"Path of the values call for this provider."}}},"TimeseriesMetadata":{"type":"object","required":["entity","name","definition","component","unit","data_type","columns","providers"],"properties":{"entity":{"type":"object","properties":{"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/Kind"},"parent":{"type":["string","null"]},"country":{"type":["string","null"]},"sync_area":{"type":["string","null"]}}},"name":{"type":"string"},"definition":{"$ref":"#/components/schemas/Definition"},"component":{"oneOf":[{"$ref":"#/components/schemas/Component"},{"type":"null"}]},"unit":{"type":"string"},"data_type":{"$ref":"#/components/schemas/DataType"},"columns":{"type":"object","description":"Per provider, the columns of the series: `[\"value\"]` for a plain series, `[\"p50\", \"p10\", \"p90\"]` for a quantile family, one per fuel for a per-plant generation mix. A series with more than one column answers values as `points[].values` keyed by column.","additionalProperties":{"type":"array","items":{"type":"string"},"minItems":1}},"providers":{"type":"array","items":{"$ref":"#/components/schemas/ProviderMetadata"},"minItems":1}}},"Point":{"type":"object","description":"`value` for a series with the one column `value`; `values` keyed by column for a series with several (see `columns`).","required":["valid_time","knowledge_time","annotation"],"properties":{"valid_time":{"type":"string","format":"date-time"},"value":{"type":["number","null"]},"values":{"type":"object","additionalProperties":{"type":["number","null"]}},"knowledge_time":{"type":"string","format":"date-time","description":"For a series with several columns, the newest column's."},"annotation":{"type":["string","null"],"description":"a03_forward_fill, a04_nowcast, a90_contract_warn, a99_retracted, or a combined code; never the provenance suffix. For a series with several columns, the code every column shares, else null."},"message":{"$ref":"#/components/schemas/Message"}}},"Message":{"type":"object","description":"The upstream message that stated this point, present only on points that carry one: today the outage (REMIT unavailability) series, where every change-point names the notice behind it. A withdrawn or cancelled notice's restore point carries that notice, so `status` says why the capacity came back. The key is omitted on every other point.","required":["id","revision","reason","status"],"properties":{"id":{"type":["string","null"],"description":"The message's id: ENTSO-E's document mRID, Elexon's REMIT mrid."},"revision":{"type":["string","null"],"description":"The message's revision number, as published."},"reason":{"type":["string","null"],"description":"The stated reason, at most 200 characters. ENTSO-E: each Reason as `code: text` (e.g. `B19`, `A95: Planned maintenance`), several joined by ` | `; Elexon: `cause | relatedInformation`."},"status":{"type":["string","null"],"description":"The message's status as published. ENTSO-E: docStatus (`A09` cancelled, `A13` withdrawn; absent, so null, on an active document). Elexon: eventStatus (`Active`, `Inactive`, `Dismissed`)."}}},"ValuesHeader":{"type":"object","required":["entity","name","provider","unit","resolution","publication_time","as_of","columns"],"properties":{"entity":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"unit":{"type":"string"},"resolution":{"type":["string","null"]},"publication_time":{"type":"string","enum":["declared","measured"]},"licence":{"oneOf":[{"$ref":"#/components/schemas/Licence"},{"type":"null"}],"description":"The publisher's licence and the credit line to show when republishing; null when the licence register has no entry."},"as_of":{"type":"string","description":"\"latest\", the instant echoed, \"rolling\", or the period echoed."},"columns":{"type":"array","items":{"type":"string"},"minItems":1,"description":"The columns the points carry: `[\"value\"]`, or the selection of `?columns=`."}}},"ValuesFlat":{"allOf":[{"$ref":"#/components/schemas/ValuesHeader"},{"type":"object","required":["points"],"properties":{"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"}}}}]},"ValuesBulk":{"allOf":[{"$ref":"#/components/schemas/ValuesHeader"},{"type":"object","required":["snapshots","next"],"properties":{"snapshots":{"type":"array","description":"Oldest first. A snapshot is the whole [start, end] window as known at its as_of. Empty snapshots are omitted.","items":{"type":"object","required":["as_of","points"],"properties":{"as_of":{"type":"string","format":"date-time"},"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"}}}}},"next":{"type":["string","null"],"description":"Cursor for the next page; pass it as `cursor`. Null on the last page."}}}]},"ManyValuesRequest":{"type":"object","required":["series","start","end"],"properties":{"series":{"type":"array","minItems":1,"maxItems":2000,"description":"The timeseries to read, each the three things one values call names. Read and answered in this order.","items":{"type":"object","required":["entity","name","provider"],"properties":{"entity":{"type":"string","description":"An entity id, as in the one-series values call."},"name":{"type":"string","description":"The quantity, `category.sub_category.definition[.component]`."},"provider":{"type":"string"}}}},"start":{"type":"string","format":"date-time","description":"Inclusive valid-time bound, shared by every series."},"end":{"type":"string","format":"date-time","description":"Inclusive valid-time bound, shared by every series. A series whose window would hold more than 100000 points at its resolution (or span more than 366 days without one) answers an `error` block; the others are read."},"cursor":{"type":"string","description":"The `next` of the previous page; send the rest of the body unchanged."}}},"SeriesValues":{"type":"object","description":"One series' latest values: the one-series values call's answer, without `as_of` (it is on the page).","required":["entity","name","provider","unit","resolution","publication_time","columns","points"],"properties":{"entity":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"unit":{"type":"string"},"resolution":{"type":["string","null"]},"publication_time":{"type":"string","enum":["declared","measured"]},"licence":{"oneOf":[{"$ref":"#/components/schemas/Licence"},{"type":"null"}],"description":"The publisher's licence and the credit line to show when republishing; null when the licence register has no entry."},"columns":{"type":"array","items":{"type":"string"},"minItems":1,"description":"`[\"value\"]`, or every column of a series with several."},"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"}}}},"SeriesError":{"type":"object","description":"A series that could not be read, as asked, with the error the one-series values call answers for it.","required":["entity","name","provider","error"],"properties":{"entity":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["not_found","bad_request","platform_unavailable"]},"message":{"type":"string"}}}}},"ManyValues":{"type":"object","required":["start","end","as_of","series","next"],"properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"},"as_of":{"type":"string","enum":["latest"]},"series":{"type":"array","description":"One block per series, in the order asked: its values, or its error.","items":{"oneOf":[{"$ref":"#/components/schemas/SeriesValues"},{"$ref":"#/components/schemas/SeriesError"}]}},"next":{"type":["string","null"],"description":"Cursor for the next page; send it as `cursor` with the same body. Null on the last page."}}},"Version":{"type":"object","required":["sha","built_at","index_built_at","series"],"properties":{"sha":{"type":"string"},"built_at":{"type":"string"},"index_built_at":{"type":["string","null"],"description":"Null until the series index has been built."},"series":{"type":"integer","description":"Series in the index, 0 while it warms."}}},"Session":{"type":"object","required":["email","name","scope","api_key"],"properties":{"email":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string","description":"Always `public`."},"api_key":{"type":"string","description":"The durable credential for X-API-Key; the url_token is never one."}}},"Me":{"type":"object","required":["email","name"],"properties":{"email":{"type":"string"},"name":{"type":"string"}}},"SearchResult":{"type":"object","required":["total","items","next"],"properties":{"total":{"type":"integer"},"items":{"type":"array","items":{"type":"object","required":["entity","name","provider","data_type","metadata"],"properties":{"entity":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"data_type":{"$ref":"#/components/schemas/DataType"},"metadata":{"type":"string"}}}},"next":{"type":["string","null"],"description":"Cursor for the next page; pass it as `cursor`. Null on the last page."}}}},"responses":{"NotFound":{"description":"Unknown entity, name or provider.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unavailable":{"description":"The data platform did not answer (`platform_unavailable`) or the series index is still building (`index_warming`). Retry after the delay.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotImplemented":{"description":"Reserved route (`not_implemented`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"BadRequest":{"description":"Missing or invalid parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"An API key that is not valid (`unauthorized`). A request with no key is served under the open limit; only `/me` answers it with this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"The per-minute request limit is spent (`rate_limited`): 240 for a key, 5 for an address without one. Retry after the delay.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/version":{"get":{"tags":["Account"],"summary":"Version","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Version"}}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/me":{"get":{"tags":["Account"],"summary":"Account","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities":{"get":{"tags":["Discover"],"summary":"Entity tree","description":"Every grid entity as `{id, kind, timeseries, children}`. Borders and cables are not nodes; they are relations on the entities they touch. Plants, units and portfolios are not in the tree: each grid entity's own call summarises them in `children` and pages them under `/entities/{entity}/plants`, `/units`, `/portfolios`. Order inside a level is sync areas, countries, price zones, areas, boundaries, substations, then by timeseries count.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["entities"],"properties":{"entities":{"type":"array","items":{"$ref":"#/components/schemas/TreeEntity"}}}},"example":{"entities":[{"id":"Albania","kind":"country","timeseries":0,"children":[{"id":"AL","kind":"price_zone","timeseries":59}]},{"id":"Andorra","kind":"country","timeseries":0,"children":[{"id":"AD","kind":"price_zone","timeseries":0}]},{"id":"Austria","kind":"country","timeseries":0,"children":[{"id":"AT","kind":"price_zone","timeseries":202}]},{"id":"Belgium","kind":"country","timeseries":0,"children":[{"id":"BE","kind":"price_zone","timeseries":199,"children":[{"id":"be:Brussels","kind":"area","timeseries":15},{"id":"be:Flanders","kind":"area","timeseries":45,"children":[{"id":"be:Antwerp","kind":"area","timeseries":15},{"id":"be:East-Flanders","kind":"area","timeseries":15},{"id":"be:Flemish-Brabant","kind":"area","timeseries":15},{"id":"be:Limburg","kind":"area","timeseries":15},{"id":"be:West-Flanders","kind":"area","timeseries":15}]},{"id":"be:Wallonia","kind":"area","timeseries":45,"children":[{"id":"be:Hainaut","kind":"area","timeseries":15},{"id":"be:Liège","kind":"area","timeseries":15},{"id":"be:Luxembourg","kind":"area","timeseries":15},{"id":"be:Namur","kind":"area","timeseries":15},{"id":"be:Walloon-Brabant","kind":"area","timeseries":15}]},{"id":"sub:Zeebrugge","kind":"substation","timeseries":0}]}]},{"id":"Bosnia_and_Herzegovina","kind":"country","name":"Bosnia and Herzegovina","timeseries":0,"children":[{"id":"BA","kind":"price_zone","timeseries":39}]},{"id":"Bulgaria","kind":"country","timeseries":0,"children":[{"id":"BG","kind":"price_zone","timeseries":137}]},{"id":"Croatia","kind":"country","timeseries":0,"children":[{"id":"HR","kind":"price_zone","timeseries":132}]},{"id":"Cyprus","kind":"country","timeseries":0,"children":[{"id":"CY","kind":"price_zone","timeseries":51}]},{"id":"Czechia","kind":"country","timeseries":0,"children":[{"id":"CZ","kind":"price_zone","timeseries":89}]},{"id":"DE-AT-LU","kind":"price_zone","timeseries":0},{"id":"Denmark","kind":"country","timeseries":35,"children":[{"id":"DK-DK1","kind":"price_zone","timeseries":209,"children":[{"id":"sub:Revsing","kind":"substation","timeseries":0}]},{"id":"DK-DK2","kind":"price_zone","timeseries":202}]},{"id":"Estonia","kind":"country","timeseries":0,"children":[{"id":"EE","kind":"price_zone","timeseries":171}]},{"id":"Finland","kind":"country","timeseries":2,"children":[{"id":"FI","kind":"price_zone","timeseries":272,"children":[{"id":"AX","kind":"area","timeseries":0}]}]},{"id":"France","kind":"country","timeseries":0,"children":[{"id":"FR","kind":"price_zone","timeseries":191,"children":[{"id":"FR-COR","kind":"area","timeseries":0},{"id":"sub:LesMandarins","kind":"substation","timeseries":0},{"id":"sub:Peuplingues","kind":"substation","timeseries":0},{"id":"sub:Tourbe","kind":"substation","timeseries":0}]}]},{"id":"GB","kind":"price_zone","timeseries":281,"children":[{"id":"bnd:GB-B1","kind":"boundary","timeseries":3},{"id":"bnd:GB-B10","kind":"boundary","timeseries":3},{"id":"bnd:GB-B11","kind":"boundary","timeseries":3},{"id":"bnd:GB-B12","kind":"boundary","timeseries":3},{"id":"bnd:GB-B13","kind":"boundary","timeseries":3},{"id":"bnd:GB-B14","kind":"boundary","timeseries":3},{"id":"bnd:GB-B15","kind":"boundary","timeseries":3},{"id":"bnd:GB-B16","kind":"boundary","timeseries":3},{"id":"bnd:GB-B17","kind":"boundary","timeseries":3},{"id":"bnd:GB-B2","kind":"boundary","timeseries":3},{"id":"bnd:GB-B3","kind":"boundary","timeseries":3},{"id":"bnd:GB-B4","kind":"boundary","timeseries":3},{"id":"bnd:GB-B5","kind":"boundary","timeseries":3},{"id":"bnd:GB-B6","kind":"boundary","timeseries":3},{"id":"bnd:GB-B7","kind":"boundary","timeseries":3},{"id":"bnd:GB-B8","kind":"boundary","timeseries":3},{"id":"bnd:GB-B9","kind":"boundary","timeseries":3},{"id":"sub:Auchencrosh","kind":"substation","timeseries":0},{"id":"sub:Bicker_Fen","kind":"substation","timeseries":0},{"id":"sub:Cambois","kind":"substation","timeseries":0},{"id":"sub:Daedalus","kind":"substation","timeseries":0},{"id":"sub:Folkestone","kind":"substation","timeseries":0},{"id":"sub:Grain","kind":"substation","timeseries":0},{"id":"sub:Pembroke","kind":"substation","timeseries":0},{"id":"sub:Richborough","kind":"substation","timeseries":0},{"id":"sub:Sellindge","kind":"substation","timeseries":0},{"id":"sub:Shotton","kind":"substation","timeseries":0},{"id":"ta:GB-NGET","kind":"area","timeseries":0,"children":[{"id":"gspg:GB-A","kind":"area","timeseries":0},{"id":"gspg:GB-B","kind":"area","timeseries":0},{"id":"gspg:GB-C","kind":"area","timeseries":0},{"id":"gspg:GB-D","kind":"area","timeseries":0},{"id":"gspg:GB-E","kind":"area","timeseries":0},{"id":"gspg:GB-F","kind":"area","timeseries":0},{"id":"gspg:GB-G","kind":"area","timeseries":0},{"id":"gspg:GB-H","kind":"area","timeseries":0},{"id":"gspg:GB-J","kind":"area","timeseries":0},{"id":"gspg:GB-K","kind":"area","timeseries":0},{"id":"gspg:GB-L","kind":"area","timeseries":0},{"id":"gspg:GB-M","kind":"area","timeseries":0}]},{"id":"ta:GB-SHET","kind":"area","timeseries":0,"children":[{"id":"gspg:GB-P","kind":"area","timeseries":0}]},{"id":"ta:GB-SPT","kind":"area","timeseries":0,"children":[{"id":"gspg:GB-N","kind":"area","timeseries":0}]}]},{"id":"Georgia","kind":"country","timeseries":0,"children":[{"id":"GE","kind":"price_zone","timeseries":20}]},{"id":"Germany-Luxembourg","kind":"country","timeseries":0,"children":[{"id":"DE-LU","kind":"price_zone","timeseries":145,"children":[{"id":"DE","kind":"area","name":"Germany","timeseries":89,"children":[{"id":"ca:DE-50Hertz","kind":"area","timeseries":3},{"id":"ca:DE-Amprion","kind":"area","timeseries":3},{"id":"ca:DE-TenneT","kind":"area","timeseries":3},{"id":"ca:DE-TransnetBW","kind":"area","timeseries":3}]},{"id":"LU","kind":"area","name":"Grand Duchy of Luxembourg","timeseries":44}]}]},{"id":"Greece","kind":"country","timeseries":0,"children":[{"id":"GR","kind":"price_zone","timeseries":78}]},{"id":"Hungary","kind":"country","timeseries":0,"children":[{"id":"HU","kind":"price_zone","timeseries":114}]},{"id":"Italy","kind":"country","timeseries":87,"children":[{"id":"IT-CAL","kind":"price_zone","timeseries":77},{"id":"IT-CNO","kind":"price_zone","timeseries":80},{"id":"IT-CSO","kind":"price_zone","timeseries":89},{"id":"IT-NO","kind":"price_zone","timeseries":89},{"id":"IT-SAR","kind":"price_zone","timeseries":81},{"id":"IT-SIC","kind":"price_zone","timeseries":88},{"id":"IT-SO","kind":"price_zone","timeseries":87}]},{"id":"Kosovo","kind":"country","timeseries":0,"children":[{"id":"XK","kind":"price_zone","timeseries":12}]},{"id":"Latvia","kind":"country","timeseries":0,"children":[{"id":"LV","kind":"price_zone","timeseries":124}]},{"id":"Lithuania","kind":"country","timeseries":0,"children":[{"id":"LT","kind":"price_zone","timeseries":137}]},{"id":"Moldova","kind":"country","timeseries":0,"children":[{"id":"MD","kind":"price_zone","timeseries":24}]},{"id":"Montenegro","kind":"country","timeseries":0,"children":[{"id":"ME","kind":"price_zone","timeseries":22}]},{"id":"Morocco","kind":"country","timeseries":0,"children":[{"id":"MA","kind":"price_zone","timeseries":0}]},{"id":"NORDICS","kind":"aggregate","timeseries":0},{"id":"Netherlands","kind":"country","timeseries":0,"children":[{"id":"NL","kind":"price_zone","timeseries":169,"children":[{"id":"sub:Maasvlakte","kind":"substation","timeseries":0}]}]},{"id":"North_Macedonia","kind":"country","name":"North Macedonia","timeseries":0,"children":[{"id":"MK","kind":"price_zone","timeseries":22}]},{"id":"Norway","kind":"country","timeseries":48,"children":[{"id":"NO-NO1","kind":"price_zone","timeseries":174},{"id":"NO-NO2","kind":"price_zone","timeseries":196,"children":[{"id":"sub:Kvilldal","kind":"substation","timeseries":0}]},{"id":"NO-NO3","kind":"price_zone","timeseries":179},{"id":"NO-NO4","kind":"price_zone","timeseries":168},{"id":"NO-NO5","kind":"price_zone","timeseries":169}]},{"id":"Poland","kind":"country","timeseries":0,"children":[{"id":"PL","kind":"price_zone","timeseries":214}]},{"id":"Portugal","kind":"country","timeseries":0,"children":[{"id":"PT","kind":"price_zone","timeseries":78}]},{"id":"Romania","kind":"country","timeseries":0,"children":[{"id":"RO","kind":"price_zone","timeseries":146}]},{"id":"Russia","kind":"country","timeseries":0,"children":[{"id":"RU-1","kind":"price_zone","timeseries":0}]},{"id":"SEM","kind":"price_zone","timeseries":21,"children":[{"id":"GB-NIR","kind":"area","timeseries":5,"children":[{"id":"sub:Ballycronanmore","kind":"substation","timeseries":0}]},{"id":"IE","kind":"area","name":"Ireland","timeseries":30,"children":[{"id":"sub:Great_Island","kind":"substation","timeseries":0},{"id":"sub:Portan","kind":"substation","timeseries":0}]}]},{"id":"Serbia","kind":"country","timeseries":0,"children":[{"id":"RS","kind":"price_zone","timeseries":69}]},{"id":"Slovakia","kind":"country","timeseries":0,"children":[{"id":"SK","kind":"price_zone","timeseries":87}]},{"id":"Slovenia","kind":"country","timeseries":0,"children":[{"id":"SI","kind":"price_zone","timeseries":55}]},{"id":"Spain","kind":"country","timeseries":0,"children":[{"id":"ES","kind":"price_zone","timeseries":111}]},{"id":"Sweden","kind":"country","timeseries":38,"children":[{"id":"SE-SE1","kind":"price_zone","timeseries":152},{"id":"SE-SE2","kind":"price_zone","timeseries":155},{"id":"SE-SE3","kind":"price_zone","timeseries":161},{"id":"SE-SE4","kind":"price_zone","timeseries":155}]},{"id":"Switzerland","kind":"country","timeseries":0,"children":[{"id":"CH","kind":"price_zone","timeseries":46}]},{"id":"Turkey","kind":"country","timeseries":0,"children":[{"id":"TR","kind":"price_zone","timeseries":0}]},{"id":"Ukraine","kind":"country","timeseries":0,"children":[{"id":"UA","kind":"price_zone","timeseries":0}]},{"id":"sync:CESA","kind":"sync_area","timeseries":0},{"id":"sync:NSA","kind":"sync_area","timeseries":1}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}":{"get":{"tags":["Discover"],"summary":"Entity","parameters":[{"$ref":"#/components/parameters/entity"},{"name":"geo","in":"query","schema":{"type":"boolean","default":false},"description":"Add the polygon (areas) or the line (cables). Not implemented in this iteration (ignored)."}],"responses":{"200":{"description":"OK. A relation id (border or interconnector) answers with the Relation shape; a plant, unit or portfolio with the AssetEntity shape.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Entity"},{"$ref":"#/components/schemas/Relation"},{"$ref":"#/components/schemas/AssetEntity"}]},"example":{"id":"SE-SE3","kind":"price_zone","name":"SE3","parent":{"id":"Sweden","kind":"country","timeseries":31},"country":"Sweden","sync_area":"sync:NSA","children":[{"kind":"plant","count":720,"capacity_mw":14473,"with_timeseries":0,"list":"/entities/SE-SE3/plants"}],"relations":[{"id":"border:FI~SE-SE3","kind":"border","to":"Finland","between":["FI","SE-SE3"],"positive":"FI → SE-SE3","interconnectors":[],"timeseries":{"total":4,"providers":{"fingrid":3,"entsoe":1},"categories":{"exchange":4}}},{"id":"border:AX~SE-SE3","kind":"border","to":"Finland","between":["AX","SE-SE3"],"positive":"AX → SE-SE3","interconnectors":[],"timeseries":{"total":1,"providers":{"fingrid":1},"categories":{"exchange":1}}},{"id":"border:SE-SE3~SE-SE4","kind":"border","to":"Sweden","between":["SE-SE3","SE-SE4"],"positive":"SE-SE3 → SE-SE4","interconnectors":[],"timeseries":{"total":1,"providers":{"entsoe":1},"categories":{"exchange":1}}},{"id":"border:SE-SE2~SE-SE3","kind":"border","to":"Sweden","between":["SE-SE2","SE-SE3"],"positive":"SE-SE2 → SE-SE3","interconnectors":[],"timeseries":{"total":1,"providers":{"entsoe":1},"categories":{"exchange":1}}},{"id":"border:DK-DK1~SE-SE3","kind":"border","to":"Denmark","between":["DK-DK1","SE-SE3"],"positive":"DK-DK1 → SE-SE3","interconnectors":[],"timeseries":{"total":5,"providers":{"entsoe":5},"categories":{"exchange":5}}},{"id":"border:NO-NO1~SE-SE3","kind":"border","to":"Norway","between":["NO-NO1","SE-SE3"],"positive":"NO-NO1 → SE-SE3","interconnectors":[],"timeseries":{"total":1,"providers":{"entsoe":1},"categories":{"exchange":1}}}],"timeseries":{"total":55,"providers":{"entsoe":39,"esett":13,"svk":2,"kraftnat":1},"categories":{"price":18,"production":10,"balancing":11,"consumption":11,"capacity":5}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}/timeseries":{"get":{"tags":["Discover"],"summary":"Timeseries names","parameters":[{"$ref":"#/components/parameters/entity"},{"name":"provider","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Substring match on the name."},{"name":"data_type","in":"query","schema":{"$ref":"#/components/schemas/DataType"}}],"responses":{"200":{"description":"OK. A grid entity nests its relations' series under `relations`; a plant nests its units' series one hop down under `children`, exactly as its entity call does; a unit and a portfolio list their own series only (`children: []`).","content":{"application/json":{"schema":{"type":"object","required":["id","timeseries"],"properties":{"id":{"type":"string"},"timeseries":{"type":"array","items":{"$ref":"#/components/schemas/NameEntry"}},"relations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"timeseries":{"type":"array","items":{"$ref":"#/components/schemas/NameEntry"}}}}},"children":{"type":"array","items":{"type":"object","required":["id","name","timeseries"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"common_name":{"type":"string"},"timeseries":{"type":"array","items":{"$ref":"#/components/schemas/NameEntry"}}}}}}},"example":{"id":"SE-SE3","timeseries":[{"name":"consumption.load_forecast.a65_load_forecast.month_ahead_max","provider":"entsoe"},{"name":"consumption.load_forecast.a65_load_forecast.month_ahead_min","provider":"entsoe"},{"name":"consumption.load_forecast.a65_load_forecast.week_ahead_max","provider":"entsoe"},{"name":"consumption.load_forecast.a65_load_forecast.week_ahead_min","provider":"entsoe"},{"name":"consumption.load_forecast.a65_load_forecast.year_ahead_max","provider":"entsoe"},{"name":"consumption.load_forecast.a65_load_forecast.year_ahead_min","provider":"entsoe"},{"name":"consumption.load_forecast.day_ahead_total_load_forecast","provider":"entsoe"},{"name":"consumption.load_forecast.total_load_forecast","provider":"svk"},{"name":"consumption.realised_load.consumption_estimate","provider":"svk"},{"name":"consumption.realised_load.total_load","provider":"entsoe"},{"name":"consumption.settlement_metered.settlement_net_consumption","provider":"esett"},{"name":"… 44 more, alphabetical by name (balancing, capacity, price, production)"}],"relations":[{"id":"border:FI~SE-SE3","timeseries":[{"name":"exchange.physical_flow.physical_flow","provider":"entsoe"},{"name":"exchange.physical_flow.physical_flow.measured_15min","provider":"fingrid"},{"name":"exchange.physical_flow.physical_flow.real_time","provider":"fingrid"},{"name":"exchange.scheduled_commercial.commercial_exchange_schedule","provider":"fingrid"}]},{"id":"border:SE-SE3~SE-SE4","timeseries":[{"name":"… 9 entries"}]},{"id":"border:SE-SE2~SE-SE3","timeseries":[{"name":"… 7 entries"}]},{"id":"border:DK-DK1~SE-SE3","timeseries":[{"name":"… 7 entries"}]},{"id":"border:NO-NO1~SE-SE3","timeseries":[{"name":"… 7 entries"}]},{"id":"border:AX~SE-SE3","timeseries":[{"name":"… 1 entries"}]}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}/timeseries/{name}":{"get":{"tags":["Describe"],"summary":"Timeseries metadata","parameters":[{"$ref":"#/components/parameters/entity"},{"$ref":"#/components/parameters/name"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeseriesMetadata"},"example":{"entity":{"id":"IT-NO","kind":"price_zone","parent":"Italy","country":"Italy","sync_area":"sync:CESA"},"name":"consumption.realised_load.total_load","definition":{"path":"consumption.realised_load.total_load","measures":"net generation − exports + imports − absorbed (stored) energy","document":"A65","baseline":true,"ref":"https://eepublicdownloads.entsoe.eu/clean-documents/Transparency/MoP_Ref2_DDD_v3r4.pdf"},"component":null,"unit":"MW","providers":[{"provider":"entsoe","resolution":"PT15M","extent":{"first":"2026-09-03T14:00:00Z","last":"2026-10-12T10:45:00Z"},"publication_time":"measured","latency_minutes":{"p05":48,"p50":63,"p95":108},"coverage":1,"annotations_seen":{"a03_forward_fill":2},"values":"/entities/IT-NO/timeseries/consumption.realised_load.total_load/values?provider=entsoe"},{"provider":"terna","resolution":"PT15M","extent":{"first":"2026-09-30T22:00:00Z","last":"2026-10-11T21:45:00Z"},"publication_time":"measured","latency_minutes":{"p05":1760,"p50":6170,"p95":10715},"coverage":0.99,"annotations_seen":{},"values":"/entities/IT-NO/timeseries/consumption.realised_load.total_load/values?provider=terna"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}/timeseries/{name}/values":{"get":{"tags":["Read"],"summary":"Timeseries values","description":"One point per interval of the series, each with its `valid_time`, `value`, `knowledge_time`\nand `annotation`; a point an upstream message stated (an outage change-point) also carries\nthat `message` (id, revision, reason, status). `as_of` selects the version:\n\n| `as_of` | Response | Returns |\n|---|---|---|\n| omitted | `points` | the latest version of every value |\n| an RFC 3339 instant | `points` | every value as known at that instant |\n| an ISO 8601 duration (`PT1H`, `P1D`) | `snapshots` | one snapshot per period, anchored on `start` or on `at` |\n| `rolling` | `snapshots` | one snapshot per native step of the series |\n\nA snapshot is the whole window as known at its instant. Snapshots at which nothing was known\nare omitted and they stop at now even when `end` is later; an `as_of` in the future is 400.\nSnapshot responses page with `next`, passed back as `cursor`. The Reading values guide shows each\ncase with an example.\n","parameters":[{"$ref":"#/components/parameters/entity"},{"$ref":"#/components/parameters/name"},{"name":"provider","in":"query","required":true,"schema":{"type":"string"},"description":"Required even when the quantity has one provider. Missing or unknown → 400 listing the providers, with a message naming the parameter to add (`add provider=entsoe`)."},{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"Inclusive valid-time bound: an ISO 8601 instant with a UTC offset, or a bare date (`2026-11-09`) meaning 00:00 UTC that day. The window [start, end] may hold at most 100000 points at the series' resolution; for a series without a known resolution it may span at most 366 days. A larger window is 400 (`param: end`): narrow it."},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"Inclusive valid-time bound, in the same forms as `start`. Same window cap as `start`: at most 100000 points at the series' resolution, or 366 days without a known resolution; larger is 400. Bulk snapshots stop at now even when `end` is later; each snapshot still holds the rows forecast past now."},{"name":"as_of","in":"query","required":false,"schema":{"type":"string"},"description":"Omitted → flat, latest version of every value. An RFC 3339 instant → flat, every value as known at that instant.\n`rolling` → bulk, one snapshot per native step of the series. An ISO 8601 duration (PT1H, PT6H, P1D) → bulk, one snapshot per period anchored on `start`.\nA snapshot is the whole window as known at its instant. Snapshots at which nothing is known are omitted. An as_of in the future is 400.\n"},{"name":"at","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"description":"Anchor for a period `as_of`, UTC wall-clock time."},{"name":"max_snapshots","in":"query","schema":{"type":"integer","default":100,"maximum":1000},"description":"Bulk page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque, from `next`."},{"name":"columns","in":"query","schema":{"type":"string"},"description":"For a series with several columns (metadata `columns`), the subset to return, comma-separated: `p50,p90`. 400 on a plain series or an unknown column."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValuesFlat"},{"$ref":"#/components/schemas/ValuesBulk"}]},"examples":{"latest":{"value":{"entity":"SE-SE3","name":"consumption.realised_load.total_load","provider":"entsoe","unit":"MW","resolution":"PT15M","publication_time":"measured","as_of":"latest","points":[{"valid_time":"2026-10-09T06:30:00Z","value":10100,"knowledge_time":"2026-10-09T08:02:59Z","annotation":null},{"valid_time":"2026-10-09T06:45:00Z","value":10100,"knowledge_time":"2026-10-09T08:02:59Z","annotation":"a03_forward_fill"},{"valid_time":"2026-10-09T07:00:00Z","value":10474,"knowledge_time":"2026-10-09T08:02:59Z","annotation":null}]}},"bulk":{"value":{"entity":"SE-SE3","name":"consumption.realised_load.total_load","provider":"entsoe","unit":"MW","resolution":"PT15M","publication_time":"measured","as_of":"PT6H","snapshots":[{"as_of":"2026-10-01T06:00:00Z","points":[{"valid_time":"2026-10-01T00:00:00Z","value":"…","knowledge_time":"…","annotation":null},{"valid_time":"…","value":"… one point per quarter hour up to the last one known at 06:00, about 04:45 given the hour of latency"}]},{"as_of":"2026-10-01T12:00:00Z","points":["… the window as known at 12:00: the same quarter hours as above, some with a newer version, plus the ones published since"]},{"as_of":"…","points":["… 28 snapshots in total, oldest first"]}],"next":null}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/timeseries/values":{"post":{"tags":["Read"],"summary":"Values of many timeseries","description":"The latest values of up to 2,000 timeseries over one shared window, in one call. The body\nlists the series; the response holds one block per series, in the same order, each exactly\nwhat the one-series values call returns for it. A series that cannot be read (unknown\nentity, name or provider, a window too large for it) answers an `error` block instead, and\nthe rest are still read.\n\nA page holds whole series, up to 200,000 points in total and at least one series. When\nthe next series would go over, the page stops and `next` is set: send it back as `cursor`\nwith the same body. One call counts as one request against the rate limit.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManyValuesRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManyValues"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}/plants":{"get":{"tags":["Discover"],"summary":"Plants in an entity","description":"The plants under a grid entity, descending the tree (Sweden includes SE-SE1…SE4), or a portfolio's plants. Sorted by capacity. Paged: `next` is the path of the next page, filters and `cursor` included; request it as it is. Items are plant cards, the same shape a plant has wherever it appears.","parameters":[{"$ref":"#/components/parameters/entity"},{"name":"technology","in":"query","schema":{"type":"string"}},{"name":"min_mw","in":"query","schema":{"type":"number"}},{"name":"has_timeseries","in":"query","schema":{"type":"boolean"}},{"name":"bbox","in":"query","schema":{"type":"string"},"description":"minLon,minLat,maxLon,maxLat"},{"name":"provider","in":"query","schema":{"type":"string"},"description":"The register the plant comes from."},{"name":"portfolio","in":"query","schema":{"type":"string"},"description":"A portfolio id."},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":1000}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Set for you in `next`, which is a whole path; do not copy `next` into this parameter."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetList"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}/units":{"get":{"tags":["Discover"],"summary":"Units in an entity","description":"The generation units (machines) under a grid entity, descending the tree; a plant's units; or, on a portfolio, the units of every plant that names it: every battery in DE-LU in one call, rather than one call per plant. Sorted by capacity. Paged: `next` is the path of the next page, filters and `cursor` included; request it as it is. Items are unit cards.","parameters":[{"$ref":"#/components/parameters/entity"},{"name":"type","in":"query","schema":{"type":"string"},"description":"wind, solar, hydro, gas, battery, …"},{"name":"production_type","in":"query","schema":{"type":"string"}},{"name":"fuel","in":"query","schema":{"type":"string"}},{"name":"min_kw","in":"query","schema":{"type":"number"}},{"name":"has_timeseries","in":"query","schema":{"type":"boolean"}},{"name":"bbox","in":"query","schema":{"type":"string"},"description":"minLon,minLat,maxLon,maxLat"},{"name":"provider","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":1000}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Set for you in `next`, which is a whole path; do not copy `next` into this parameter."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetList"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/entities/{entity}/portfolios":{"get":{"tags":["Discover"],"summary":"Portfolios in an entity","description":"The portfolios under a grid entity, descending the tree: `aggregate` (an ENTSO-E unit that is several plants), `aggregator`, `virtual` (an Elexon virtual lead party) and `supplier_base` (an Elexon supplier's base demand), see `portfolio_kind`. Sorted by capacity. Paged: `next` is the path of the next page, filters and `cursor` included; request it as it is. Items are portfolio cards; the card's `plants` count says whether the portfolio's plants are linked.","parameters":[{"$ref":"#/components/parameters/entity"},{"name":"portfolio_kind","in":"query","schema":{"type":"string","enum":["aggregator","aggregate","virtual","supplier_base","supplier_additional"]},"description":"`aggregate`: an ENTSO-E production unit that is several plants under one registration (a hydro cascade, a developer's cluster of wind farms, a stacked solar site); the plants are its `plants`. `aggregator`: a party that trades or balances other owners' plants as one unit (an ENTSO-E aggregator's trading unit, an Elexon aggregator). `virtual`: an Elexon virtual lead party BM unit (`V__`), a virtual power plant; Elexon publishes no site list for these, so `plants` is empty. `supplier_base`: an Elexon supplier's base BM unit in one GSP group (register type G); demand, no plants. `supplier_additional`: a supplier's additional BM unit in one GSP group (type S, `2__` or `C__`); sometimes one embedded farm traded through the supplier, so `technology` and `fuel_type` say what it is; no plants."},{"name":"min_mw","in":"query","schema":{"type":"number"}},{"name":"has_timeseries","in":"query","schema":{"type":"boolean"}},{"name":"provider","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":1000}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Set for you in `next`, which is a whole path; do not copy `next` into this parameter."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetList"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/timeseries":{"get":{"tags":["Discover"],"summary":"Search timeseries","parameters":[{"name":"entity","in":"query","schema":{"type":"string"},"description":"Restrict to this entity and its descendants."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Matches the name, the definition text and the component description."},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"subcategory","in":"query","schema":{"type":"string"}},{"name":"provider","in":"query","schema":{"type":"string"}},{"name":"data_type","in":"query","schema":{"$ref":"#/components/schemas/DataType"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":1000},"description":"Page size."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque, from `next`."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"},"example":{"total":8,"items":[{"entity":"SE-SE3","name":"balancing.imbalance_system_state.imbalance_volume.down","provider":"entsoe","data_type":"actual","metadata":"/entities/SE-SE3/timeseries/balancing.imbalance_system_state.imbalance_volume.down"},{"entity":"SE-SE3","name":"balancing.imbalance_system_state.imbalance_volume.up","provider":"entsoe","data_type":"actual","metadata":"/entities/SE-SE3/timeseries/balancing.imbalance_system_state.imbalance_volume.up"},{"entity":"SE-SE3","name":"capacity.installed.installed_capacity_per_type.wind_onshore","provider":"entsoe","data_type":"capacity","metadata":"/entities/SE-SE3/timeseries/capacity.installed.installed_capacity_per_type.wind_onshore"},{"entity":"SE-SE3","name":"production.forecast.wind_generation_forecast.onshore_day_ahead","provider":"entsoe","data_type":"forecast","metadata":"/entities/SE-SE3/timeseries/production.forecast.wind_generation_forecast.onshore_day_ahead"},{"entity":"SE-SE3","name":"production.forecast.wind_generation_forecast.onshore_intraday_process","provider":"entsoe","data_type":"forecast","metadata":"/entities/SE-SE3/timeseries/production.forecast.wind_generation_forecast.onshore_intraday_process"},{"entity":"SE-SE3","name":"production.forecast.wind_generation_forecast.onshore_intraday_total","provider":"entsoe","data_type":"forecast","metadata":"/entities/SE-SE3/timeseries/production.forecast.wind_generation_forecast.onshore_intraday_total"},{"entity":"SE-SE3","name":"production.realised_output.actual_generation_per_type.wind_onshore","provider":"entsoe","data_type":"actual","metadata":"/entities/SE-SE3/timeseries/production.realised_output.actual_generation_per_type.wind_onshore"},{"entity":"SE-SE3","name":"production.settlement.settlement_net_production.wind","provider":"esett","data_type":"actual","metadata":"/entities/SE-SE3/timeseries/production.settlement.settlement_net_production.wind"}],"next":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}}}}