Gas Storage REST API
AGSI+ Integration: Europäische Gasspeicher-Daten, EU 90% Mandate Tracking, Supply Security Assessment.
📡 Endpunkt
POST /api/gas-storage/country-storage
🌍 EU Mandate
90% bis 1. Nov
⏱️ Response
400-800ms
📊 Data Source
AGSI+ Platform
REST API Dokumentation
HTTP Endpunkt
POST https://api.cernion.de/api/gas-storage/country-storage
Request Parameters
| Parameter | Typ | Required | Beschreibung |
|---|---|---|---|
country |
string | ✅ Ja | ISO-2 Code: "DE", "FR", "IT", "AT", "NL", etc. (27 EU-Länder) |
date |
string | ❌ Nein | YYYY-MM-DD Format, default: heute (AGSI+ daily update 08:00 CET) |
includeOperators |
boolean | ❌ Nein | Storage System Operator Breakdown - default: false |
includeFacilities |
boolean | ❌ Nein | Individual Facility Details (UGS) - default: false |
Beispiel Request
{
"country": "DE",
"date": "2026-02-08",
"includeOperators": true,
"includeFacilities": false
}
Response Schema
{
"success": true,
"country": "Germany",
"countryCode": "DE",
"date": "2026-02-08",
"gasInStorage": {
"value": 18234.56,
"unit": "GWh"
},
"fullCapacity": {
"value": 23465.8,
"unit": "GWh"
},
"fillLevel": {
"percentage": 77.7,
"status": "ADEQUATE"
},
"euMandate": {
"targetDate": "2026-11-01",
"targetFillLevel": 90,
"currentProgress": 86.3,
"daysRemaining": 266,
"status": "ON_TRACK",
"message": "7.3% below target, 266 days remaining"
},
"injection": {
"dailyRate": 234.5,
"weeklyTrend": "+1.8%",
"unit": "GWh/day"
},
"withdrawal": {
"dailyRate": 89.3,
"weeklyTrend": "-5.2%",
"unit": "GWh/day"
},
"supplySecurityCheck": {
"coverageDays": 156,
"status": "SECURE",
"alerts": []
},
"operators": [
{
"name": "RWE Gas Storage West",
"eicCode": "21X000000001262B",
"gasInStorage": 5234.2,
"capacity": 6780.5,
"fillLevel": 77.2,
"facilities": 12
},
{
"name": "Uniper Energy Storage",
"eicCode": "21X-DE-UNIPERS1",
"gasInStorage": 4123.8,
"capacity": 5890.3,
"fillLevel": 70.0,
"facilities": 8
}
],
"metadata": {
"source": "AGSI+ Transparency Platform (GIE)",
"lastUpdate": "2026-02-08T08:00:00Z",
"dataQuality": "VERIFIED"
}
}
Code-Beispiele
curl -X POST https://api.cernion.de/api/gas-storage/country-storage \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"country": "DE",
"includeOperators": true
}'
const API_TOKEN = 'YOUR_API_TOKEN';
async function checkGasStorage(country = 'DE') {
const response = await fetch(
'https://api.cernion.de/api/gas-storage/country-storage',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
country,
includeOperators: true,
includeFacilities: false
})
}
);
const data = await response.json();
console.log(`\n=== ${data.country} Gas Storage Status ===`);
console.log(`Date: ${data.date}`);
console.log(`Fill Level: ${data.fillLevel.percentage}% (${data.fillLevel.status})`);
console.log(`Storage: ${data.gasInStorage.value.toFixed(0)} / ${data.fullCapacity.value.toFixed(0)} GWh`);
console.log(`Coverage: ${data.supplySecurityCheck.coverageDays} days\n`);
// EU Mandate Check
const mandate = data.euMandate;
console.log('=== EU 90% Mandate ===');
console.log(`Target: ${mandate.targetFillLevel}% by ${mandate.targetDate}`);
console.log(`Progress: ${mandate.currentProgress}%`);
console.log(`Status: ${mandate.status} (${mandate.message})\n`);
// Top 3 Operators
console.log('=== Top 3 Storage Operators ===');
data.operators.slice(0, 3).forEach((op, i) => {
console.log(`${i+1}. ${op.name}: ${op.fillLevel}% (${op.gasInStorage.toFixed(0)} GWh)`);
});
// Alert if below 70%
if (data.fillLevel.percentage < 70) {
console.warn(`\n⚠️ WARNING: Fill level below 70% - Supply risk!`);
}
return data;
}
// Multi-Country Comparison
async function compareEUStorage() {
const countries = ['DE', 'FR', 'IT', 'AT', 'NL'];
const results = await Promise.all(
countries.map(c => checkGasStorage(c))
);
console.log('\n=== EU Storage Comparison ===');
results.forEach(r => {
console.log(`${r.country}: ${r.fillLevel.percentage}% - ${r.euMandate.status}`);
});
}
checkGasStorage('DE');
import requests
import pandas as pd
from datetime import datetime, timedelta
API_TOKEN = 'YOUR_API_TOKEN'
class GasStorageMonitor:
def __init__(self, api_token):
self.api_token = api_token
self.base_url = 'https://api.cernion.de/api/gas-storage'
def get_country_storage(self, country='DE', include_operators=True):
"""Fetch gas storage data for a country"""
response = requests.post(
f'{self.base_url}/country-storage',
headers={
'Authorization': f'Bearer {self.api_token}',
'Content-Type': 'application/json'
},
json={
'country': country,
'includeOperators': include_operators
}
)
return response.json()
def check_supply_security(self, country='DE'):
"""Analyze supply security status"""
data = self.get_country_storage(country)
print(f'\n=== {data["country"]} Supply Security ===')
print(f'Date: {data["date"]}')
print(f'\nStorage Status:')
print(f' Fill Level: {data["fillLevel"]["percentage"]}%')
print(f' Gas in Storage: {data["gasInStorage"]["value"]:.0f} GWh')
print(f' Full Capacity: {data["fullCapacity"]["value"]:.0f} GWh')
print(f' Status: {data["fillLevel"]["status"]}')
print(f'\nFlow Rates:')
print(f' Injection: {data["injection"]["dailyRate"]:.1f} GWh/day ({data["injection"]["weeklyTrend"]})')
print(f' Withdrawal: {data["withdrawal"]["dailyRate"]:.1f} GWh/day ({data["withdrawal"]["weeklyTrend"]})')
print(f'\nSupply Security:')
print(f' Coverage: {data["supplySecurityCheck"]["coverageDays"]} days')
print(f' Status: {data["supplySecurityCheck"]["status"]}')
# EU Mandate
mandate = data['euMandate']
print(f'\nEU 90% Mandate:')
print(f' Target: {mandate["targetFillLevel"]}% by {mandate["targetDate"]}')
print(f' Current: {mandate["currentProgress"]}%')
print(f' Days Remaining: {mandate["daysRemaining"]}')
print(f' Status: {mandate["status"]}')
# Warnings
if data['fillLevel']['percentage'] < 70:
print(f'\n⚠️ WARNING: Fill level below 70% - Supply risk!')
if mandate['status'] == 'AT_RISK':
print(f'\n⚠️ ALERT: EU mandate target at risk!')
return data
def compare_eu_countries(self, countries=['DE', 'FR', 'IT', 'AT', 'NL', 'BE', 'ES']):
"""Compare gas storage across EU countries"""
results = []
for country in countries:
try:
data = self.get_country_storage(country, include_operators=False)
results.append({
'Country': data['country'],
'Code': country,
'Fill Level %': data['fillLevel']['percentage'],
'Storage GWh': data['gasInStorage']['value'],
'Coverage Days': data['supplySecurityCheck']['coverageDays'],
'EU Mandate Progress': data['euMandate']['currentProgress'],
'Status': data['euMandate']['status']
})
except Exception as e:
print(f'Error fetching {country}: {e}')
df = pd.DataFrame(results)
df = df.sort_values('Fill Level %', ascending=False)
print('\n=== EU Gas Storage Comparison ===')
print(df.to_string(index=False))
# Critical countries
critical = df[df['Fill Level %'] < 70]
if len(critical) > 0:
print(f'\n⚠️ Countries below 70%:')
print(critical[['Country', 'Fill Level %', 'Coverage Days']].to_string(index=False))
return df
if __name__ == '__main__':
monitor = GasStorageMonitor(API_TOKEN)
# Single country check
monitor.check_supply_security('DE')
# EU comparison
df = monitor.compare_eu_countries()
# Export
df.to_csv('eu_gas_storage.csv', index=False)
print('\nData exported to: eu_gas_storage.csv')
Anwendungsfälle
🔒 Supply Security Monitoring
Coverage Days <100: High Risk Alert → Gas Procurement Team benachrichtigen
📊 EU Mandate Compliance
Track 90% Target bis 1. Nov: Frühwarnung bei Status "AT_RISK"
💰 Price Forecasting
Niedrige Fill Levels (<60%) = Höhere Gas-Preise im Winter → Hedge-Strategien
🌍 Cross-Border Analysis
Vergleich DE vs FR vs IT: Import-Abhängigkeiten identifizieren
EU Gas Storage Mandate (Verordnung 2022/1032)
📋 Rechtliche Grundlage
- Verordnung (EU) 2022/1032 über Gasspeicher-Füllstände
- Gültig ab: 1. Juni 2022
- Ziel: Versorgungssicherheit in EU
- Monitoring: AGSI+ (GIE Transparency Platform)
🎯 Füllstands-Ziele
| Stichtag | Ziel | Status 2026 |
|---|---|---|
| 1. November | 90% | ✅ ON TRACK |
| 1. Februar | 45% | ✅ ACHIEVED |
⚠️ Sanktionen bei Nicht-Einhaltung
- EU-Kommission kann Zwangsspeicherung anordnen
- Mögliche Strafzahlungen für Mitgliedstaaten
- Gaslieferverträge können Malus-Klauseln enthalten
- API-Use Case: Proaktive Compliance-Warnungen
🔍 Monitoring-Strategie
- Tägliches Tracking: API Call um 09:00 CET (nach AGSI+ Update)
- Schwellwerte:
- >85% Progress = ON TRACK
- 75-85% = AT RISK
- <75% = CRITICAL
- Alerts: E-Mail/Webhook bei Status-Change
- Reporting: Wöchentlicher Compliance-Report für Management
ROI durch Gasspeicher-Monitoring
| Anwendung | Szenario | Einsparung/Jahr | Cost |
|---|---|---|---|
| Supply Security Alerts | Frühwarnung 30 Tage vor kritischem Level → Procurement-Team reagiert | 340.000€ (Vermeidung 20% Gas-Preisaufschlag bei Spot-Kauf im Notfall) | API: 299€/Monat |
| EU Mandate Compliance | Automatisches Tracking + Reporting → Vermeidung Sanktionen | 50.000€ (10h/Monat Analyst-Zeit + Compliance-Risk) | Integration: 1 PT |
| Price Forecasting | Fill Level Trend → Gas-Preis Forecast → Hedge-Strategien | 185.000€ (5% bessere Hedge-Entscheidungen bei 10 GWh Portfolio) | ML-Modell + API |
| Gesamt | 575.000€ Potential/Jahr | ROI: 160x (299€/Monat) | |
FAQ
Wie aktuell sind die Daten?
AGSI+ updated täglich um 08:00 CET. API cached 1 Stunde. Für historische Daten nutzen Sie date Parameter (bis 365 Tage zurück).
Welche Länder haben die größten Speicher?
1. Germany (23.5 TWh), 2. Italy (19.8 TWh), 3. France (13.2 TWh), 4. Austria (9.5 TWh), 5. Netherlands (13.9 TWh, inkl. Groningen).
Was bedeutet "Coverage Days"?
Anzahl Tage, die aktueller Speicherstand bei durchschnittlichem Winter-Verbrauch reicht. >150 Tage = SECURE, 100-150 = ADEQUATE, <100 = WARNING.
Kann ich einzelne Speicher-Facilities abfragen?
Ja! Setzen Sie includeFacilities: true. Deutschland hat z.B. 52 UGS (Underground Gas Storage) mit individuellen Fill Levels. Ideal für lokale Analysen.
Gas Supply Security überwachen
575k€ Potential durch Frühwarnung, Compliance und Price Forecasting
Durchschnittliche Setup-Zeit: 5 Minuten. Erste Daten nach wenigen Minuten.