meta object that describes provenance, time range, and resolution, plus a data array containing the endpoint-specific payload rows. Understanding this envelope helps you verify what the server resolved and how the data was produced.
The envelope
A typical response looks like this:string
required
Whether the data is directly measured or computed:
measured- raw data from upstream sources such as ENTSO-Ederived- computed from other signals, such as flows calculated from prices and scheduled exchanges
string | null
The applied aggregation resolution:
native, 1H, 1D, or 1W. null only on endpoints that don’t accept a resolution parameter at all (/flow-duration, /price-kpis, /zone-import-export) — it is never null for native data, which reports the literal string "native".datetime | null
The UTC start datetime the server actually used after resolving relative shortcuts.
datetime | null
The UTC end datetime the server actually used after resolving relative shortcuts.
string[] | null
A list of upstream data sources, for example
["ENTSO-E Transparency Platform"].object | null
Present only on
/flows; null on every other endpoint. See Pagination below.array
The payload rows. The exact schema varies by endpoint.
Datetime parameters
You can specify time ranges using either absolute ISO 8601 datetimes or relative shorthand. Absolute format:now- current UTC timenow-30d- 30 days agonow-7d- 7 days agonow-1H- 1 hour agonow-15m- 15 minutes ago
resolved_datetime_from and resolved_datetime_to in the response meta to confirm the actual range used.
Resolution
Theresolution query parameter controls how data is aggregated. Available options:
auto(default) - the server selects a resolution based on the width of the date range. Recommended for most use cases.native- raw data. Capped to a 2-day range: a wider explicitnativerequest returns422instead of running.1H- hourly aggregation. Capped to a 14-day range for the same reason; wider explicit1Hrequests also return422.1D- daily aggregation1W- weekly aggregation
native and 1H only apply when you set them explicitly. auto is the escape hatch for wider ranges — it downgrades resolution as the range widens (native up to 2 days, 1H up to 14 days, 1D up to 90 days, 1W beyond that) instead of failing, so it never needs a cap of its own.
Resolution is not available on
/api/v1/flow-duration, /api/v1/price-kpis, and /api/v1/zone-import-export.Pagination
GET /api/v1/flows accepts limit (1–20,000, default 20,000) and offset (default 0). Rows are ordered by (datetime, bidding_zone_from, bidding_zone_to, flow_type) before slicing, so page boundaries are stable across requests. meta.pagination reports the unsliced row count:
meta.pagination is always null.
To pull a full result set, page while offset + limit < total, incrementing offset by limit each request. Pin datetime_from/datetime_to to absolute ISO timestamps first: the now-30d/now relative defaults re-resolve on every request, so the window — and total — would shift underneath a multi-page walk.
Pagination caps response size, not fetch cost or latency. The full range is still fetched and resampled server-side on each cache miss, and the API’s 30-second request timeout still bounds how wide a single request’s range can be, regardless of resolution or paging. For a multi-month pull, chunk the date range client-side (monthly is reasonable) and page within each chunk.
Rate limits
Requests are limited per API key: capacity 200, refilled at 120/min (2/sec). A request over the limit returns429 with a Retry-After header giving the exact number of seconds to wait — scripts doing bulk pulls should sleep on that value directly rather than guessing or backing off.
Interpolated flag
Some rows include aninterpolated or flow_interpolated boolean. When this flag is true, the value was estimated to fill a gap in the upstream data rather than directly observed.
- PriceRow:
interpolatedindicates a gap-filled price - FlowTypeRow:
flow_interpolatedindicates a gap-filled flow
Error responses
When query parameters fail validation, the API returns a422 Validation Error with a standard error body.
Example 422 response
detail array contains one or more error objects with the following fields:
array
required
The location of the invalid input, typically
["query", "<parameter_name>"].string
required
A human-readable description of what went wrong.
string
required
The error type classification, for example
enum for invalid enum values.