Rebase Energy Read API

The values of one timeseries from one provider, in the version selected by `as_of`.

GitHub OpenAPI

Operations 2

GET /entities/{entity}/timeseries/{name}/values Timeseries values #
POST /timeseries/values Values of many timeseries #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/rebase-energy:rebase-energy-read-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

rebase-energy-read-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Rebase Grid Read API
  version: '1'
  description: 'REST API for European power system data: production, consumption, prices, exchanges, capacities

    and balancing, collected from TSOs, exchanges and transparency platforms. Every value is stored

    as the provider published it, with the time it became known and every later version.


    The guides at grid.rebase.energy/docs/v1/ explain entities, timeseries names, providers and

    reading values; this document is the endpoint contract. Before scripting calls, read

    grid.rebase.energy/docs/v1/guides/efficient-calls/: one timeseries per values call, 240

    requests per minute per key, at most 100,000 points per values request, and the paging rules.


    No API key is needed: every endpoint but `/me` answers a request without one, at 10 requests

    per minute per IP address (grid.rebase.energy/docs/v1/guides/open-access/). A free key raises

    the limit to 240 per minute.'
servers:
- url: https://grid.rebase.energy/api/v1
security:
- apiKey: []
- {}
tags:
- name: Read
  description: The values of one timeseries from one provider, in the version selected by `as_of`.
paths:
  /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`

        and `annotation`; a point an upstream message stated (an outage change-point) also carries

        that `message` (id, revision, reason, status). `as_of` selects the version:


        | `as_of` | Response | Returns |

        |---|---|---|

        | omitted | `points` | the latest version of every value |

        | an RFC 3339 instant | `points` | every value as known at that instant |

        | an ISO 8601 duration (`PT1H`, `P1D`) | `snapshots` | one snapshot per period, anchored on `start` or on `at` |

        | `rolling` | `snapshots` | one snapshot per native step of the series |


        A snapshot is the whole window as known at its instant. Snapshots at which nothing was known

        are omitted and they stop at now even when `end` is later; an `as_of` in the future is 400.

        Snapshot responses page with `next`, passed back as `cursor`. The Reading values guide shows each

        case with an example.'
      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.

          `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`.

          A 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.

          '
      - 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'
      operationId: getEntitiesByEntityTimeseriesByNameValues
      x-operation-id-source: derived
  /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

        lists the series; the response holds one block per series, in the same order, each exactly

        what the one-series values call returns for it. A series that cannot be read (unknown

        entity, name or provider, a window too large for it) answers an `error` block instead, and

        the rest are still read.


        A page holds whole series, up to 200,000 points in total and at least one series. When

        the next series would go over, the page stops and `next` is set: send it back as `cursor`

        with the same body. One call counts as one request against the rate limit.'
      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'
      operationId: postTimeseriesValues
      x-operation-id-source: derived
components:
  schemas:
    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`).'
    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.
    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=`.'
    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.
    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.
    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'
    ValuesFlat:
      allOf:
      - $ref: '#/components/schemas/ValuesHeader'
      - type: object
        required:
        - points
        properties:
          points:
            type: array
            items:
              $ref: '#/components/schemas/Point'
    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.
    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
    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.
  responses:
    BadRequest:
      description: Missing or invalid parameter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    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'
    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'
  parameters:
    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,}$
    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
  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 10 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.'