VOLTSTACK.ENERGY
Data Dictionary
voltstack.energy | London, UK
Version 1.8 · Updated 27 August 2026
Reference · Data Dictionary v1.8

Data Dictionary

Field-level reference for every value the Voltstack Data API returns: name, type, unit, source and meaning, plus the controlled vocabularies for zones, interconnectors, fuels, regions and sources.

Scope Live data domains (power, gas, commodities, weather) incl. settled history, plus the constraint & event layer (§14–25)
Units SI / market-standard; see §1 conventions
Revision Version 1.9 · Updated 8 September 2026
Access One key gate, set for the /v1 surface as a whole; keys are scoped by endpoint family; de-bess/custom additionally needs a Professional plan. See the access note below
Contact data@voltstack.energy
All payloads are wrapped in the standard response envelope (source, live, data, fetchedAt, cached, lastGood, reason, meta) — see the API Specification §4. The meta block names the upstream, unit and timezone; archive-backed payloads add completeness, gaps and dataAgeSeconds; multi-area payloads add a per-area areaStatus diagnostic. lastGood: true marks real data served from a retained last-good copy rather than a fresh upstream read. This dictionary documents the data object of each endpoint.
Access. The key gate is set for the documented /v1 surface as a whole: one deployment setting covers every documented path, and no section below states a key rule of its own. Key every request: the presented-key check runs ahead of the surface setting, so a request carrying a valid data API key in the X-API-Key header is unaffected by how that setting is configured, provided the key's scopes cover the endpoint. Keys are scoped by endpoint family (history for the settled-history endpoints, current for every other documented path, all for both), and a valid key presented on an endpoint outside its scopes is refused with 403 insufficient-scope; the refusal names the required scope and the key's granted scopes (Specification §03 and §08). As measured on 9 August 2026, a request carrying no key is refused with 401 api-key-required on every documented /v1 path, current feeds and settled history alike, with no documented path answering more openly than another; that statement is dated because the surface setting is deployment configuration and can be changed without any change to this document. A requirement beyond the key gate is a separate axis, and the API Specification states it on the endpoint that carries it: as at this revision the only one is /v1/benchmarks/de-bess/custom, which additionally requires the calling tenant to be on a Professional or Enterprise plan (Specification §06). The API Specification §03 is the authority on the access model, and where this dictionary and the specification disagree, the specification is correct. Keys: research@voltstack.energy.
VOLTSTACK DATA DICTIONARYPRODUCT DOCUMENTATION
01 — Power · Day-Ahead Price

/v1/power/day-ahead → data.{prices, changes}

FieldTypeUnitDescription
prices[zone]numberEUR/MWhDay-ahead price for the delivery slot covering the current time, keyed by bidding-zone code (see §1a).
changes[zone]numberEUR/MWhDay-on-day move vs the same delivery slot the previous day, keyed by bidding-zone code.
Both maps are keyed by the §1a zone codes. All 11 zones price in EUR; the payload carries no per-zone currency or unit fields.

§1a — Bidding-zone codes

CodeZoneCurrencySource
DE_LUGermany–LuxembourgEURENTSO-E
FRFranceEURENTSO-E
NLNetherlandsEURENTSO-E
BEBelgiumEURENTSO-E
ATAustriaEURENTSO-E
NO_1 / NO_2Norway (Oslo / Kr.sand)EURENTSO-E
SE_3Sweden (Stockholm)EURENTSO-E
DK_1Denmark (West)EURENTSO-E
ESSpainEURENTSO-E
IT_NORTHItaly (North)EURENTSO-E
GB is not part of this endpoint: ENTSO-E's A44 series carries nothing for GB. The GB day-ahead auction curve is served by /v1/history/n2ex-dayahead (§04a, GBP/MWh); the terminal's GB price tile reads the Elexon Market Index internally.
02 — Power · Cross-Border Flows

/v1/power/flows → data.flows

FieldTypeUnitDescription
flows[id]numberMWSigned net physical flow, keyed by interconnector identifier (see §2a). Positive = the link's normal direction; negative = reversed. Net of both directions at the border.
The payload is this one map. Nameplate capacities, direction labels and utilisation are not part of it; §2a below is the reference for reading each id's sign.

§2a — Interconnector identifiers

