Engrate Time Series API

The Time Series API from Engrate — 3 operation(s) for time series.

Operations 3

GET /market-access/v1alpha1/timeseries/aggregate-allocations List Aggregate Allocations #
GET /market-access/v1alpha1/timeseries/allocations List Allocations #
GET /market-access/v1alpha1/timeseries/series/aggregate-allocations List Aggregate Allocation Series #

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/engrate:engrate-time-series-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

engrate-time-series-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Engrate Timeseries API
  version: 1.0.0
servers:
- url: https://api.engrate.io
security:
- apiKeyAuth: []
tags:
- name: Time Series
paths:
  /market-access/v1alpha1/timeseries/aggregate-allocations:
    get:
      description: 'List aggregate allocations timeseries data matching the provided filters.


        Note that this can return multiple values per ISP for the same dimensions, as the underlying storage is append-only. You tell those rows apart by looking at the finality and known_at. If you are training a model this allows you to train the model on data that was known at the time the model will be running, avoiding training it on data that is "from the future". If you are doing controlling, this allows you to reason about how final the values are, so you can decide how much trust to put in the analysis you build on top.


        To read the volumes of one aggregate allocation, use the `external_id` filter, and the `flow_direction` filter if the external id has both directions. List Aggregate Allocation Series gives the external id of each aggregate allocation.'
      operationId: list_aggregate_allocations_market_access_v1alpha1_timeseries_aggregate_allocations_get
      parameters:
      - description: Inclusive lower bound on the settlement period start (RFC 3339).
        in: query
        name: isp_from
        required: true
        schema:
          description: Inclusive lower bound on the settlement period start (RFC 3339).
          format: date-time
          title: Isp From
          type: string
      - description: Exclusive upper bound on the settlement period start (RFC 3339).
        in: query
        name: isp_until
        required: true
        schema:
          description: Exclusive upper bound on the settlement period start (RFC 3339).
          format: date-time
          title: Isp Until
          type: string
      - description: External ids of the aggregate allocations to read.
        in: query
        name: external_id
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: External ids of the aggregate allocations to read.
          title: External Id
      - description: Areas to read, each one as kind:code, where kind is one of metering_grid_area, control_area or scheduling_area, for example scheduling_area:10YDE-RWENET---I. Omit this parameter to read every area.
        in: query
        name: area
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Areas to read, each one as kind:code, where kind is one of metering_grid_area, control_area or scheduling_area, for example scheduling_area:10YDE-RWENET---I. Omit this parameter to read every area.
          title: Area
      - description: Flow directions to read. Omit to read both.
        in: query
        name: flow_direction
        required: false
        schema:
          anyOf:
          - items:
              enum:
              - consumption
              - production
              type: string
            type: array
          - type: 'null'
          description: Flow directions to read. Omit to read both.
          title: Flow Direction
      - description: Balance groups to read. Omit to read every group.
        in: query
        name: balance_group
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Balance groups to read. Omit to read every group.
          title: Balance Group
      - description: Suppliers to read. Omit to read every supplier.
        in: query
        name: supplier
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Suppliers to read. Omit to read every supplier.
          title: Supplier
      - description: Aggregator roles to read. Omit to read every role.
        in: query
        name: aggregator
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/AggregatorRole'
            type: array
          - type: 'null'
          description: Aggregator roles to read. Omit to read every role.
          title: Aggregator
      - description: Allocation bases to read. Omit to read every basis.
        in: query
        name: allocation_basis
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/AllocationBasis'
            type: array
          - type: 'null'
          description: Allocation bases to read. Omit to read every basis.
          title: Allocation Basis
      - description: Market dimensions to filter by, as key:value. A market dimension is the market's own key and code on which it divides accounting points, for example series_type:SLS. An aggregate allocation matches when it carries every pair.
        in: query
        name: market_dimension
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Market dimensions to filter by, as key:value. A market dimension is the market's own key and code on which it divides accounting points, for example series_type:SLS. An aggregate allocation matches when it carries every pair.
          title: Market Dimension
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AggregateAllocationsResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: List Aggregate Allocations
      tags:
      - Time Series
  /market-access/v1alpha1/timeseries/allocations:
    get:
      description: 'List the volumes allocated to the requested accounting points.


        Note that the markets often send multiple values per Imbalance Settlement Period (ISP) for each accounting point, starting with lower quality levels and then moving to higher quality levels. This endpoint returns *all* values received, including the timestamp when the value was known.


        The reason for this is twofold: It makes fitting models to the data easier, and it allows you to consider the data quality when you do controlling and analysis.


        For fitting models, you''ll want to use the "known_at" attribute to filter out values that would not be known to the model when it''s expected to run. For instance, if you''re fitting a model to estimate imbalance at 10AM every day, you''d exclude values known only after 10AM, as otherwise the model ends up trained on "data from the future".


        For controlling and analysis, seeing all available quality levels lets you make decisions on your level of trust in the data - you may be happy for an analysis to be based on early `estimated` or `provisional` values, while controlling pipelines may rather wait. The API leaves the decision of which value to use up to you.'
      operationId: list_allocations_market_access_v1alpha1_timeseries_allocations_get
      parameters:
      - description: Inclusive lower bound on the settlement period start (RFC 3339).
        in: query
        name: isp_from
        required: true
        schema:
          description: Inclusive lower bound on the settlement period start (RFC 3339).
          format: date-time
          title: Isp From
          type: string
      - description: Exclusive upper bound on the settlement period start (RFC 3339).
        in: query
        name: isp_until
        required: true
        schema:
          description: Exclusive upper bound on the settlement period start (RFC 3339).
          format: date-time
          title: Isp Until
          type: string
      - description: Accounting points to read, repeated per point.
        in: query
        name: accounting_point_id
        required: true
        schema:
          description: Accounting points to read, repeated per point.
          items:
            format: uuid
            type: string
          maxItems: 500
          minItems: 1
          title: Accounting Point Id
          type: array
      - description: Flow directions to read. Omit to read both.
        in: query
        name: flow_direction
        required: false
        schema:
          anyOf:
          - items:
              enum:
              - consumption
              - production
              type: string
            type: array
          - type: 'null'
          description: Flow directions to read. Omit to read both.
          title: Flow Direction
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllocationsResponse'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: List Allocations
      tags:
      - Time Series
  /market-access/v1alpha1/timeseries/series/aggregate-allocations:
    get:
      description: 'Show the series of the aggregate allocations that agree with the filters.


        Each series is one aggregate allocation, with the aggregation dimensions that the market gave for it. Each aggregate allocation record has the `external_id` of its aggregate allocation. Use this `external_id` to find the values of an aggregate allocation in List Aggregate Allocations. The list also includes the aggregate allocations that have no values.


        If the supplier or the balance group is null, the aggregate allocation includes the accounting points of all suppliers or all balance groups. If a key is not in the market dimensions, the aggregate allocation includes the accounting points of all values of that aggregation dimension. A `supplier` or `balance_group` filter does not select an aggregate allocation in which that value is null. To select one aggregate allocation alone, use the `external_id` filter, and the `flow_direction` filter if the external id has both directions.


        The list shows the aggregate allocations in the sequence of `external_id`, then `flow_direction`. To read the full list, use `offset` and `limit` to get one page at a time. `total` is the number of aggregate allocations that agree with the filters, on all pages.


        The API gives the status code 422 in these conditions:


        - An `area` filter is not in the format `kind:code`, or it has an unknown area kind.


        - A `market_dimension` filter is not in the format `key:value`.


        - A `market_dimension` filter has one key two times.


        - A `flow_direction`, `aggregator` or `allocation_basis` filter has an unknown value.


        - An `external_id`, `area`, `balance_group`, `supplier` or `market_dimension` filter has more values than its maximum.


        - `offset` is less than 0, or `limit` is less than 1 or more than its maximum.'
      operationId: list_aggregate_allocation_series_market_access_v1alpha1_timeseries_series_aggregate_allocations_get
      parameters:
      - description: External ids of the aggregate allocations to read.
        in: query
        name: external_id
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: External ids of the aggregate allocations to read.
          title: External Id
      - description: Areas to read, each one as kind:code, where kind is one of metering_grid_area, control_area or scheduling_area, for example scheduling_area:10YDE-RWENET---I. Omit this parameter to read every area.
        in: query
        name: area
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Areas to read, each one as kind:code, where kind is one of metering_grid_area, control_area or scheduling_area, for example scheduling_area:10YDE-RWENET---I. Omit this parameter to read every area.
          title: Area
      - description: Flow directions to read. Omit to read both.
        in: query
        name: flow_direction
        required: false
        schema:
          anyOf:
          - items:
              enum:
              - consumption
              - production
              type: string
            type: array
          - type: 'null'
          description: Flow directions to read. Omit to read both.
          title: Flow Direction
      - description: Balance groups to read. Omit to read every group.
        in: query
        name: balance_group
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Balance groups to read. Omit to read every group.
          title: Balance Group
      - description: Suppliers to read. Omit to read every supplier.
        in: query
        name: supplier
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Suppliers to read. Omit to read every supplier.
          title: Supplier
      - description: Aggregator roles to read. Omit to read every role.
        in: query
        name: aggregator
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/AggregatorRole'
            type: array
          - type: 'null'
          description: Aggregator roles to read. Omit to read every role.
          title: Aggregator
      - description: Allocation bases to read. Omit to read every basis.
        in: query
        name: allocation_basis
        required: false
        schema:
          anyOf:
          - items:
              $ref: '#/components/schemas/AllocationBasis'
            type: array
          - type: 'null'
          description: Allocation bases to read. Omit to read every basis.
          title: Allocation Basis
      - description: Market dimensions to filter by, as key:value. A market dimension is the market's own key and code on which it divides accounting points, for example series_type:SLS. An aggregate allocation matches when it carries every pair.
        in: query
        name: market_dimension
        required: false
        schema:
          anyOf:
          - items:
              type: string
            maxItems: 500
            type: array
          - type: 'null'
          description: Market dimensions to filter by, as key:value. A market dimension is the market's own key and code on which it divides accounting points, for example series_type:SLS. An aggregate allocation matches when it carries every pair.
          title: Market Dimension
      - description: The position of the first aggregate allocation of the page in the list. The first aggregate allocation in the list has the position 0.
        in: query
        name: offset
        required: false
        schema:
          default: 0
          description: The position of the first aggregate allocation of the page in the list. The first aggregate allocation in the list has the position 0.
          minimum: 0
          title: Offset
          type: integer
      - description: The maximum number of aggregate allocations on the page.
        in: query
        name: limit
        required: false
        schema:
          default: 100
          description: The maximum number of aggregate allocations on the page.
          maximum: 1000
          minimum: 1
          title: Limit
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AggregateAllocationPage'
          description: Successful Response
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
      summary: List Aggregate Allocation Series
      tags:
      - Time Series
