gas-risiko.deData & API Access
Status
For analysts & developers

European gas storage data, ready for your workflow

gas-risiko.de publishes structured, machine-readable JSON data covering daily storage levels, 14-day ARIMAX forecasts with full quantile bands, 365-day seasonal outlooks, cross-border flow z-scores, and refill stress scenarios — updated every morning from primary sources.

Request access →Methodology →Status →OpenAPI →
Live data status

All datasets show export freshness versus the JSON build time. Production runs twice daily on Europe/Berlin time (≈06:00 morning refresh and ≈23:45 after AGSI+ evening publication), sourcing AGSI+, ENTSO-G, Open-Meteo, SMARD, and TTF. A GitHub Actions backup may run around 00:30 UTC. Amber in the table can mean an upstream source is still flagged stale even when the export is recent.

Access tiers

Two tiers, one clear boundary

Tier 0The ObserverFree

Full public dashboard for all 7 countries. Best-effort data, no account required.

All 7 countries — DE · IT · NL · AT · FR · CZ · PL
14-day forecast, corridor stress, refill stress
Annual outlook with preset scenarios (read-only)
Open data API (/api/*) — no key required, ETag caching, fair-use IP limit
Best-effort freshness — AGSI+ source lag of 2–3 days applies; no SLA, no contractual quota
Tier 1The Independent Analyst
€99/mofounding price · list price €149–249/mo

Authenticated API integration for analysts, consultants, and independent researchers. Founding price held for early subscribers.

Everything in Tier 0
Authenticated /api/v1/* — pass your issued key in the Api-Key request header; responses include RateLimit-Limit/Remaining/Reset
500 API calls/day · 60 requests/minute
All 7 countries on /api/v1/*
Annual scenario lab — preset library + custom sliders
Email support — info@mh-analytics.eu
No formal SLA during early access (best-effort, target next business day)
Sign up pausedSign in

Higher tiers (The Strategic Hub · The Enterprise Grid) with forecast vintages / as-of API, PDF reports, webhook alerts, and raw Monte Carlo paths are in development. Contact info@mh-analytics.eu for early interest.

Available datasets

Five structured feeds

14-day forecast
/api/data?country=DE
Update
2× daily ~06:00 & ~23:45 Berlin
Max lag
< 26 h
fill_level_pctstorage_pct_rankrequired_injection_rate_ppdayP10/P25/P50/P75/P90p_alarmsource_statusseasonal_profilestorage_type_breakdowncoefficientsdiagnostics
Annual outlook (365d)
/api/annual?country=DE
Update
2× daily ~06:00 & ~23:45 Berlin
Max lag
< 36 h
baseline p10/p50/p90standardised scenarioswinter_minimum (OLS)p_breach_15pctood_boundsscenario_translation_metaess_paths
Scenario library
/api/scenarios?country=DE
Update
2× daily with annual outlook
Max lag
< 36 h
category / severityparametersdelta_winter_min_ppdelta_se_at_winter_mincorridor_metadatascenario_translation_meta
Flow corridors
/api/network?country=DE
Update
2× daily ~06:00 & ~23:45 Berlin
Max lag
< 26 h
flow_gwhcapacity_gwhutilization_pcttrailing_30d_meanzscore_30dis_lngstress_flag
Refill stress scenarios
/api/refill-stress?country=DE
Update
2× daily ~06:00 & ~23:45 Berlin
Max lag
< 48 h
sensitivity_gridcritical_boundaryoct31_fill_pcttarget_shortfall_twhdays_below_15seasonal_rates
Countries covered: DE · NL · FR · IT · AT · CZ · PL — pass ?country=XX to all endpoints.
Sample response

Inspect a real payload

All responses are versioned JSON with a contract_version or endpoint-specific contract-version field. Quantiles are always monotone; NaN values are serialised as null.

GET /api/data?country=DE (excerpt)
{
  "contract_version": "1.0",
  "generated_at": "2026-04-26T04:07:33.912Z",
  "latest": {
    "date": "2026-04-24",
    "fill_level_pct": 37.42,
    "gas_in_storage_twh": 182.1,
    "storage_pct_rank": 31.4,
    "required_injection_rate_ppday": 0.284,
    "d_current": 0.91
  },
  "predictions": [
    { "date": "2026-04-25", "P10": 36.8, "P50": 37.6, "P90": 38.4 },
    { "date": "2026-04-26", "P10": 36.2, "P50": 37.1, "P90": 38.0 }
  ],
  "seasonal_profile": {
    "120": { "p10": 44.8, "p50": 56.1, "p90": 66.8 }
  },
  "storage_type_breakdown": {
    "country": "DE",
    "cavern_fraction": 0.49,
    "pore_fraction": 0.51
  },
  "source_status": {
    "agsi": { "stale": false, "last_date": "2026-04-24", "fetched_at": "2026-04-26T03:55Z" },
    "ttf":  { "stale": false, "last_date": "2026-04-25", "fetched_at": "2026-04-26T04:01Z" }
  }
}
Use cases

Who uses this data

Gas & power trading desks
Monitor storage percentile rank vs history, track required injection pace vs current day-over-day change, and catch corridor z-score anomalies before prices move.
Energy risk management
Use P10/P50/P90 annual trajectories and winter minimum OLS predictions to stress-test portfolios and validate VAR models against physical storage constraints.
Structured products & derivatives
The p_breach_15pct_any_winter probability and corridor stress flags provide independent physical reference points for exotic option pricing and winter-delivery contract structuring.
Academic & policy research
Structured historical fill series with source metadata, model diagnostics (Ljung-Box, VIF, HAC standard errors), and full methodology documentation published with each run.
Utilities & grid operators
Daily injection pace gap (pp/day needed to meet 90% Oct 31 target) and corridor utilisation ratios integrate directly into dispatch planning and balancing tools.
Quantitative model input
JSON payloads are versioned and schema-validated in CI. Supply to LLMs, time-series models, or scenario engines without manual data cleaning.
Scientific standards

Rigorous, non-alarmist, transparent

ARIMAX with HAC errors
Country-specific ARIMAX models with Newey-West HAC standard errors. All diagnostics (Ljung-Box, Jarque-Bera, VIF, Durbin-Watson) exposed in API response.
Conformal calibration
Forecast bands are calibrated using rolling conformal prediction (κ multiplier) to achieve target 80% coverage on held-out windows. Coverage status exposed per country.
Seasonal block bootstrap
365-day annual outlook uses recency-weighted seasonal path ensemble (not point forecast extrapolation). ESS tracks how many historical years dominate.
OOD detection
Scenario parameters exceeding ±3σ of training data are flagged with ood_flag and ood_variables — so users always know when they are extrapolating.
Trust & compliance

Practical information for procurement

Infrastructure
Hosted on Hetzner Online GmbH (ISO 27001 certified). Automated daily pipeline with GitHub Actions backup. JSON data additionally mirrored to GitHub for redundancy.
Data Processing Agreement
A GDPR-compliant Data Processing Agreement (DPA / Art. 28 GDPR) is available on request for institutional integrations. Contact info@mh-analytics.eu.
Open-source auditability
The full pipeline, model code, and schema definitions are published on GitHub under MIT licence — allowing independent audit of data lineage, model assumptions, and output reproducibility.
MSA & data licence
The source code is MIT-licensed. Commercial use of the API output (embedding in paid products, redistribution) requires a separate data licence. Contact info@mh-analytics.eu to discuss terms.
Legal documents

Contract templates for procurement

SLA template
Data licence / MSA template
DPA / AVV template
Security statement
OpenAPI 3.1

Machine-readable API contract

The full OpenAPI 3.1 specification covers public endpoints and authenticated /api/v1 routes, request parameters, response schemas, examples, error models, cache/ETag semantics, and RateLimit headers. Use it to generate client stubs, validate integration tests, or run in Swagger UI.

View OpenAPI spec →Open in Swagger UI →
Integration examples
curl — 14-day forecast, Germany
curl -s "https://gas-risiko.de/api/data?country=DE" \
  -H "Accept: application/json" | jq '.latest,.predictions[:2]'
curl — conditional GET (ETag / 304)
ETAG=$(curl -sI "https://gas-risiko.de/api/data?country=DE" | grep -i etag | awk '{print $2}' | tr -d '\r')
curl -sv "https://gas-risiko.de/api/data?country=DE" -H "If-None-Match: $ETAG"
curl — authenticated API v1 with quota headers
curl -i "https://gas-risiko.de/api/v1/data?country=DE" \
  -H "Accept: application/json" \
  -H "Api-Key: $GAS_RISIKO_API_KEY"
curl — scenario catalogue, Germany
curl -s "https://gas-risiko.de/api/scenarios?country=DE" \
  -H "Accept: application/json" \
  | jq '.scenarios[] | {id:.scenario_id,category,delta:.delta_winter_min_pp}'
Python — poll for new data using ETag
import requests, json

BASE = "https://gas-risiko.de"
etag = None

def fetch_if_changed(country: str = "DE") -> dict | None:
    global etag
    headers = {"If-None-Match": etag} if etag else {}
    r = requests.get(f"{BASE}/api/data", params={"country": country}, headers=headers)
    if r.status_code == 304:
        return None  # data unchanged
    r.raise_for_status()
    etag = r.headers.get("ETag")
    return r.json()

data = fetch_if_changed("DE")
if data:
    latest = data["latest"]
    print(f"Fill: {latest['fill_level_pct']:.1f}%  "
          f"P50 d+1: {data['predictions'][0]['P50']:.1f}%")
Python — annual winter-minimum risk for all 7 countries
import requests

COUNTRIES = ["DE", "NL", "FR", "IT", "AT", "CZ", "PL"]
BASE = "https://gas-risiko.de"

risks = {}
for c in COUNTRIES:
    r = requests.get(f"{BASE}/api/annual", params={"country": c})
    r.raise_for_status()
    d = r.json()
    risks[c] = {
        "winter_min_p50": d["baseline"]["winter_minimum"]["p50"],
        "p_breach_15pct":  d["baseline"]["p_breach_15pct_any_winter"],
        "ood_bounds": d.get("ood_bounds", {}),
    }

for c, v in sorted(risks.items(), key=lambda x: x[1]["p_breach_15pct"], reverse=True):
    print(f"{c}  winter-min P50={v['winter_min_p50']:.1f}%  "
          f"P(breach 15%)={v['p_breach_15pct']:.0%}")

Integrate gas-risiko.de data into your stack

Write to discuss data licensing, update SLAs, custom country coverage, white-label deployment, or integration support.

info@mh-analytics.eu →

Data is updated daily from public primary sources (AGSI+, ENTSO-G, Open-Meteo, SMARD, TTF). This site does not constitute financial advice. Forecasts carry explicit uncertainty — always check diagnostics and interval coverage before use in production systems.