idLinkidLink
IFA_1 / IFA_2France ↔ GBFR_DEFrance ↔ Germany
NSLNorway ↔ GBDE_NLGermany ↔ Netherlands
BRITNEDNetherlands ↔ GBDE_ATGermany ↔ Austria
NEMOBelgium ↔ GBNO_SENorway ↔ Sweden
VIKINGDenmark ↔ GBES_FRSpain ↔ France
FR_ITFrance ↔ Italy  
03 — Power · Generation Mix

/v1/power/generation?country=XX&range=1D|1W|1M → data.{range, hours[]}

FieldTypeUnitDescription
rangestringWindow the response covers: 1D (default), 1W or 1M, served from the settled A75 archive. GB (Elexon) is 1D only.
hourstringHH:00Hour label. Multi-day ranges prefix the calendar day: MM/DD HH:00.
nuclear, coal, gas,
biomass, hydro, solar, wind
numberMWAverage generation in that hour for each fuel bucket. A fuel is omitted when it has no generation/data.

§3a — Fuel-bucket mapping

BucketENTSO-E PsrTypeElexon (GB)
gasB03, B04, B06, B20CCGT, OCGT, OIL, OTHER
coalB02, B05, B07, B08COAL
nuclearB14NUCLEAR
windB18, B19WIND
hydroB10, B11, B12, B13NPSHYD, PS
biomassB01, B09, B15, B17BIOMASS
solarB16n/a (GB solar is embedded/unmetered)
VOLTSTACK DATA DICTIONARY§1–3 · POWER
History request conventions — from / to are UTC ISO dates (YYYY-MM-DD), window capped at 3 years. When real coverage starts later than from, the payload declares it via oldestAvailable instead of silently returning a shorter series.
04 — Power · Day-Ahead History

/v1/history/day-ahead?zone=XX&from=…&to=… → data

