Voltstack Data API

Data API v1

A read-only REST API over the same feed layer the product runs on. Key every request: the data API key goes in the X-API-Key header, and you can request one at research@voltstack.energy. As at 22 September 2026 a keyed request is answered at full depth on every path below, and a request carrying no key is answered as a labelled sample: the envelope gains a sample block, current feeds serve their usual recent window, and history is limited to the most recent 30 days. Build every integration keyed: a keyed call is never narrowed or labelled, whatever happens to anonymous access. Responses are JSON with a live flag and a data-age timestamp, so you can tell exactly what you are looking at, the same honesty rule as /status.

Base URL

https://api.voltstack.energy/v1

Try it (bring a key)

curl -H "X-API-Key: YOUR_KEY" \
  https://api.voltstack.energy/v1/power/day-ahead

History, with its required window

curl -H "X-API-Key: YOUR_KEY" \
  "https://api.voltstack.energy/v1/history/day-ahead?zone=DE_LU&from=2026-01-01&to=2026-07-01"

With no key, as at 22 September 2026: a labelled sample

HTTP 200, the same envelope plus:
"sample":{"sample":true,"window":"recent","detail":"Anonymous sample tier. Full depth requires a data API key …"}

With no key, as at 22 September 2026: history before the 30-day window

HTTP 401
{"error":"api-key-required","detail":"Anonymous access is limited to a 30-day sample window. Full-depth history requires a data API key in the X-API-Key header. Request one at research@voltstack.energy."}

PAUSEDAs at 24 September 2026 the endpoints that carry JAO, Nord Pool N2EX or netztransparenz.de data are paused while we confirm redistribution rights with those publishers, so they are not listed below. Each answers HTTP 451 to every request, keyed or not, with {"error":"unavailable","reason":"This dataset is paused while we confirm redistribution rights with its publisher."}

API KEYAs at 22 September 2026 this applies to every endpoint listed below, current feeds included: a key is what moves each of them from the labelled sample to full depth, and no endpoint answers an unkeyed request more fully than another. The badges on individual rows flag the other things a call needs, not the key.

Power

Gas

  • EU gas storage levels and flows (GIE AGSI+).

  • LNG terminal inventories and sendout (GIE ALSI+).

  • Cross-border pipeline flows (ENTSOG).

  • GB gas system: demand, supply mix, linepack (National Gas).

  • Norwegian gas system events: field and terminal unavailability as Gassco REMIT urgent market messages. Events, not flows.

Carbon

  • EU Allowance primary auction results by auctioning entity: clearing price, volume, cover ratio and bidders (Source: EEX). No spot or futures prices.

Weather

History

Benchmarks

Health

  • Nightly cross-validation of our series against independent sources, with per-series pass/fail.

Documentation

Provenance

Every series is fetched from its primary source (ENTSO-E, GIE, ENTSOG, Elexon, National Gas, JAO, netztransparenz.de, Open-Meteo, FRED) by a background worker and cross-validated nightly against independent references. The current result is served at /v1/health/cross-checks: key that request like any other. Feed-level freshness and completeness are on /status.