Gas Storage REST API

AGSI+ Integration: Europäische Gasspeicher-Daten, EU 90% Mandate Tracking, Supply Security Assessment.

🇪🇺 AGSI+ 🛡️ EU Mandate ⏱️ Real-time ✅ Security Check

📡 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.