FieldTypeUnitDescription
zonestringBidding-zone code (see §1a).
points[].tintegerepoch msDelivery-slot start (UTC). Resolution follows the market — PT60M or PT15M, inferred from point spacing per window.
points[].pnumberccy/MWhSettled day-ahead price for that slot (ENTSO-E A44 — the same series behind §1's live value).
oldestAvailablestringISO dateEarliest settled point held for the zone. Archive is ~2 years deep and extended daily.
04a — Power · GB N2EX Day-Ahead History

/v1/history/n2ex-dayahead?from=…&to=… → data

FieldTypeUnitDescription
zonestringFixed GB series — no zone parameter.
points[].tintegerepoch msDelivery-slot start (UTC); resolution inferred from point spacing, as §4.
points[].pnumberGBP/MWhSettled N2EX day-ahead auction price for that slot.
oldestAvailablestringISO dateTrue archive start, reported rather than silently truncated.
GB is §4's honest gap: ENTSO-E's A44 series carries nothing for GB, so the real GB auction curve comes from the Nord Pool N2EX data portal instead. Anonymous portal access backfills only ~2 months; depth past that accrues one day at a time from the live worker fetch. Same envelope and meta conventions as §4 (completeness, gaps, dataAgeSeconds); window capped at 3 years.
05 — Power · Realized Volatility

/v1/history/realized-vol?zone=XX&from=…&to=… → data

FieldTypeUnitDescription
zonestringBidding-zone code (see §1a).
points[].date / dateMsstring / integerISO date / epoch msDisplay day (UTC).
points[].vol7d, vol30d, vol90dnumber | nullccy/MWhRolling sample standard deviation of day-over-day changes in the daily baseload price over 7/30/90-day windows. Null while real history is thinner than the window.
oldestAvailablestringISO dateEarliest settled day-ahead point held for the zone.
A derived measure computed from §4's settled series, not a vendor-provided one — no free options data exists for EU power. Never annualized; log returns are deliberately not used because EU day-ahead prices go negative.
06 — Power · Merit Order

/v1/power/merit-order?country=XX → data

FieldTypeUnitDescription
countrystringDE or FR live today; capacity coverage DE, FR, ES, IT, NL, NO, SE, PL.
capacityYearintegeryearENTSO-E reference year of the capacity figures. Fuels retired before that year are excluded entirely, never carried forward stale.
stack[].fuelstringwind · solar · hydro · nuclear · biomass · coal · gas · oil, in ascending modeled cost.
stack[].installedMwnumberMWInstalled capacity (A68).
stack[].unavailableMwnumberMWSum of currently active derates from outage messages (A77/A80).
stack[].availableMwnumberMWinstalledMw − unavailableMw, floored at 0.
stack[].marginalCostnumberEUR/MWhModeled assumption, not a market quote — carried regardless of live status.
demandMw / demandAtnumber / stringMW / ISOLatest actual load (A65) and its delivery timestamp.
clearingPricenumberEUR/MWhModeled cost of the marginal fuel where the cumulative stack meets demand.
totalAvailableMwnumberMWSum of availableMw across the stack.
live is true only when capacity, derates and demand are all real for the requested country. Derate collection covers all eight countries (DE, FR, ES, IT, NL, NO, SE, PL); a zone the collector has not asked about is never presented as "zero MW unavailable" — the response falls back instead.
VOLTSTACK DATA DICTIONARY§4–6 · POWER HISTORY & MERIT ORDER
07 — Gas · Storage

/v1/gas/storage → data.{aggregate, countries[]}

FieldTypeUnitDescription
aggregate.currentLevelnumber%EU aggregate storage fullness.
aggregate.currentVolumenumberTWhWorking gas in store.
aggregate.workingCapacitynumberTWhTotal working capacity.
aggregate.gasDayStartstringISO dateGas day the value applies to.
countries[].idstringGIE_DE, GIE_IT, GIE_FR, GIE_NL, GIE_AT, GIE_UK.
countries[].currentPctnumber%Country storage fullness.
08 — Gas · LNG Terminals

/v1/gas/lng → data.{aggregate, countries[]}

FieldTypeUnitDescription
aggregate.sendOutnumberGWh/dLNG regasified and sent out to the grid — the LNG demand signal.
aggregate.sendOutUtilnumber%Send-out vs declared max send-out capacity (dtrs).
aggregate.fullnessnumber%LNG tank inventory vs declared max inventory.
aggregate.dtrsnumberGWh/dDeclared total reference send-out (max capacity).
countries[].idstringES, FR, NL, IT, BE.
countries[].sendOutnumberGWh/dCountry send-out.
countries[].fullnessnumber%Country tank fullness.
09 — Gas · Pipeline Flows

/v1/gas/pipeline-flows → data.{points[], total, gasDayStart}

FieldTypeUnitDescription
points[].idstringArtery key (e.g. dornum, mazara, tap, turkstream).
points[].labelstringInterconnection-point name.
points[].sourcestringSupply origin: Norway · Algeria · Azerbaijan · TurkStream.
points[].flownumberGWh/dPhysical entry flow, latest complete gas day.
totalnumberGWh/dSum across all arteries.
gasDayStartstringISO dateGas day of the values used.
10 — Weather

/v1/weather?regions=… → data[regionId][]

FieldTypeUnitDescription
datestringISO dateForecast day.
forecastHigh / Lownumber°C / °FDaily high / low (°C for EU regions, °F for US).
deviationnumberdegHigh vs seasonal-normal high.
hdd / cddnumberdeg-daysHeating / cooling degree days (base 18°C EU, 65°F US).
windSpeednumberkm/h · mphMax daily wind speed.
precipProbnumber%Max daily precipitation probability.
Degree-day base: 18°C (EU) / 65°F (US) by default. An optional base query parameter (°C, clamped 5–30) re-bases both HDD and CDD for the request; the base joins the server-side cache key, so different bases never share a cached value.
VOLTSTACK DATA DICTIONARY§7–10 · GAS & WEATHER
11 — Gas · Storage History

/v1/history/gas-storage?from=…&to=… → data

FieldTypeUnitDescription
points[].datestringISO dateGas day (UTC).
points[].levelnumber%EU aggregate storage fullness (GIE AGSI+ — the same series behind §7's live value).
points[].fiveYearAvg / Min / Maxnumber | null%Avg/min/max of the same calendar day across the five prior years — the display window is never compared against itself. Null while history is thinner than the band needs.
oldestAvailablestringISO dateEarliest EU aggregate row held. History from 2015-01-01.
12 — Gas · LNG Terminal History

/v1/history/lng-terminals?from=…&to=… → data

FieldTypeUnitDescription
points[].datestringISO dateGas day (UTC).
points[].sendOutnumber | nullGWh/dEU aggregate LNG send-out (GIE ALSI+).
points[].fullnessnumber | null%EU aggregate tank fullness.
oldestAvailablestringISO dateEarliest EU aggregate row held. History from 2015-01-01.
Deliberately no five-year band here: LNG send-out is driven by spot-arbitrage economics, not the repeatable seasonal shape underground storage has — a min/max/avg band would overclaim a "normal range".
13 — Commodities · Benchmarks

/v1/history/commodities?from=…&to=… → data

FieldTypeUnitDescription
series[].idstringSeries identifier (see §13a).
series[].freqstringdaily or monthly — read from the stored cadence, per series.
series[].points[].t / .vstring / numberISO date / see §13aObservation date and value, ascending.
oldestAvailableobjectEarliest row held, keyed per series id — cadences clamp at different depths. History from 2015-01-01.

§13a — Benchmark series

idBenchmarkFRED seriesUnitCadence
brentBrent crudeDCOILBRENTEUUSD/bblDaily
wtiWTI crudeDCOILWTICOUSD/bblDaily
henryhubHenry Hub natural gasDHHNGSPUSD/MMBtuDaily
eu_gasEU natural gas import pricePNGASEUUSDMUSD/MMBtuMonthly
coalAustralian thermal coalPCOALAUUSDMUSD/mtMonthly
VOLTSTACK DATA DICTIONARY§11–13 · GAS HISTORY & COMMODITIES
§14–25 document the constraint & event layer — the endpoints behind the dislocation widgets. None of these carries a simulated fallback: when an upstream has nothing, the envelope says so (live:false + reason) rather than inventing a value. An empty constraint radar is information; a fake binding constraint is not.
Point-in-time capture. Event-grade series in this layer (REMIT UMMs §19, unit outages §20, redispatch §16) are version-captured since 2026-07-14: every republished version is retained with its publication timestamp. Since 2026-07-31 an append-only vintage sidecar also records each capture pass of the four forecast feeds (§10 weather, §23 forecast risk, the GB NESO forecast behind §17a, the FR RTE forecast), keyed by capture timestamp. The as-of query API over these vintages follows in a later revision and is not yet part of the /v1 surface.
14 — Power · Imbalance Prices

/v1/power/imbalance → data.areas

FieldTypeUnitDescription
areas[id].pricenumberEUR/MWhLatest settled imbalance price for the area. Keys are country codes or DE_* control areas.
areas[id].atintegerepoch msStart of the settled 15-minute interval (UTC).
meta.areaStatus[id]stringok · stale (older settled interval) · estimator (DE_* only, see §15) · no-data.
EU areas come from ENTSO-E A85 queried per control area. Where an area still runs dual-direction pricing (e.g. FR publishes A04 excess and A05 deficit series), the deficit price is surfaced as "the" imbalance price — the number that prices a short position. The four German control areas never publish A85 to ENTSO-E at all (verified empirically); their rows come from the netztransparenz.de AEP estimator and are tagged estimator.
15 — Power · German Imbalance (AEP / reBAP)

/v1/power/imbalance-de → data

FieldTypeUnitDescription
pricenumberEUR/MWhLatest published 15-minute AEP estimator value — the near-real-time reBAP proxy.
atintegerepoch msInterval start (UTC).
series[].t / .vinteger / numberepoch ms / EUR/MWhToday's 15-minute estimator series.
Germany settles imbalance with one uniform price across all four control areas (reBAP), published on the TSOs' shared portal netztransparenz.de — not on ENTSO-E. The estimator is near-real-time; the quality-assured settled series follows with a ~2–3 week settlement lag. The settled cross-border marginal price and the TSOs' scarcity flag are in §17. Settled archive from 2022.
16 — Power · German Grid Stress (Redispatch + NRV)

/v1/power/grid-stress → data

FieldTypeUnitDescription
todayMwh / todayMeasuresnumberMWh / countToday's redispatch energy and measure count (UTC day).
activeNowintegercountMeasures whose window covers this instant.
median30dMwhnumber | nullMWhMedian daily redispatch energy over the trailing 30 days — today's norm.
nrvLatestMw / nrvLatestAtnumber | null / stringMW / ISOLive NRV system balance (Netzregelverbund saldo) and its interval.
daily[]arrayday, measures, totalMwh — 30-day daily series.
topPlants[]arrayplant, direction (increase|reduce), totalMwh, measures — today's most-instructed plants.
latest[]arrayplant, direction, start, stop, meanMw, totalMwh, instructingTso — most recent measures.
Redispatch is the grid stress zonal prices hide: DE_LU clears as one zone while the TSOs pay to move generation around the internal north–south constraint. Event archive from 2024-07 (~42 TWh of measures), extended continuously.
17 — Power · German Balancing Stress

/v1/power/balancing-stress → data

FieldTypeUnitDescription
afrrCapacity[] / mfrrCapacity[]arrayEUR/MWproduct (POS|NEG_hh_hh), direction (up|down), blockLabel (4-h block), marginalPrice, avgPrice, deliveryStart — latest capacity-auction clearing prices per product block (pay-as-cleared).
cbmpSeries[]arrayEUR/MWhat, cbmp, daPrice, spread — the PICASSO/MARI-derived cross-border marginal price (netztransparenz AEP Modul 1) against the DE_LU day-ahead price.
scarcityEvents[]arrayat, nrvSaldoMw — firings of the TSOs' own binary scarcity component (AEP Knappheitskomponente).
The scarcity flag is the TSOs' own published column, not a derived heuristic — 18 flagged quarter-hours in 4.5 years of history make it a genuine rare-event regime marker (most recent real episode: 2026-04-06, reBAP −6,642.76 EUR/MWh). Pairs with §16: that section shows the TSOs physically moving generation; this one shows the price the balancing market paid.
17a — Power · GB Balancing Skew

/v1/power/gb-balancing → data

FieldTypeUnitDescription
todayDatestringISO dateGB settlement day — LOCAL London day, not UTC.
bmMidSpread / bmMidSpreadAtnumber | null / stringGBP/MWh / ISOAccepted offer/bid spread vs the market index (MID) at the latest settlement period.
topOfStackOffer / topOfStackBidnumber | nullGBP/MWhHighest accepted offer and lowest accepted bid price in the stack.
midLatestnumber | nullGBP/MWhLatest MID market index price.
windForecastLatest / windOutturnLatest / windDeltaLatestnumber | nullMWNESO day-ahead wind forecast, Elexon outturn, and the forecast-vs-outturn delta.
nextDemandForecastobject | nullMW / ISOat, value — next NESO demand-forecast point ahead of now.
topUnits[]arrayunit, side, totalMw, acceptances, latestPrice — today's most-dispatched BM units.
Sources: Elexon Insights (BOD/BOALF/MID, event-grain acceptances) and the NESO Data Portal. The balancing-mechanism acceptance stream is stored event-by-event and exportable in bulk.
VOLTSTACK DATA DICTIONARY§14–17a · GERMAN & GB BALANCING
18 — Power · Constraint Radar (JAO Core FBMC)

/v1/power/constraints → data

FieldTypeUnitDescription
day / dayLabelstringISO date / —Delivery day shown: tomorrow once SDAC results land (~13:00 CET), else today.
totalBoundMtusintegercountDistinct MTUs with at least one binding CNEC that day.
constraints[]arraycnecName, direction, tso, hubFrom, hubTo, maxShadowPrice (EUR/MWh), boundMtus, worstMtu — binding flow-based network elements ranked by shadow price.
borders[]arrayMWborder ("DE → FR"), minTodayMw, medianMinMw, ratio — today's minimum MaxBex vs the 30-day median of daily minima. Ratio < 1 = tighter than usual.
MaxBex archive: 365-day backfill (~1.3M rows), extended daily from the JAO Publication Tool — where the Core flow-based grid actually binds, border by border. The Nordic flow-based domain (MaxBex, net positions) is ingested to the same store under identical conventions and available via bulk extract; a served Nordic radar follows demand.
19 — Power · REMIT Outage Ticker (UMM)

/v1/power/umm → data

FieldTypeUnitDescription
events[]arrayLatest version of each active urgent market message, newest publication first: externalId, version, eventType, area, assetName, assetEic, unavailableMw, eventStart, eventStop, publishedAt, status.
activeNowCount / activeNowMwinteger / numbercount / MWEvents whose unavailability window covers this instant, and their summed MW.
topAreas[]arrayMWarea, mw — largest currently-impacted areas.
Messages are versioned as republished; the latest version wins and cancelled/outdated messages drop out. Upstream: Nord Pool REMIT UMM.
20 — Power · French Nuclear Availability

/v1/power/fr-nuclear → data

FieldTypeUnitDescription
fleetMwnumberMWNominal nuclear fleet capacity constant the curve is derived against.
todayMw / weekAgoMwnumber | nullMWAvailable capacity today and seven days ago.
curve[]arrayMWday, availableMw — forward availability curve, today through D+90.
minPointobject | nullMWDeepest point of the forward curve.
outages[]arrayLatest-version active nuclear unit outages behind the curve: assetName, assetEic, unavailableMw, eventStart, eventStop, eventType, version.
Derived from ENTSO-E A77/A80 unit outage filings: fleet nominal minus the day's deepest active outage per unit, summed across units — a forward curve that rebuilds on every outage revision.
21 — Power · Nordic Hydro Balance

/v1/power/nordic-hydro → data

FieldTypeUnitDescription
areas[]array% · pparea, weekStart, fillPct, minPct, medianPct, maxPct, deviationPp, weekOverWeekPp — current reservoir fill vs the historical min/median/max band for the same ISO week.
nationalDeviationTwhnumber | nullTWhNational deviation expressed in energy (deviation × national reservoir capacity) — traders think in TWh, not percent.
nationalCapacityTwhnumberTWhNVE national reservoir capacity constant.
NVE Magasinstatistikk, weekly cadence, history from 1995 — thirty years of the structural driver behind Nordic and German power.
VOLTSTACK DATA DICTIONARY§18–21 · CONSTRAINTS & FUNDAMENTALS
22 — Gas · GB Physical System

/v1/gas/gb-system → data

FieldTypeUnitDescription
asOfstring | nullISOTimestamp of the freshest instantaneous reading.
supplyTotalMcmD / demandTotalMcmDnumber | nullmcm/dSystem-wide supply and demand totals.
linepackMscm / linepackDayAgoMscmnumber | nullmscmActual NTS linepack and the same-time-yesterday value (matched within a ±2 h window, never an arbitrarily old point).
entryPoints[]arraymcm/dsite, slug, flowMcmD — instantaneous flow by terminal/entry point.
demandByCategory[]arraymcm/dcategory, flowMcmD — LDZ, power stations, industrial, interconnector, storage.
demandForecast[]arrayGWh/dgasDay, valueGwhD — D-1-published NTS demand forecast for the coming gas days.
National Gas Transmission Data Portal (open data policy). GB-only by design: the Norwegian (Gassco) half is parked pending access terms and listed under Pending Integrations on the public status page.
23 — Weather · Forecast Risk

/v1/weather/forecast-risk → data.zones[]

FieldTypeUnitDescription
zone / daystringZone id and the forecast day evaluated.
variables[].deltaSigned / deltaAbsnumber | nullper variableD+1 run-to-run forecast change (signed and absolute) for temperature, wind, solar.
variables[].deltaPercentilenumber | null%Today's |delta| ranked against the series' own trailing 30-day distribution.
variables[].spread / spreadPercentilenumber | nullper variable / %Ensemble spread and its percentile rank.
variables[].deltaHistoryDays / spreadHistoryDaysintegerdaysHow much history the percentile actually stands on.
Forecast vintages cannot be backfilled, so this series is vintage-native by construction: the band grows one day at a time, and a young series reports its real day count instead of a fabricated percentile.
24 — Benchmarks · DE BESS Revenue Index

/v1/benchmarks/de-bess → data  ·  custom configs: /v1/benchmarks/de-bess/custom

FieldTypeUnitDescription
configobjectReference battery: powerMw 1, energyMwh 2, roundTripEfficiency 0.9, cyclesPerDay 1.5.
months[]arrayEUR/MWmonth, arbitrageEur, afrrCapacityEur, mfrrCapacityEur, fcrCapacityEur, combinedEur plus per-stream day counts — monthly revenue per MW by stream.
monthToDateobject | nullEUR/MWThe current month's running figure.
imbalanceContext[]arrayMonthly AEP context (not a modeled revenue stream in this version).
oldestAvailableobjectISO dateArchive start per input stream (arbitrage, aFRR, mFRR, FCR).
Arbitrage is an exact perfect-foresight optimization on settled DE_LU day-ahead prices — an upper bound, and labeled as one. Capacity legs settle at pay-as-cleared prices from regelleistung.net. Full methodology and assumption table are published with the benchmark.
25 — Data Quality · Cross-Validation

/v1/health/cross-checks → checks[]  ·  the same verdicts are also rendered on the public /status page

FieldTypeUnitDescription
checks[].series / zonestringVerdict series and its human label, e.g. DE_LU vs SMARD.
checks[].daystringISO dateDelivery day reconciled.
checks[].meanAbsDiffnumberEUR/MWhMean absolute difference between the Voltstack archive and the reference for that day.
checks[].pass / checkedAtboolean / string— / ISOVerdict and when the harness ran.
A nightly harness reconciles the settled day-ahead archive against Bundesnetzagentur SMARD (CC BY 4.0) — an independent reference — for every zone SMARD also publishes, plus Fraunhofer ISE Energy-Charts for DE_LU as a pipeline check: Energy-Charts' price endpoint is itself SMARD-sourced (per its own license_info), so that comparison validates our plumbing rather than adding source independence. Restatement risk is measured daily, not assumed away. This endpoint returns a plain payload, not the standard envelope.
VOLTSTACK DATA DICTIONARY§22–25 · GAS PHYSICALS, RISK & BENCHMARKS
26 — Source Registry

The source field in every envelope maps to one of the following upstreams.

sourceProviderDomainsCadence
entsoeENTSO-E Transparency Platform (Web API; File Library extracts as the persisted fallback for prices, load, generation, imbalance and cross-border flows)Power prices, flows, generation, installed capacity, outages, loadIntraday / hourly / yearly
elexonElexon BMRS (Insights)GB price & generationHalf-hourly
gie-agsiGIE AGSI+Gas storageDaily (per gas day)
gie-alsiGIE ALSI+LNG send-out & inventoryDaily (per gas day)
entsogENTSOG Transparency PlatformGas pipeline flowsDaily (settled D+1)
fredFRED — Federal Reserve Bank of St. LouisCommodity benchmarks (oil, gas, coal)Daily / monthly
open-meteoOpen-Meteo / ECMWFWeather, HDD/CDD, forecast riskSeveral runs/day
jao-constraintsJAO Publication Tool (Core FBMC)Binding CNECs, shadow prices, MaxBexDaily (SDAC results ~13:00 CET)
netztransparenznetztransparenz.de (shared German TSO portal)AEP/reBAP imbalance, redispatch, NRV, CBMP, scarcity flag15-min, near-real-time
regelleistung-capacityregelleistung.netFCR/aFRR/mFRR capacity clearing pricesDaily auctions
umm-eventsNord Pool REMIT UMMUrgent market messages (outages, unavailability)Continuous, versioned
nve-hydroNVE Magasinstatistikk (NLOD licence)Norwegian reservoir fill, history from 1995Weekly
national-gasNational Gas Transmission Data Portal (open data)GB entry flows, linepack, demand, NTS forecastInstantaneous, multiple updates/day
cross-validateSMARD (Bundesnetzagentur, CC BY 4.0) · Energy-Charts (Fraunhofer ISE)Independent day-ahead reconciliation verdictsNightly
de-bessVoltstack derived (ENTSO-E A44 · regelleistung.net · netztransparenz AEP)DE battery revenue indexDaily
n2ex-dayaheadNord Pool N2EX data portalGB day-ahead settled auction pricesDaily
elexon-bmElexon Insights (BOD/BOALF/MID)GB balancing mechanism: acceptances, top-of-stack, BM-vs-MID spreadHalf-hourly settlement periods
neso-forecastNESO Data PortalGB day-ahead wind + demand forecast, wind-vs-outturn deltaDaily forecast, intraday outturn
entsoe-idaENTSO-E intraday auctions (IDA1–3)IDA prices + DA–IDA spread; ES only (sole voluntary publisher)Three auctions/day
jao-nordicJAO Publication Tool (Nordic FBMC)Nordic MaxBex + net positions, stored; bulk extractDaily (SDAC results)
eex-eua-auctionEEX (licensed 2026-07-29; primary-auction results only — spot & futures excluded)EU ETS EUA primary-auction clearing prices; history from 2020; cancelled auctions carried as first-class rowsAuction-day (EU ~every 2 days · NIR ~yearly; per-zone freshness on meta.areaStatus)
rteRTE (France) data portal — generation forecast APIFR wind, solar & aggregate generation forecast, per horizon (D-1 / intraday / nowcast); terminal today, /v1 path to follow~4-hourly worker pass
history / merit-orderVoltstack settled archiveAll §4–6, §11–13 and archive-backed §14–25 endpoints; the originating provider is named in meta.upstreamExtended daily by the ingestion worker
27 — Enumerations

reason (when live = false)

ValueMeaning
no-tokenUpstream credential not configured server-side; the feed upgrades the moment its key lands.
upstream-errorUpstream API failed, timed out, or returned unparseable data.
rate-limitedRequest backed off to respect an upstream limit.
bad-requestThe request itself was invalid — an unknown feed or series, or a malformed parameter — and is served with an HTTP 4xx status. Correct the request; retrying unchanged will not help. Distinct from upstream-error, which reports a failure on Voltstack's side or the provider's.
disabledFeed explicitly turned off via a server-side flag.

currency

CodeSymbolApplies to
EURContinental & Nordic power, EU gas/LNG/carbon
GBP£GB power

weather region ids

EU_DE, EU_FR, EU_GB, EU_NL, EU_BE, EU_ES, EU_IT, EU_NO, EU_SE, EU_PL · ERCOT_COAST, ERCOT_NORTH, ERCOT_WEST, NE_BOSTON, MW_CHICAGO, SE_ATLANTA

merit-order fuels (§6, ascending modeled cost)

wind, solar, hydro, nuclear, biomass, coal, gas, oil

Live coverage as at 2026-07-31. Exchange-licensed forward and spot domains (EUA/UKA spot & futures, TTF/NBP gas curves, Brent/WTI oil) follow the same field conventions and are documented per-tenant on entitlement; EEX EUA primary-auction results are live and covered by §26's eex-eua-auction row.
v1.8 · 2026-08-27: §27's reason enum gains bad-request, returned with a 4xx when the caller's own parameters are invalid (an unknown feed or series, a malformed instant or window) so a keyed client can tell a request mistake from an outage; previously such requests answered 200 upstream-error, indistinguishable from a capture-pipeline failure. First served by the point-in-time vintages endpoint. No field, type or unit changed. v1.7 · 2026-08-27: the access note records the key gate's second refusal: keys are scoped by endpoint family (history, current, all), and a valid key presented on an endpoint outside its scopes is refused 403 insufficient-scope. Documentation catch-up to the shipped gate; Specification §03/§08 remains the authority on the access model. No field, type or unit changed. v1.6 · 2026-08-09: §24 no longer describes its endpoint as "public, no auth", which was false against the shipped gate, measured 401 unkeyed on every documented /v1 path. The key gate is now stated once, for the surface, in the access note under the lede, and no section carries a per-endpoint key rule; that note also records the one endpoint carrying a plan requirement beyond the key gate, which is where this dictionary and Specification §06 have to agree. §25's "public" attaches explicitly to the /status page. No field, type or unit changed. v1.5 · 2026-08-08: §7's storage country list and §27's weather region ids each gain the one id that was being served and had never been documented. No field, type or unit changed. v1.4 · 2026-07-31: document version and date published as machine-readable meta tags (voltstack-doc-version, voltstack-doc-updated) and printed in the page header; the PDF edition is served alongside the HTML at /docs/. v1.3 — 2026-07-31: §1/§2 corrected to the served map shapes (GB pointer moved to §04a); phantom commodities-benchmarks path removed from §13; §10 degree-day base parameter documented; §25 cross-validation independence phrasing corrected; §26 gains eex-eua-auction and rte; §27 reason enum corrected; envelope note gains lastGood and areaStatus; point-in-time capture note added to §14–25. © 2026 Voltstack.
VOLTSTACK DATA DICTIONARYdata@voltstack.energy