components:
  schemas:
    AggregateAllocation:
      description: An aggregate allocation and its aggregation dimensions. A null or absent dimension includes the accounting points of all values.
      properties:
        aggregator:
          $ref: '#/components/schemas/AggregatorRole'
        allocation_basis:
          $ref: '#/components/schemas/AllocationBasis'
        area_code:
          examples:
          - 10YDE-RWENET---I
          title: Area Code
          type: string
        area_kind:
          $ref: '#/components/schemas/AreaKind'
        balance_group:
          anyOf:
          - type: string
          - type: 'null'
          description: The balance group of the accounting points in the aggregate allocation. If the value is null, the aggregate allocation includes all balance groups.
          examples:
          - 11XBILANZKREIS-X
          - null
          title: Balance Group
        external_id:
          description: The identification that the market gives to the aggregate allocation. Each aggregate allocation record has the identification of its aggregate allocation.
          title: External Id
          type: string
        flow_direction:
          enum:
          - consumption
          - production
          title: Flow Direction
          type: string
        market_dimensions:
          additionalProperties:
            type: string
          description: Market-specific additional dimensions, used in markets that sub-divide aggregate allocations beyond what the common dimensions can represent
          examples:
          - series_type: SLS
          title: Market Dimensions
          type: object
        market_meta:
          additionalProperties:
            type: string
          description: Market-specific additional metadata, for instance in markets where datasets with the exact same dimensions are sent at different cadences (daily, monthly), this metadata tells them apart.
          examples:
          - summed_series: Z97
          title: Market Meta
          type: object
        supplier:
          anyOf:
          - type: string
          - type: 'null'
          description: The supplier of the accounting points in the aggregate allocation. If the value is null, the aggregate allocation includes all suppliers.
          examples:
          - '9900000000001'
          - null
          title: Supplier
      required:
      - aggregator
      - allocation_basis
      - area_code
      - area_kind
      - balance_group
      - external_id
      - flow_direction
      - market_dimensions
      - market_meta
      - supplier
      title: AggregateAllocation
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    AggregateAllocationsResponse:
      properties:
        values:
          items:
            $ref: '#/components/schemas/AggregateAllocationRecord'
          title: Values
          type: array
      required:
      - values
      title: AggregateAllocationsResponse
      type: object
    Finality:
      description: 'The settlement data comes in different levels of "finality". Each market has its own names for these levels, and all of them map to this common ladder. When one settlement period has more than one record, use the record with the highest finality, then the latest `known_at`.


        ### Available finalities


        - **preliminary** — The first level, sent before the market has all the data.


        - **revised** — The level used for corrections to the preliminary data.


        - **final** — The level used for settlement and invoicing.


        - **correction** — The level used for corrections when the final value was wrong. A correction replaces the final value.'
      enum:
      - preliminary
      - revised
      - final
      - correction
      title: Finality
      type: string
    AllocationQuality:
      description: 'How the volume was arrived at, in ascending order of trust. When one settlement period carries several records, prefer the highest quality.


        ### Available allocation qualities


        - **provisional** — A placeholder the sender intends to replace.


        - **estimated** — Substituted because no reading was available: profiled, interpolated, or copied from a comparable period. Expect it to be superseded.


        - **calculated** — Derived by a defined computation rather than read


        - **measured** — Read off the meter.'
      enum:
      - provisional
      - estimated
      - calculated
      - measured
      examples:
      - measured
      title: AllocationQuality
      type: string
    AllocationBasis:
      description: 'The basis tells you where the energy data for an aggregation is coming from: Is it directly metered values from smart meters, or is it something calculated from some standard profile?


        ### Available allocation basises


        - **metered** — Indicates this aggregation''s data comes from directly metered energy, like from smart meters.


        - **profiled** — Indicates this aggregation''s data is coming from a ''profile'' of some kind, a pre-determined shape of consumption or production, usually coupled with some adjustment calculations, like adjusting for daily temperature or past annual metered consumption.'
      enum:
      - metered
      - profiled
      title: AllocationBasis
      type: string
    AggregateAllocationPage:
      properties:
        items:
          items:
            $ref: '#/components/schemas/AggregateAllocation'
          title: Items
          type: array
        limit:
          title: Limit
          type: integer
        offset:
          title: Offset
          type: integer
        total:
          description: The number of aggregate allocations that agree with the filters, on all pages.
          title: Total
          type: integer
      required:
      - items
      - limit
      - offset
      - total
      title: AggregateAllocationPage
      type: object
    AllocationsResponse:
      properties:
        values:
          items:
            $ref: '#/components/schemas/AllocationRecord'
          title: Values
          type: array
      required:
      - values
      title: AllocationsResponse
      type: object
    ValidationError:
      properties:
        ctx:
          title: Context
          type: object
        input:
          title: Input
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
      - loc
      - msg
      - type
      title: ValidationError
      type: object
    AggregateAllocationRecord:
      description: A volume for one aggregate timeseries and one Imbalance Settlement Period (ISP).
      properties:
        external_id:
          title: External Id
          type: string
        finality:
          $ref: '#/components/schemas/Finality'
          examples:
          - final
        flow_direction:
          enum:
          - consumption
          - production
          title: Flow Direction
          type: string
        isp_resolution_minutes:
          title: Isp Resolution Minutes
          type: integer
        isp_time:
          format: date-time
          title: Isp Time
          type: string
        known_at:
          format: date-time
          title: Known At
          type: string
        quality:
          $ref: '#/components/schemas/AllocationQuality'
          examples:
          - calculated
        volume_wh:
          title: Volume Wh
          type: integer
      required:
      - external_id
      - finality
      - flow_direction
      - isp_resolution_minutes
      - isp_time
      - known_at
      - quality
      - volume_wh
      title: AggregateAllocationRecord
      type: object
    AreaKind:
      description: '### Available area kinds


        - **metering_grid_area** — The area of one grid operator.


        - **control_area** — The area of one transmission system operator.


        - **scheduling_area** — See [Scheduling Area](/api-reference/core/models/scheduling-area).'
      enum:
      - metering_grid_area
      - control_area
      - scheduling_area
      title: AreaKind
      type: string
    AggregatorRole:
      description: '### Available aggregator roles


        - **grid_operator** — Indicates the source of the aggregation is a grid operator.


        - **transmission_operator** — Indicates the source of the aggregation is a transmission system operator.'
      enum:
      - grid_operator
      - transmission_operator
      title: AggregatorRole
      type: string
    AllocationRecord:
      description: A volume allocated to some Accounting Point for one Imbalance Settlement Period (ISP).
      properties:
        accounting_point_id:
          format: uuid
          title: Accounting Point Id
          type: string
        flow_direction:
          enum:
          - consumption
          - production
          title: Flow Direction
          type: string
        isp_resolution_minutes:
          title: Isp Resolution Minutes
          type: integer
        isp_time:
          format: date-time
          title: Isp Time
          type: string
        known_at:
          format: date-time
          title: Known At
          type: string
        quality:
          $ref: '#/components/schemas/AllocationQuality'
        volume_wh:
          title: Volume Wh
          type: integer
      required:
      - accounting_point_id
      - flow_direction
      - isp_resolution_minutes
      - isp_time
      - known_at
      - quality
      - volume_wh
      title: AllocationRecord
      type: object
  securitySchemes:
    apiKeyAuth:
      in: header
      name: Authorization
      type: apiKey