Netzhandwerker Energy Research Hub

Live electricity prices, carbon intensity, grid load, renewable share, flexibility windows, battery arbitrage, trading signals and ESG reporting for autonomous agents.

84 endpoints31 payment-required53 freiBase Mainnet USDC

Why pay?

Raw data endpoints answer what is happening. Decision endpoints answer what an agent should do next. Use /demo/paid-sample for a free live preview, then POST /predict/negative-price or POST /energy/decision for paid output.

Products

Live Energy Data

Raw data endpoints answer what is happening: prices, forecast, carbon intensity, grid load and renewable share.

EndpointPriceUse
POST /price/spot0.001 USDCTrading and dispatch agents buy this endpoint to obtain the current German EPEX spot price for immediate decisions.
POST /price/forecast0.005 USDCEnergy-trading and flexible-load agents buy this endpoint to compare the next 24 hours of EPEX prices and volatility.
POST /carbon/now0.001 USDCAktuelle CO2-Intensität des deutschen Strommix.
POST /grid/load0.001 USDCGrid-monitoring and dispatch agents buy this endpoint to obtain the latest German system load from SMARD.
POST /renewable/share0.001 USDCCarbon-aware and ESG agents buy this endpoint to measure the current renewable share and generation mix in Germany.

Optimization Signals

Decision endpoints answer what an agent should do next: EV charging, heat pump control, flexibility windows, battery arbitrage and trading signals.

EndpointPriceUse
GET /demo/paid-sample0.001 USDCCheapest end-to-end x402 purchase test. Always returns a 402 challenge without payment and the current full NegPrice decision after a valid USDC payment.
POST /energy/decision0.01 USDCEV, battery, and flexible-load agents buy this endpoint to receive an executable action with timing, expected value, confidence, and expiry.
POST /flexibility/window0.01 USDCEV, heat-pump, and flexible-load agents buy this endpoint to identify the cheapest upcoming operating hours.
POST /signals/buy-sell0.02 USDCTrading bots buy this endpoint to receive a multi-factor buy/sell signal with RSI, Z-score, trend, and confidence.
POST /bundle/trading0.02 USDCEnergy-trading agents buy this endpoint to receive an eight-source market bundle with key metrics, insights, and raw evidence.
POST /optimizer/cheapest-window0.005 USDCFlexible-load agents buy this endpoint to schedule a contiguous operating window at the lowest average electricity price.
POST /price/negative-forecast0.005 USDCStunden mit negativen Strompreisen in den nächsten 24 Stunden.
POST /predict/negative-price0.001 USDCBattery, EV, and trading agents buy this endpoint to receive calibrated 2h/4h/6h negative-price probabilities, reviewed threshold profiles and an executable response policy.
POST /summary/today0.01 USDCToken-effiziente Tageszusammenfassung mit konkreter Handlungsempfehlung.
POST /region0.005 USDCPreis, CO2, Grünstrom und Wetter für eine PLZ-Region.
POST /events/grid0.005 USDCEreignisfeed für Dunkelflaute, Sturm, negative Preise und Rekorde.

Research & Intelligence

Research and intelligence endpoints produce market summaries, ESG reporting, track records and deeper energy research.

EndpointPriceUse
GET /research0.05 USDCGET-Fallback mit maschinenlesbarer 402-Antwort für POST /research.
GET /articles/{id}0.01 USDCGET-Fallback mit maschinenlesbarer 402-Antwort für POST /articles/{id}.
GET /tasksab 0.10 USDCGET-Fallback mit maschinenlesbarer 402-Antwort für POST /tasks.
POST /research0.05 USDCAggregierte Energie-Recherche für DE/EU aus Live-Datenquellen.
POST /research/quick0.003 USDCResearch and market-monitoring agents buy this endpoint to answer a focused question with a compact live market snapshot.
POST /articles/{id}0.01 USDCVolltext eines Energie-Fachartikels.
POST /tasksab 0.10 USDCAsynchroner Deep-Dive Task mit Mindest-Bounty.
POST /history/prices0.05 USDCStundendaten für EPEX-Preise nach Periode.
POST /history/prices/stats0.01 USDCStatistik für eine historische Preisperiode.

x402 Payment

Production uses Base Mainnet, chain 8453, asset USDC, recipient 0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E.

curl -i -X POST https://energy.netzhandwerker.de/price/spot \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <x402-payload>" \
  -d '{}'

Protocol-primary retry header: PAYMENT-SIGNATURE. Compatibility aliases accepted: X-Payment, PAYMENT.

MCP / Agent Access

MCP discovery: https://energy.netzhandwerker.de/mcp. Paid data tools return payment instructions; call the REST endpoint after x402 payment.

{ "mcpServers": { "energy-hub": { "url": "https://energy.netzhandwerker.de/mcp" } } }

Endpoints

MethodPathDescriptionPriceResponse exampleError cases
GET /v3/opportunities Find an energy opportunity
Public preflight for deadline-aware compute, DePIN, battery and power-trading workloads in Germany and Europe. Returns only actionability and value bands; exact execution timing remains in the paid dispatch plan.
frei
{
  "opportunity_id": "opp_example_01",
  "buy_recommended": true,
  "actionability": "high",
  "expected_savings_band_eur": "1.00-5.00",
  "carbon_band": "unknown",
  "confidence_band": "high",
  "generated_at": "2026-07-30T10:00:00.000Z",
  "expires_at": "2026-07-30T10:15:00.000Z",
  "data_freshness": {
    "status": "current",
    "source": "ENTSO-E Transparency Platform A44",
    "observed_through": "2026-07-31T22:00:00.000Z",
    "fetched_at": "2026-07-30T09:45:00.000Z",
    "license": "CC BY 4.0",
    "attribution": "ENTSO-E Transparency Platform",
    "licence_scope": "A44 day-ahead prices; DE-LU; preflight"
  },
  "paid_endpoint": "https://energy.netzhandwerker.de/v3/dispatch-plan",
  "price_usdc": 0.02,
  "model_version": "dispatch-deterministic-3.0.0"
}
400: Invalid region, use case, duration, deadline or energy constraint
404: Not found
429: Rate limit exceeded
500: Internal server error
503: Source is stale, unlicensed, missing or schema-incompatible; no opportunity is created
POST /v3/dispatch-plan Buy an executable dispatch plan
Schedules a deadline-bound compute, DePIN, battery or power-trading workload into an actionable German or European power window. Returns exact timing, expected EUR cost and savings, uncertainty, freshness, expiry and decision trace.
0.02 USDC
{
  "schedule_start": "2026-07-31T01:00:00.000Z",
  "schedule_end": "2026-07-31T03:00:00.000Z",
  "action": "schedule",
  "expected_cost_eur": 4.12,
  "expected_savings_eur": 1.38,
  "baseline_cost_eur": 5.5,
  "expected_carbon_effect": "unknown",
  "confidence": 0.95,
  "uncertainty": {
    "type": "deterministic_day_ahead_market_data",
    "price_range_eur_mwh": [
      82.4,
      82.4
    ],
    "forecast_signal": "experimental_not_used_for_schedule"
  },
  "source_timestamps": {
    "first_available": "2026-07-30T10:00:00.000Z",
    "last_available": "2026-07-31T22:00:00.000Z",
    "fetched_at": "2026-07-30T09:45:00.000Z",
    "observed_through": "2026-07-31T22:00:00.000Z"
  },
  "source_attribution": {
    "attribution": "ENTSO-E Transparency Platform",
    "licence": "CC BY 4.0",
    "licence_scope": "A44 day-ahead prices; DE-LU; preflight"
  },
  "model_version": "dispatch-deterministic-3.0.0",
  "expires_at": "2026-07-30T10:15:00.000Z",
  "risk_flags": [],
  "decision_trace": [
    "constraints_validated",
    "candidate_windows_ranked",
    "lowest_cost_feasible_window_selected"
  ],
  "payment_receipt": {
    "protocol": "x402",
    "network": "eip155:8453",
    "idempotent_replay": false
  }
}
400: Invalid technical constraints
402: x402 payment required
404: Not found
409: Opportunity is invalid, expired or incompatible; no settlement attempted
429: Rate limit exceeded
500: Internal server error
503: Source is stale, unlicensed, missing or schema-incompatible; no settlement is attempted
POST /v3/market-brief Buy a timestamped EU market brief
Returns licensed ENTSO-E and SMARD spot-market context for compute, DePIN, battery and power-trading agents: published day-ahead prices, volatility, load, renewable share when available, the observed share of published negative-price hours, uncertainty, freshness and expiry.
0.05 USDC
{
  "spot_market": {
    "region": "DE-LU",
    "currency": "EUR/MWh"
  },
  "price_forecast": [
    {
      "start": "2026-07-30T11:00:00.000Z",
      "end": "2026-07-30T12:00:00.000Z",
      "price_eur_mwh": 71.2,
      "type": "published_day_ahead"
    }
  ],
  "volatility": {
    "standard_deviation_eur_mwh": 12.4,
    "band": "low"
  },
  "load": {
    "value_mw": 54321,
    "timestamp": "2026-07-30T09:00:00.000Z",
    "fetched_at": "2026-07-30T09:45:00.000Z",
    "source": "SMARD.de"
  },
  "renewable_share": {
    "value_pct": 52.1,
    "method": "renewable_generation_as_share_of_load",
    "timestamp": "2026-07-30T09:00:00.000Z",
    "fetched_at": "2026-07-30T09:45:00.000Z",
    "source": "SMARD.de"
  },
  "negative_price_probability": {
    "value": 0.18,
    "method": "published_day_ahead_share",
    "forecast_status": "not_used"
  },
  "uncertainty": {
    "published_price_hours": 24,
    "missing_price_hours": 0,
    "negative_price_ml_status": "not_used"
  },
  "source_timestamps": {
    "generated_at": "2026-07-30T10:00:00.000Z",
    "spot_observed_through": "2026-07-31T10:00:00.000Z",
    "spot_fetched_at": "2026-07-30T09:45:00.000Z",
    "load_observed_at": "2026-07-30T09:00:00.000Z"
  },
  "source_attributions": [
    {
      "source_id": "entsoe_day_ahead",
      "attribution": "ENTSO-E Transparency Platform",
      "licence": "CC BY 4.0"
    },
    {
      "source_id": "smard_load",
      "attribution": "Bundesnetzagentur | SMARD.de",
      "licence": "CC BY 4.0"
    },
    {
      "source_id": "smard_generation",
      "attribution": "Bundesnetzagentur | SMARD.de",
      "licence": "CC BY 4.0"
    }
  ],
  "model_version": "dispatch-deterministic-3.0.0",
  "expires_at": "2026-07-30T10:15:00.000Z",
  "payment_receipt": {
    "protocol": "x402",
    "network": "eip155:8453",
    "idempotent_replay": false
  }
}
400: Invalid region, horizon or use case
402: x402 payment required
404: Not found
429: Rate limit exceeded
500: Internal server error
503: Source is stale, unlicensed, missing or schema-incompatible; no settlement is attempted
GET / Startseite mit serverseitigen Live-Werten
Bot-taugliche HTML-Übersicht mit Live-Kennzahlen, Preisen, Payment und Agent-Zugriff.
frei
"<html>Energy Research Hub overview</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /health Health Check
Status, Version, Uptime, Port, x402-Konfiguration und relevante Links ohne Secrets.
frei
{
  "status": "ok",
  "service": "energy-research-hub",
  "version": "3.0.0",
  "network": "Base Mainnet"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /readiness Readiness Score
Maschinenlesbarer 10/10-Readiness-Check fuer Infrastruktur, Bot-Discovery und Kaufbarkeit.
frei
{
  "ok": true,
  "ratings": {
    "infrastructure": "10/10",
    "bot_discovery": "10/10",
    "purchase_readiness": "10/10"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /discovery-status Agent Discovery Status
Maschinenlesbare Übersicht für Agent-Verzeichnisse, x402-Scanner, MCP-Clients und LLM-Crawler.
frei
{
  "ok": true,
  "service": "energy-research-hub",
  "links": {
    "home": "https://energy.netzhandwerker.de",
    "status": "https://energy.netzhandwerker.de/status",
    "health": "https://energy.netzhandwerker.de/health",
    "discovery_status": "https://energy.netzhandwerker.de/discovery-status",
    "agent_starter": "https://energy.netzhandwerker.de/agent-starter.json",
    "directory_listing": "https://energy.netzhandwerker.de/directory-listing.json",
    "pricing": "https://energy.netzhandwerker.de/pricing",
    "docs": "https://energy.netzhandwerker.de/docs",
    "purchase_quickstart": "https://energy.netzhandwerker.de/examples/quickstart",
    "purchase_nodejs": "https://energy.netzhandwerker.de/examples/buy-nodejs",
    "purchase_python": "https://energy.netzhandwerker.de/examples/buy-python",
    "purchase_curl": "https://energy.netzhandwerker.de/examples/buy-curl",
    "openapi": "https://energy.netzhandwerker.de/openapi.json",
    "mcp": "https://energy.netzhandwerker.de/mcp",
    "x402": "https://energy.netzhandwerker.de/.well-known/x402.json",
    "x402_alias": "https://energy.netzhandwerker.de/.well-known/x402",
    "agent": "https://energy.netzhandwerker.de/.well-known/agent.json",
    "agent_alias": "https://energy.netzhandwerker.de/.well-known/agent",
    "mcp_manifest": "https://energy.netzhandwerker.de/.well-known/mcp.json",
    "mcp_manifest_alias": "https://energy.netzhandwerker.de/.well-known/mcp",
    "ai_plugin": "https://energy.netzhandwerker.de/.well-known/ai-plugin.json",
    "llms": "https://energy.netzhandwerker.de/llms.txt",
    "llms_full": "https://energy.netzhandwerker.de/llms-full.txt",
    "sitemap": "https://energy.netzhandwerker.de/sitemap.xml",
    "robots": "https://energy.netzhandwerker.de/robots.txt",
    "demand_submit": "https://energy.netzhandwerker.de/demand/submit",
    "demand_requested": "https://energy.netzhandwerker.de/demand/requested",
    "distribution_kit": "https://energy.netzhandwerker.de/distribution-kit",
    "distribution_kit_json": "https://energy.netzhandwerker.de/distribution-kit.json",
    "example_agent_integrations": "https://energy.netzhandwerker.de/examples/agent-integrations",
    "example_agent_integrations_json": "https://energy.netzhandwerker.de/examples/agent-integrations.json",
    "example_agent_integrations_readme": "https://energy.netzhandwerker.de/examples/agent-integrations/README.md",
    "example_agent_integrations_archive": "https://energy.netzhandwerker.de/downloads/energy-hub-agent-examples.zip",
    "mcp_registry_metadata": "https://energy.netzhandwerker.de/.well-known/mcp-registry/server.json",
    "x402scan": "https://www.x402scan.com/recipient/0x2880edfff13100677bf97a3cbdf3bc34771c4e5e/resources",
    "for_x402_bots": "https://energy.netzhandwerker.de/for-x402-bots",
    "for_mcp_clients": "https://energy.netzhandwerker.de/for-mcp-clients"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /agent-starter.json Agent Starter Pack
Kompakter Startpunkt für autonome Agenten mit günstigstem Test-Call, wichtigstem Paid Call, Demand-Submit und allen Discovery-Links.
frei
{
  "ok": true,
  "cheapest_test_call": "/demo/paid-sample",
  "paid_decision_call": "/energy/decision"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /directory-listing.json Directory Listing Pack
Maschinenlesbare Listing-Daten für 402-, MCP-, OpenAPI- und Agent-Verzeichnisse.
frei
{
  "title": "Netzhandwerker Energy Research Hub",
  "tags": [
    "energy",
    "x402",
    "USDC",
    "Base"
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /distribution-kit Distribution Kit
HTML-Übersicht mit Directory-Copy, Discovery-Links, Facilitator-Status und realistischen nächsten Verteilungsschritten.
frei
"<html>Distribution kit</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /distribution-kit.json Distribution Kit JSON
Maschinenlesbares Paket für 402-, MCP-, Agent- und API-Verzeichnisse.
frei
{
  "ok": true,
  "directories": [
    "402index",
    "x402 Bazaar",
    "MCP directories"
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /examples/agent-integrations Agent Integration Examples
GitHub-ready Beispielpaket für CrewAI, LangGraph, AutoGen-kompatible Tools und MCP-Clients.
frei
"<html>Agent integration examples</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /examples/agent-integrations.json Agent Integration Examples JSON
Dateimap für ein Beispiel-Repository mit fertigen Agent-Integrationen.
frei
{
  "ok": true,
  "files": [
    "README.md",
    "crewai_energy_tool.py",
    "langgraph_energy_node.py"
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /examples/agent-integrations/README.md Agent Integration README
Markdown-README für ein GitHub-ready Beispiel-Repository.
frei
"# Netzhandwerker Energy Hub Agent Examples"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /docs Dokumentation
HTML-Dokumentation aus derselben Endpunktliste wie OpenAPI und MCP.
frei
"<html>API docs</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /openapi.json OpenAPI 3.1 Spezifikation
Maschinenlesbare OpenAPI-Spezifikation für alle dokumentierten Public Routes.
frei
{
  "openapi": "3.1.0",
  "info": {
    "title": "Netzhandwerker Energy Research Hub"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /llms.txt LLM Kurzkontext
Kompakte Textdatei für Bots, Crawler und Agenten.
frei
"Name: Netzhandwerker Energy Research Hub"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /llms-full.txt LLM Vollkontext
Ausführliche Textdatei mit Zweck, Endpunkten, Preisen und Payment-Hinweisen.
frei
"Endpoints: ..."
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /robots.txt Robots Datei
Crawler-Hinweise mit Sitemap- und LLM-Dateiverweisen.
frei
"User-agent: *"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /sitemap.xml Sitemap
XML-Sitemap für frei erreichbare GET-Routen.
frei
"<urlset>...</urlset>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /.well-known/ai-plugin.json AI Plugin Manifest
Manifest für Plugin-Scanner mit OpenAPI-Link.
frei
{
  "schema_version": "v1",
  "name_for_model": "netzhandwerker_energy_research_hub"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /.well-known/mcp.json MCP Discovery
Discovery-Dokument mit MCP-Endpoint und Tool-Liste.
frei
{
  "endpoint": "https://energy.netzhandwerker.de/mcp",
  "tools": []
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /.well-known/agent.json Agent Manifest
Agenten-Manifest mit Zweck, Links, Preisen und Payment-Konfiguration.
frei
{
  "name": "Netzhandwerker Energy Research Hub",
  "payment": "x402"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /.well-known/x402.json x402 Manifest
Payment-Manifest für x402-Scanner.
frei
{
  "payment_target": {
    "network": "eip155:8453",
    "currency": "USDC"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /articles Artikel-Katalog
Frei verfügbarer Katalog der Premium-Artikel.
frei
{
  "articles": [
    {
      "id": "001",
      "title": "Mieterstrom",
      "price_usdc": "0.02"
    }
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /capabilities Capabilities
Kurzübersicht für API-Scanner mit Links und Kategorien.
frei
{
  "service": "Netzhandwerker Energy Research Hub",
  "capabilities": [
    "live_energy_data",
    "x402_payment",
    "mcp"
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /agent Agent Discovery
Short machine-readable product, pricing and payment discovery for AI agents, MCP clients and x402 bots.
frei
{
  "name": "Netzhandwerker Energy Research Hub",
  "best_for": [
    "German electricity prices",
    "EV charging decisions"
  ],
  "products": [
    "Live Energy Data",
    "Optimization Signals",
    "Research & Intelligence"
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /pricing Pricing
Machine-readable price list grouped by Live Energy Data, Optimization Signals and Research & Intelligence.
frei
{
  "currency": "USD",
  "payment_protocol": "x402",
  "settlement_asset": "USDC",
  "products": []
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /trust Trust Page
Operator, payment network, uptime links, API version and risk notes as HTML or JSON via Accept header.
frei
{
  "operator": "Die Netzhandwerker",
  "chain_id": 8453,
  "asset": "USDC"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /status Status
Machine-readable service status with version, uptime, endpoint count, MCP tool count and x402 state.
frei
{
  "status": "ok",
  "version": "3.0.0",
  "endpoint_count": 0
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /sources Sources
Transparent list of data sources used by the service, including freshness and limitations.
frei
{
  "sources": [
    {
      "name": "aWATTar EPEX DE/AT",
      "type": "live",
      "used_for": [
        "spot prices",
        "price forecast",
        "optimization windows"
      ],
      "freshness": "Usually hourly/day-ahead; cached by endpoint",
      "limitations": [
        "External API availability",
        "Market data may lag provider updates"
      ]
    },
    {
      "name": "Fraunhofer ISE energy-charts",
      "type": "live/cached",
      "used_for": [
        "renewable share",
        "generation mix",
        "CO2 fallback model"
      ],
      "freshness": "Cached by endpoint, usually minutes to hours",
      "limitations": [
        "Provider schema changes possible",
        "Some values are modelled from generation mix"
      ]
    },
    {
      "name": "SMARD Bundesnetzagentur",
      "type": "live/cached",
      "used_for": [
        "grid load"
      ],
      "freshness": "Cached by endpoint",
      "limitations": [
        "Quarter-hour data availability depends on SMARD publication"
      ]
    },
    {
      "name": "Corrently GrünstromIndex",
      "type": "forecast/cached",
      "used_for": [
        "regional green power index",
        "regional CO2 estimate"
      ],
      "freshness": "Forecast data, cached by endpoint",
      "limitations": [
        "Regional approximation by ZIP"
      ]
    },
    {
      "name": "Open-Meteo",
      "type": "forecast/cached",
      "used_for": [
        "solar forecast",
        "wind forecast",
        "weather-driven optimization"
      ],
      "freshness": "Forecast data, cached by endpoint",
      "limitations": [
        "Weather forecast uncertainty"
      ]
    },
    {
      "name": "Electricity Maps",
      "type": "live",
      "used_for": [
        "carbon intensity when API key is available"
      ],
      "freshness": "Provider latest value",
      "limitations": [
        "Requires configured provider key; fallback uses internal CO2 model"
      ]
    },
    {
      "name": "ENTSO-E Transparency",
      "type": "live/forecast",
      "used_for": [
        "day-ahead prices and selected premium research"
      ],
      "freshness": "Provider publication schedule",
      "limitations": [
        "Requires configured ENTSO-E key"
      ]
    },
    {
      "name": "Internal model",
      "type": "model",
      "used_for": [
        "energy decisions",
        "battery arbitrage",
        "trading signal scoring"
      ],
      "freshness": "Generated per request from cached/live inputs",
      "limitations": [
        "Decision outputs are estimates, not guarantees"
      ]
    }
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /wallet-bot/needs-info Wallet Bot Needs Info
Free discovery endpoint that invites wallet-enabled agents to declare what they want to buy.
frei
{
  "ok": true,
  "purpose": "Tell us what your wallet-enabled agent wants to buy.",
  "submit_need": {
    "method": "POST",
    "endpoint": "/wallet-bot/needs",
    "content_type": "application/json",
    "schema": {
      "type": "object",
      "properties": {
        "agent_name": {
          "type": "string"
        },
        "wallet_type": {
          "type": "string",
          "enum": [
            "x402",
            "evm",
            "base",
            "solana",
            "lightning",
            "other",
            "unknown"
          ]
        },
        "payment_network": {
          "type": "string"
        },
        "payment_asset": {
          "type": "string"
        },
        "need": {
          "type": "string",
          "description": "What does your wallet-enabled agent want to buy?"
        },
        "requested_endpoint": {
          "type": "string"
        },
        "missing_endpoint": {
          "type": "string"
        },
        "desired_output_format": {
          "type": "string",
          "enum": [
            "json",
            "mcp",
            "openapi",
            "webhook",
            "csv",
            "other"
          ]
        },
        "desired_freshness": {
          "type": "string",
          "enum": [
            "live",
            "hourly",
            "daily",
            "historical",
            "unknown"
          ]
        },
        "max_budget_usdc": {
          "type": "number",
          "minimum": 0
        },
        "recurring_need": {
          "type": "boolean"
        },
        "urgency": {
          "type": "string",
          "enum": [
            "low",
            "normal",
            "high"
          ]
        },
        "callback_url": {
          "type": "string",
          "description": "Stored as present/host only; never called automatically."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  },
  "wallet_bot_need_request": {
    "question": "What does your wallet-enabled agent need from this energy API?",
    "submit": {
      "method": "POST",
      "endpoint": "/wallet-bot/needs",
      "content_type": "application/json"
    },
    "examples": [
      "I need live EPEX prices for Germany every hour.",
      "I need a battery arbitrage schedule.",
      "I need CO2-low charging windows.",
      "I need Redispatch risk by region.",
      "I need webhook alerts for negative prices."
    ],
    "optional_fields": [
      "wallet_type",
      "payment_network",
      "max_budget_usdc",
      "desired_output_format",
      "recurring_need"
    ]
  },
  "why": [
    "We use wallet-bot needs to create better paid energy endpoints.",
    "Tell us what data, decision, format or price your agent needs."
  ],
  "examples": [
    {
      "need": "I need a 15-minute EV charging schedule for Germany before 07:00.",
      "recommended_endpoint": "/energy/decision"
    },
    {
      "need": "I need current German grid load for an operational decision.",
      "recommended_endpoint": "/grid/load"
    },
    {
      "need": "I need a cheaper payment test endpoint.",
      "recommended_endpoint": "/demo/paid-sample"
    }
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /wallet-bot/needs Submit Wallet Bot Need
Free endpoint where wallet-enabled agents can declare needed data, formats, missing endpoints and budget.
frei
{
  "ok": true,
  "need_id": "need_123",
  "recommended_existing_offer": {
    "endpoint": "/energy/decision",
    "price_usdc": 0.01,
    "normal_price_usdc": 0.25,
    "pricing_mode": "launch"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /demand/submit Demand Intent Discovery
Machine-readable discovery fallback for demand submissions. Optional x402 payment can mark a request as priority_demand.
0.001 USDC
{
  "accepted": false,
  "payment_required": false,
  "optional_payment_supported": true,
  "demand_capture": {
    "honest_notice": "This endpoint is not available yet. You can request it.",
    "purpose": "Submit an endpoint, data, decision or format request. This is a demand sensor, not a guarantee of implementation.",
    "protocol": "x402",
    "endpoint": "/demand/submit",
    "method": "POST",
    "submit_need": {
      "method": "POST",
      "url": "/demand/submit"
    },
    "content_type": "application/json",
    "fields": {
      "need": {
        "type": "string",
        "description": "What endpoint, data, decision or signal does your agent want?"
      },
      "desired_endpoint": {
        "type": "string",
        "description": "Preferred endpoint path, if known."
      },
      "desired_format": {
        "type": "string",
        "enum": [
          "json",
          "mcp",
          "openapi",
          "csv",
          "webhook"
        ]
      },
      "max_budget_usdc": {
        "type": "number",
        "description": "Maximum budget per call or request in USDC."
      },
      "recurring": {
        "type": "boolean"
      },
      "frequency": {
        "type": "string",
        "enum": [
          "one_time",
          "hourly",
          "daily",
          "weekly",
          "realtime"
        ]
      },
      "required_freshness": {
        "type": "string"
      },
      "use_case": {
        "type": "string"
      },
      "agent_name": {
        "type": "string"
      },
      "agent_url": {
        "type": "string"
      },
      "wallet_type": {
        "type": "string"
      },
      "payment_network": {
        "type": "string"
      },
      "webhook_url": {
        "type": "string",
        "description": "Optional. Stored, not called automatically."
      }
    },
    "hint_priority": "Optional 0.001 USDC payment lists your request as priority_demand.",
    "optional_priority_price_usdc": 0.001,
    "no_raw_payment_material_logged": true
  }
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /demand/submit Submit endpoint demand
Two-stage intent filter for agents to submit a data or endpoint request. Without payment it is stored as unverified_demand; optional verified 0.001 USDC lists it as priority_demand.
0.001 USDC
{
  "accepted": true,
  "paid": false,
  "payment_verified": false,
  "request_id": "need_YYYYMMDD_slug_hash",
  "status": "unverified_demand",
  "implementation_not_guaranteed": true
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /for-ai-agents For AI Agents
Server-rendered landing page for AI agents with endpoints, prices and example responses.
frei
"<html>For AI agents</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /for-mcp-clients For MCP Clients
Server-rendered landing page for MCP clients with setup and available tools.
frei
"<html>For MCP clients</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /for-x402-bots For x402 Bots
Server-rendered landing page for x402 bots with payment test and paid endpoints.
frei
"<html>For x402 bots</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /for-ev-charging-agents For EV Charging Agents
Server-rendered landing page for EV charging optimization agents.
frei
"<html>For EV charging agents</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /for-esg-reporting-agents For ESG Reporting Agents
Server-rendered landing page for ESG reporting agents.
frei
"<html>For ESG reporting agents</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /for-energy-trading-agents For Energy Trading Agents
Server-rendered landing page for energy trading agents.
frei
"<html>For energy trading agents</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /sample/research Research Sample
Frei verfügbares Beispiel für Research-Ausgaben.
frei
{
  "note": "Frei verfügbares Beispiel",
  "full_endpoint": "POST /research"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /sample/articles Artikel-Snippet
Frei verfügbares Artikel-Snippet mit Link auf den bezahlten Volltext.
frei
{
  "preview": {
    "id": "001",
    "title": "Mieterstrom"
  },
  "full_endpoint": "POST /articles/{id}"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /mcp MCP Discovery
JSON-Discovery für MCP-Clients mit Tool-Namen, Input-Schemas, Endpoints, Preisen und Payment-Status.
frei
{
  "protocol": "Model Context Protocol",
  "tools_count": 32
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /mcp MCP JSON-RPC Endpoint
JSON-RPC Endpoint für initialize, tools/list und tools/call. Paid Data Tools liefern Payment-Anweisungen.
frei
{
  "jsonrpc": "2.0",
  "result": {
    "tools": []
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /agent-manifest Agent Manifest
Frei verfügbares Agenten-Manifest für Bots und x402-Scanner.
frei
{
  "name": "Netzhandwerker Energy Research Hub",
  "openapi": "https://energy.netzhandwerker.de/openapi.json"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /metrics Prometheus Metrics
Prometheus-kompatible Metriken für Requests, Revenue und x402-Probes.
frei
"energy_hub_requests_total 123"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /signals/track-record Track Record
Transparenzdaten zu Historie, Quellen, Reliability und Methodik.
frei
{
  "reliability": {
    "success_rate_24h": "99.2%",
    "network": "Base Mainnet"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /trust/dashboard Live Trust Dashboard JSON
Public evidence endpoint with precision, recall, calibration, baseline comparison, economic savings, data period, sample size, model version and separately classified buyer metrics.
frei
{
  "ok": true,
  "status": "live",
  "evaluation": {
    "precision": null,
    "recall": null,
    "pr_auc": null,
    "brier_score": null,
    "calibration_error": null,
    "price_mae_eur_mwh": null,
    "median_savings_eur": null,
    "sample_size": 0,
    "data_period": null,
    "model_version": "pending-evaluation",
    "production_advantage_claim": false
  },
  "business_metrics": {
    "independent_external_buyers": 0,
    "external_repeat_buyers": 0,
    "external_revenue_usdc": 0,
    "internal_qa_reported_separately": true
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /trust Live Trust Dashboard HTML
Public browser dashboard for the live negative-price prediction track record. Fetches /trust/dashboard and refreshes every five minutes.
frei
"<html>Live Track Record</html>"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /tasks/{id}/result Task Ergebnis
Ergebnisabruf für zuvor bezahlte Async-Tasks.
frei
{
  "id": "task_123",
  "status": "completed",
  "result": {}
}
400: Invalid request
404: Task not found
429: Rate limit exceeded
500: Internal server error
GET /netzhandwerker-radar Bot-Radar Dashboard
Internes Radar-Dashboard. Zugriff nur mit ENV-Passwort per Header, Basic Auth oder Query-Fallback.
frei
"<html>Bot-Radar</html>"
400: Invalid request
401: Authentication required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /research Research Payment Requirements
GET-Fallback mit maschinenlesbarer 402-Antwort für POST /research.
0.05 USDC
{
  "error": "payment_required",
  "endpoint": "POST /research"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /articles/{id} Article Payment Requirements
GET-Fallback mit maschinenlesbarer 402-Antwort für POST /articles/{id}.
0.01 USDC
{
  "error": "payment_required",
  "endpoint": "POST /articles/{id}"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /tasks Task Payment Requirements
GET-Fallback mit maschinenlesbarer 402-Antwort für POST /tasks.
ab 0.10 USDC
{
  "error": "payment_required",
  "endpoint": "POST /tasks"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /research Energy Research
Aggregierte Energie-Recherche für DE/EU aus Live-Datenquellen.
0.05 USDC
{
  "success": true,
  "summary": "...",
  "key_metrics": [],
  "confidence_score": 0.9
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /demo/paid-sample x402 Paid Signal Test
Cheapest end-to-end x402 purchase test. Always returns a 402 challenge without payment and the current full NegPrice decision after a valid USDC payment.
0.001 USDC
{
  "ok": true,
  "endpoint": "/demo/paid-sample",
  "paid": true,
  "result": {
    "schema_version": "negprice_signal_v1",
    "expires_at": "2026-07-12T13:00:00.000Z"
  }
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /energy/decision Energy Decision Discovery
GET discovery for the paid decision endpoint. Returns machine-readable endpoint metadata or method guidance.
frei
{
  "ok": true,
  "endpoint": "/energy/decision",
  "method": "POST",
  "payment_required": true,
  "pricing_mode": "standard",
  "price_usd": 0.01,
  "normal_price_usd": 0.01,
  "asset": "USDC",
  "network": "Base Mainnet",
  "chain_id": 8453
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /energy/decision Energy Decision
EV, battery, and flexible-load agents buy this endpoint to receive an executable action with timing, expected value, confidence, and expiry.
0.01 USDC
{
  "ok": true,
  "product": "Optimization Signals",
  "endpoint": "/energy/decision",
  "query": {
    "goal": "minimize_cost",
    "device": "ev",
    "location": "Germany",
    "duration_hours": 2,
    "constraints": {
      "target_soc": 80,
      "max_power_kw": 11
    }
  },
  "result": {
    "schema_version": "energy_decision_v1",
    "decision_id": "dec_mrjtggtb_639t85",
    "product": "paid_energy_decision",
    "buyer_task_fit": "schedule_or_trade_energy_with_money_at_risk",
    "decision": "charge_later",
    "action": "charge_later",
    "recommendation": "charge_later between 2026-07-14T11:00:00.000Z and 2026-07-14T13:00:00.000Z",
    "recommended_window": {
      "start": "2026-07-14T11:00:00.000Z",
      "end": "2026-07-14T13:00:00.000Z",
      "hours": [
        {
          "start": "2026-07-14T11:00:00.000Z",
          "end": "2026-07-14T12:00:00.000Z",
          "price_ct_kwh": 5.18,
          "price_eur_mwh": 51.83
        },
        {
          "start": "2026-07-14T12:00:00.000Z",
          "end": "2026-07-14T13:00:00.000Z",
          "price_ct_kwh": 5.77,
          "price_eur_mwh": 57.73
        }
      ]
    },
    "reason": "Cheapest available window is materially below the day average.",
    "why_paid": "This endpoint sells the decision layer: action, timing, expected value, confidence, freshness and source status. Raw electricity data remains available from public sources.",
    "estimated_value": {
      "currency": "EUR",
      "expected_saving": 1.52,
      "energy_volume_kwh": 22,
      "value_basis": "day_average_vs_recommended_window"
    },
    "expected_saving_eur": 1.52,
    "carbon_impact": {
      "reduction_percent": 13,
      "intensity_g_co2_kwh": 419,
      "renewable_share_pct": 51.2
    },
    "carbon_reduction_percent": 13,
    "confidence": 0.85,
    "expires_at": "2026-07-13T23:00:00+00:00",
    "do_not_act_reason": null,
    "risk_flags": [],
    "source_status": {
      "price": "available",
      "carbon": "fallback",
      "renewable": "available"
    },
    "freshness": {
      "price_cache_ttl_seconds": 600,
      "carbon_cache_ttl_seconds": 600,
      "negative_price_ml_cache_ttl_seconds": 60,
      "generated_at": "2026-07-13T22:51:07.679Z",
      "decision": {
        "fresh": true,
        "generated_at": "2026-07-13T22:00:00+00:00",
        "expires_at": "2026-07-13T23:00:00+00:00",
        "age_seconds": 3068,
        "seconds_until_expiry": 532,
        "stale_reason": null
      }
    },
    "ml_decision_intelligence": {
      "source": "NegPrice Decision Intelligence v3",
      "prediction": {
        "negative_price_in_2h": false,
        "probability": 0.0012,
        "risk_level": "low",
        "action": "no_action_normal_operation",
        "target_window": {
          "start": "2026-07-14T00:00:00+00:00",
          "end": "2026-07-14T01:00:00+00:00",
          "lead_hours": 2
        },
        "predicted_price_eur_mwh": 110.53,
        "expected_saving_eur_mwh": 29.11
      },
      "horizons": [
        {
          "lead_hours": 2,
          "negative_price": false,
          "probability": 0.0012,
          "risk_level": "low",
          "predicted_price_eur_mwh": 110.53,
          "expected_saving_eur_mwh": 29.11,
          "target_window": {
            "start": "2026-07-14T00:00:00+00:00",
            "end": "2026-07-14T01:00:00+00:00",
            "lead_hours": 2
          },
          "bot_value_score": 5.82
        },
        {
          "lead_hours": 4,
          "negative_price": false,
          "probability": 0.0716,
          "risk_level": "low",
          "predicted_price_eur_mwh": 87.74,
          "expected_saving_eur_mwh": 51.9,
          "target_window": {
            "start": "2026-07-14T02:00:00+00:00",
            "end": "2026-07-14T03:00:00+00:00",
            "lead_hours": 4
          },
          "bot_value_score": 10.38
        },
        {
          "lead_hours": 6,
          "negative_price": false,
          "probability": 0.1101,
          "risk_level": "low",
          "predicted_price_eur_mwh": 85.34,
          "expected_saving_eur_mwh": 54.3,
          "target_window": {
            "start": "2026-07-14T04:00:00+00:00",
            "end": "2026-07-14T05:00:00+00:00",
            "lead_hours": 6
          },
          "bot_value_score": 10.86
        }
      ],
      "decision_engine": {
        "schema_version": "negprice_bot_decision_v1",
        "recommended_action": "no_action_normal_operation",
        "should_act": false,
        "policy": "below_action_threshold",
        "selected_horizon_hours": 6,
        "target_window": {
          "start": "2026-07-14T04:00:00+00:00",
          "end": "2026-07-14T05:00:00+00:00",
          "lead_hours": 6
        },
        "probability": 0.1101,
        "expected_target_price_eur_mwh": 85.34,
        "expected_saving_eur_mwh": 54.3,
        "bot_value_score": 10.86,
        "minimum_probability_threshold": 0.25,
        "confidence": 0.25,
        "valid_until": "2026-07-13T23:00:00+00:00",
        "retry_after_seconds": 900,
        "do_not_act_reason": "Probability/value threshold not met for paid bot execution.",
        "buyer_work_removed": [
          "multi_horizon_model_call",
          "probability_threshold_selection",
          "target_price_estimation",
          "economic_value_scoring",
          "risk_flag_packaging"
        ]
      },
      "drivers": [
        "rapid_price_decline",
        "large_expected_price_spread"
      ],
      "risk_flags": [
        "low_confidence"
      ],
      "model": {
        "name": "NegPrice-Decision-Intelligence-v4",
        "version": "4.1",
        "features": 47,
        "weather_enhanced": true,
        "multi_horizon": true,
        "supported_horizons_hours": [
          2,
          4,
          6
        ],
        "calibration": "isotonic probability calibration on final TimeSeriesSplit",
        "precision": 0.8115,
        "recall": 0.8564,
        "f1": 0.8333,
        "accuracy": 0.9791,
        "price_mae_eur_mwh": 13.36,
        "depth_mae_eur_mwh_in_sample": 8.17,
        "duration_mae_h_in_sample": 0.1,
        "validation": "5-fold expanding-window time-series cross-validation",
        "training_period": {
          "end": "2026-07-03",
          "start": "2023-07-02"
        },
        "trained_at": "2026-07-05T09:28:11.657666+00:00"
      }
    },
    "cross_market_spread": {
      "de_at": {
        "ts": 1783976400,
        "timestamp": "2026-07-13T21:00:00.000Z",
        "de_price_eur_mwh": 144.07,
        "at_price_eur_mwh": 149.81,
        "spread_de_minus_at_eur_mwh": -5.74,
        "cheaper_country": "DE"
      },
      "source": "Archived aWATTar DE/AT hourly prices",
      "bot_use": "Detect whether a cross-country price context changes the preferred flexible-load action."
    },
    "automation_policy": {
      "schema_version": "energy_bot_automation_policy_v1",
      "ready_to_execute": true,
      "recommended_action": "no_action_normal_operation",
      "selected_window": {
        "start": "2026-07-14T11:00:00.000Z",
        "end": "2026-07-14T13:00:00.000Z"
      },
      "expected_value_eur": 1.52,
      "negative_price_probability_2h": 0.0012,
      "minimum_confidence": 0.6,
      "bot_work_removed": [
        "source_fetching",
        "window_optimization",
        "negative_price_ml_scoring",
        "economic_value_calculation",
        "risk_flag_generation",
        "execution_threshold_policy"
      ]
    },
    "schema_contract": {
      "stable_fields": [
        "decision",
        "action",
        "recommended_window",
        "estimated_value",
        "carbon_impact",
        "confidence",
        "risk_flags",
        "source_status",
        "freshness",
        "ml_decision_intelligence",
        "cross_market_spread",
        "automation_policy"
      ],
      "output_type": "decision_not_raw_data"
    },
    "estimated": true,
    "inputs_used": {
      "current_price_ct_kwh": 13.96,
      "cheapest_avg_price_ct_kwh": 5.475,
      "day_avg_price_ct_kwh": 12.397,
      "carbon_intensity_g_co2_kwh": 419,
      "renewable_share_pct": 51.2,
      "assumed_power_kw": 11
    },
    "limitations": []
  },
  "recommendation": "charge_later between 2026-07-14T11:00:00.000Z and 2026-07-14T13:00:00.000Z",
  "price_paid": "0.01",
  "currency": "USDC",
  "network": "eip155:8453",
  "payment": {
    "required": true,
    "paid": true,
    "verified": true,
    "price_usd": 0.01,
    "amount_usdc": 0.01,
    "asset": "USDC",
    "network": "eip155:8453",
    "network_id": "eip155:8453",
    "chain_id": 8453,
    "protocol": "x402",
    "recipient": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E"
  },
  "meta": {
    "source": "aWATTar EPEX DE/AT + Electricity Maps/Fraunhofer + internal model",
    "source_type": "mixed",
    "updated_at": "2026-07-13T22:51:07.680Z",
    "generated_at": "2026-07-13T22:51:07.680Z",
    "cache_ttl_seconds": 600,
    "confidence": 0.85,
    "version": "2.0.0",
    "limitations": [],
    "source_status": {
      "price": "available",
      "carbon": "fallback",
      "renewable": "available"
    },
    "negative_price_ml": {
      "model": "NegPrice-Decision-Intelligence-v4",
      "version": "4.1",
      "confidence": 0.25,
      "action": "no_action_normal_operation"
    },
    "product_positioning": "paid decision layer, not raw data resale"
  }
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /research/quick Quick Research
Research and market-monitoring agents buy this endpoint to answer a focused question with a compact live market snapshot.
0.003 USDC
{
  "source": "EPEX (aWATTar)",
  "query": "Summarize the German electricity market for the next 24 hours.",
  "current_price": {
    "start": "2026-07-13T22:00:00.000Z",
    "end": "2026-07-13T23:00:00.000Z",
    "price_eur_mwh": 139.64,
    "price_ct_kwh": "13.96"
  },
  "timestamp": "2026-07-13T22:51:16.972Z"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /articles/{id} Premium Artikel
Volltext eines Energie-Fachartikels.
0.01 USDC
{
  "success": true,
  "type": "premium_article",
  "article": {}
}
400: Invalid request
402: Payment Required
404: Article not found
429: Rate limit exceeded
500: Internal server error
POST /tasks Async Bounty Task
Asynchroner Deep-Dive Task mit Mindest-Bounty.
ab 0.10 USDC
{
  "success": true,
  "task_id": "task_123",
  "status": "queued",
  "pricing_mode": "launch",
  "launch_min_price_usdc": 0.1,
  "normal_min_price_usdc": 1,
  "max_price_usdc": 100
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /price/spot Spotpreis jetzt
Trading and dispatch agents buy this endpoint to obtain the current German EPEX spot price for immediate decisions.
0.001 USDC
{
  "source": "EPEX DE/AT (aWATTar)",
  "timestamp": "2026-07-13T22:51:12.102Z",
  "current_price_ct_kwh": "13.96",
  "current_price_eur_mwh": 139.64,
  "valid_until": "2026-07-13T23:00:00.000Z"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /price/current Current Price DE/AT
Free current archived spot price for Germany or Austria. Query with country=DE or country=AT. Includes latest DE/AT spread when both markets are archived.
frei
{
  "ok": true,
  "country": "AT",
  "price_eur_mwh": 42.1,
  "spread": {
    "spread_de_minus_at_eur_mwh": -3.2,
    "cheaper_country": "DE"
  }
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /price/forecast 24h Preis-Forecast
Energy-trading and flexible-load agents buy this endpoint to compare the next 24 hours of EPEX prices and volatility.
0.005 USDC
{
  "source": "EPEX DE/AT 24h forecast",
  "timestamp": "2026-07-13T22:51:10.252Z",
  "hours": 24,
  "stats_eur_mwh": {
    "avg": "123.97",
    "min": "51.83",
    "max": "182.48",
    "spread": "130.65"
  },
  "hourly": [
    {
      "start": "2026-07-13T22:00:00.000Z",
      "end": "2026-07-13T23:00:00.000Z",
      "price_eur_mwh": 139.64,
      "price_ct_kwh": "13.96"
    },
    {
      "start": "2026-07-13T23:00:00.000Z",
      "end": "2026-07-14T00:00:00.000Z",
      "price_eur_mwh": 133.89,
      "price_ct_kwh": "13.39"
    },
    {
      "start": "2026-07-14T00:00:00.000Z",
      "end": "2026-07-14T01:00:00.000Z",
      "price_eur_mwh": 127.35,
      "price_ct_kwh": "12.73"
    },
    {
      "start": "2026-07-14T01:00:00.000Z",
      "end": "2026-07-14T02:00:00.000Z",
      "price_eur_mwh": 127.22,
      "price_ct_kwh": "12.72"
    },
    {
      "start": "2026-07-14T02:00:00.000Z",
      "end": "2026-07-14T03:00:00.000Z",
      "price_eur_mwh": 127.65,
      "price_ct_kwh": "12.77"
    },
    {
      "start": "2026-07-14T03:00:00.000Z",
      "end": "2026-07-14T04:00:00.000Z",
      "price_eur_mwh": 135.02,
      "price_ct_kwh": "13.50"
    },
    {
      "start": "2026-07-14T04:00:00.000Z",
      "end": "2026-07-14T05:00:00.000Z",
      "price_eur_mwh": 145.81,
      "price_ct_kwh": "14.58"
    },
    {
      "start": "2026-07-14T05:00:00.000Z",
      "end": "2026-07-14T06:00:00.000Z",
      "price_eur_mwh": 152.27,
      "price_ct_kwh": "15.23"
    },
    {
      "start": "2026-07-14T06:00:00.000Z",
      "end": "2026-07-14T07:00:00.000Z",
      "price_eur_mwh": 135.67,
      "price_ct_kwh": "13.57"
    },
    {
      "start": "2026-07-14T07:00:00.000Z",
      "end": "2026-07-14T08:00:00.000Z",
      "price_eur_mwh": 121.89,
      "price_ct_kwh": "12.19"
    },
    {
      "start": "2026-07-14T08:00:00.000Z",
      "end": "2026-07-14T09:00:00.000Z",
      "price_eur_mwh": 107.48,
      "price_ct_kwh": "10.75"
    },
    {
      "start": "2026-07-14T09:00:00.000Z",
      "end": "2026-07-14T10:00:00.000Z",
      "price_eur_mwh": 91.69,
      "price_ct_kwh": "9.17"
    },
    {
      "start": "2026-07-14T10:00:00.000Z",
      "end": "2026-07-14T11:00:00.000Z",
      "price_eur_mwh": 64.04,
      "price_ct_kwh": "6.40"
    },
    {
      "start": "2026-07-14T11:00:00.000Z",
      "end": "2026-07-14T12:00:00.000Z",
      "price_eur_mwh": 51.83,
      "price_ct_kwh": "5.18"
    },
    {
      "start": "2026-07-14T12:00:00.000Z",
      "end": "2026-07-14T13:00:00.000Z",
      "price_eur_mwh": 57.73,
      "price_ct_kwh": "5.77"
    },
    {
      "start": "2026-07-14T13:00:00.000Z",
      "end": "2026-07-14T14:00:00.000Z",
      "price_eur_mwh": 70,
      "price_ct_kwh": "7.00"
    },
    {
      "start": "2026-07-14T14:00:00.000Z",
      "end": "2026-07-14T15:00:00.000Z",
      "price_eur_mwh": 93.26,
      "price_ct_kwh": "9.33"
    },
    {
      "start": "2026-07-14T15:00:00.000Z",
      "end": "2026-07-14T16:00:00.000Z",
      "price_eur_mwh": 117.44,
      "price_ct_kwh": "11.74"
    },
    {
      "start": "2026-07-14T16:00:00.000Z",
      "end": "2026-07-14T17:00:00.000Z",
      "price_eur_mwh": 138.3,
      "price_ct_kwh": "13.83"
    },
    {
      "start": "2026-07-14T17:00:00.000Z",
      "end": "2026-07-14T18:00:00.000Z",
      "price_eur_mwh": 159.01,
      "price_ct_kwh": "15.90"
    },
    {
      "start": "2026-07-14T18:00:00.000Z",
      "end": "2026-07-14T19:00:00.000Z",
      "price_eur_mwh": 182.48,
      "price_ct_kwh": "18.25"
    },
    {
      "start": "2026-07-14T19:00:00.000Z",
      "end": "2026-07-14T20:00:00.000Z",
      "price_eur_mwh": 175.32,
      "price_ct_kwh": "17.53"
    },
    {
      "start": "2026-07-14T20:00:00.000Z",
      "end": "2026-07-14T21:00:00.000Z",
      "price_eur_mwh": 168.77,
      "price_ct_kwh": "16.88"
    },
    {
      "start": "2026-07-14T21:00:00.000Z",
      "end": "2026-07-14T22:00:00.000Z",
      "price_eur_mwh": 151.52,
      "price_ct_kwh": "15.15"
    }
  ]
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /carbon/now CO2-Intensität jetzt
Aktuelle CO2-Intensität des deutschen Strommix.
0.001 USDC
{
  "carbon_intensity_g_co2_kwh": 310,
  "classification": "medium"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /grid/load Netzlast
Grid-monitoring and dispatch agents buy this endpoint to obtain the latest German system load from SMARD.
0.001 USDC
{
  "source": "SMARD Bundesnetzagentur",
  "timestamp": "2026-07-13T21:45:00.000Z",
  "consumption_mwh": 12349,
  "grid": "DE"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /renewable/share Erneuerbare Anteil
Carbon-aware and ESG agents buy this endpoint to measure the current renewable share and generation mix in Germany.
0.001 USDC
{
  "source": "Fraunhofer ISE",
  "timestamp": "2026-07-13T22:51:15.822Z",
  "total_mw": 35323,
  "renewable_mw": 17468.8,
  "fossil_mw": 15203.4,
  "renewable_share_pct": "49.5",
  "breakdown_mw": {
    "Hydro Run-of-River": 1243,
    "Biomass": 3592.5,
    "Fossil brown coal / lignite": 7877.1,
    "Fossil hard coal": 2815.4,
    "Fossil oil": 377.6,
    "Fossil coal-derived gas": 462.5,
    "Fossil gas": 4133.3,
    "Geothermal": 13.4,
    "Hydro water reservoir": 39.2,
    "Hydro pumped storage": 550.5,
    "Others": 136.6,
    "Waste": 1448.6,
    "Wind offshore": 3560.3,
    "Wind onshore": 9073,
    "Solar": 0
  }
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /flexibility/window Flexibility Window
EV, heat-pump, and flexible-load agents buy this endpoint to identify the cheapest upcoming operating hours.
0.01 USDC
{
  "source": "EPEX + Corrently Analyse",
  "timestamp": "2026-07-13T22:51:13.311Z",
  "recommendation": "Beste Lade-/Heiz-Zeitfenster der nächsten 24h basierend auf Spotpreisen und GrünstromIndex",
  "cheapest_hours": [
    {
      "hour": 13,
      "start": "2026-07-14T11:00:00.000Z",
      "price_ct_kwh": 5.18,
      "score": -5.18
    },
    {
      "hour": 14,
      "start": "2026-07-14T12:00:00.000Z",
      "price_ct_kwh": 5.77,
      "score": -5.77
    },
    {
      "hour": 12,
      "start": "2026-07-14T10:00:00.000Z",
      "price_ct_kwh": 6.4,
      "score": -6.4
    }
  ],
  "most_expensive_hours": [
    {
      "hour": 20,
      "start": "2026-07-14T18:00:00.000Z",
      "price_ct_kwh": 18.25,
      "score": -18.25
    },
    {
      "hour": 21,
      "start": "2026-07-14T19:00:00.000Z",
      "price_ct_kwh": 17.53,
      "score": -17.53
    },
    {
      "hour": 22,
      "start": "2026-07-14T20:00:00.000Z",
      "price_ct_kwh": 16.88,
      "score": -16.88
    }
  ],
  "hint": "Niedrige Preise korrelieren oft mit hoher EE-Einspeisung"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /signals/buy-sell Buy/Sell Signal
Trading bots buy this endpoint to receive a multi-factor buy/sell signal with RSI, Z-score, trend, and confidence.
0.02 USDC
{
  "source": "Multi-Faktor Energy Trading Signal v2",
  "timestamp": "2026-07-13T22:51:20.694Z",
  "signal": "SELL",
  "action": "Verkauf empfohlen",
  "confidence_score": 0.75,
  "composite_score": -2,
  "indicators": {
    "rsi_24h": "67.2",
    "z_score_7d": "1.60",
    "trend_ct_kwh": "-0.97",
    "ee_pressure": 0,
    "fossil_share_pct": "42.0"
  },
  "factors": {
    "rsi": "neutral",
    "mean_reversion": "above_avg"
  },
  "market_data": {
    "current_price_ct_kwh": 13.96,
    "day_avg_ct_kwh": "12.40",
    "day_min_ct_kwh": "5.18",
    "day_max_ct_kwh": "18.25",
    "week_avg_ct_kwh": "10.58"
  },
  "valid_until": "2026-07-13T23:00:00.000Z",
  "methodology": "RSI + Z-Score (7d) + Trend + EE-Druck + Fossil-Anteil. Backtest verfügbar auf /signals/track-record"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /bundle/trading Trading Bundle
Energy-trading agents buy this endpoint to receive an eight-source market bundle with key metrics, insights, and raw evidence.
0.02 USDC
{
  "bundle": "trading-premium",
  "summary": "Live-Analyse \"Assess DE-LU day-ahead trading conditions for the next 24 hours.\" basierend auf 8 aktiven Datenquellen. 13 Kennzahlen extrahiert. 5 Markteinblicke. Datenstand: 2026-07-13T22:51.",
  "key_metrics": [
    {
      "label": "EPEX Spotpreis aktuell",
      "value": "13.96",
      "unit": "ct/kWh"
    },
    {
      "label": "EPEX Tagesmittel",
      "value": "12.40",
      "unit": "ct/kWh"
    },
    {
      "label": "Erneuerbarer Anteil (Gen, live)",
      "value": "51.2",
      "unit": "%"
    },
    {
      "label": "EE-Anteil Last (live)",
      "value": "39.7",
      "unit": "%"
    },
    {
      "label": "Fossiler Anteil (live)",
      "value": "48.5",
      "unit": "%"
    },
    {
      "label": "Stromerzeugung gesamt (live)",
      "value": "35323",
      "unit": "MW"
    },
    {
      "label": "Wind onshore live",
      "value": "9073",
      "unit": "MW"
    },
    {
      "label": "Wind offshore live",
      "value": "3560.3",
      "unit": "MW"
    },
    {
      "label": "Stromverbrauch DE (15min)",
      "value": "12349",
      "unit": "MWh"
    },
    {
      "label": "GruenstromIndex 24h-Schnitt",
      "value": "49",
      "unit": "%"
    },
    {
      "label": "Solarstrahlung 24h-Schnitt",
      "value": "306",
      "unit": "W/m2"
    },
    {
      "label": "Windgeschwindigkeit 24h-Schnitt",
      "value": "6.5",
      "unit": "m/s"
    },
    {
      "label": "ENTSO-E Day-Ahead Mittel",
      "value": "121.85",
      "unit": "EUR/MWh"
    }
  ],
  "market_insights": [
    "Hohe Tagesvolatilitaet: 131 EUR/MWh Spread. Arbitrage-Potential 13.1 ct/kWh fuer Batteriespeicher (>40% RTE benoetigt).",
    "Billigste Stunde heute: 13:00 (5.18 ct/kWh). Teuerste: 20:00 (18.25 ct/kWh).",
    "Hohe CO2-Intensitaet (419 g/kWh). Hoher fossiler Anteil im Netz - Verbrauch nach Moeglichkeit verschieben.",
    "Hoher Strom-Import: 6537.7 MW. Indikator fuer Netzungleichgewicht.",
    "Geringer Stromverbrauch (12349 MWh). Niedrige Last - typisch Nacht/Wochenende."
  ],
  "regulatory_context": [],
  "data_sources_used": [
    "awattar_de",
    "fraunhofer_ise",
    "open_meteo",
    "smard",
    "corrently",
    "co2_intensity",
    "entsoe_day_ahead",
    "entsoe_generation"
  ],
  "raw_data": {
    "awattar_de": {
      "source": "aWATTar EPEX DE/AT",
      "count": 24,
      "prices": [
        {
          "start": "2026-07-13T22:00:00.000Z",
          "end": "2026-07-13T23:00:00.000Z",
          "price_eur_mwh": 139.64,
          "price_ct_kwh": "13.96"
        },
        {
          "start": "2026-07-13T23:00:00.000Z",
          "end": "2026-07-14T00:00:00.000Z",
          "price_eur_mwh": 133.89,
          "price_ct_kwh": "13.39"
        },
        {
          "start": "2026-07-14T00:00:00.000Z",
          "end": "2026-07-14T01:00:00.000Z",
          "price_eur_mwh": 127.35,
          "price_ct_kwh": "12.73"
        },
        {
          "start": "2026-07-14T01:00:00.000Z",
          "end": "2026-07-14T02:00:00.000Z",
          "price_eur_mwh": 127.22,
          "price_ct_kwh": "12.72"
        },
        {
          "start": "2026-07-14T02:00:00.000Z",
          "end": "2026-07-14T03:00:00.000Z",
          "price_eur_mwh": 127.65,
          "price_ct_kwh": "12.77"
        },
        {
          "start": "2026-07-14T03:00:00.000Z",
          "end": "2026-07-14T04:00:00.000Z",
          "price_eur_mwh": 135.02,
          "price_ct_kwh": "13.50"
        },
        {
          "start": "2026-07-14T04:00:00.000Z",
          "end": "2026-07-14T05:00:00.000Z",
          "price_eur_mwh": 145.81,
          "price_ct_kwh": "14.58"
        },
        {
          "start": "2026-07-14T05:00:00.000Z",
          "end": "2026-07-14T06:00:00.000Z",
          "price_eur_mwh": 152.27,
          "price_ct_kwh": "15.23"
        },
        {
          "start": "2026-07-14T06:00:00.000Z",
          "end": "2026-07-14T07:00:00.000Z",
          "price_eur_mwh": 135.67,
          "price_ct_kwh": "13.57"
        },
        {
          "start": "2026-07-14T07:00:00.000Z",
          "end": "2026-07-14T08:00:00.000Z",
          "price_eur_mwh": 121.89,
          "price_ct_kwh": "12.19"
        },
        {
          "start": "2026-07-14T08:00:00.000Z",
          "end": "2026-07-14T09:00:00.000Z",
          "price_eur_mwh": 107.48,
          "price_ct_kwh": "10.75"
        },
        {
          "start": "2026-07-14T09:00:00.000Z",
          "end": "2026-07-14T10:00:00.000Z",
          "price_eur_mwh": 91.69,
          "price_ct_kwh": "9.17"
        },
        {
          "start": "2026-07-14T10:00:00.000Z",
          "end": "2026-07-14T11:00:00.000Z",
          "price_eur_mwh": 64.04,
          "price_ct_kwh": "6.40"
        },
        {
          "start": "2026-07-14T11:00:00.000Z",
          "end": "2026-07-14T12:00:00.000Z",
          "price_eur_mwh": 51.83,
          "price_ct_kwh": "5.18"
        },
        {
          "start": "2026-07-14T12:00:00.000Z",
          "end": "2026-07-14T13:00:00.000Z",
          "price_eur_mwh": 57.73,
          "price_ct_kwh": "5.77"
        },
        {
          "start": "2026-07-14T13:00:00.000Z",
          "end": "2026-07-14T14:00:00.000Z",
          "price_eur_mwh": 70,
          "price_ct_kwh": "7.00"
        },
        {
          "start": "2026-07-14T14:00:00.000Z",
          "end": "2026-07-14T15:00:00.000Z",
          "price_eur_mwh": 93.26,
          "price_ct_kwh": "9.33"
        },
        {
          "start": "2026-07-14T15:00:00.000Z",
          "end": "2026-07-14T16:00:00.000Z",
          "price_eur_mwh": 117.44,
          "price_ct_kwh": "11.74"
        },
        {
          "start": "2026-07-14T16:00:00.000Z",
          "end": "2026-07-14T17:00:00.000Z",
          "price_eur_mwh": 138.3,
          "price_ct_kwh": "13.83"
        },
        {
          "start": "2026-07-14T17:00:00.000Z",
          "end": "2026-07-14T18:00:00.000Z",
          "price_eur_mwh": 159.01,
          "price_ct_kwh": "15.90"
        },
        {
          "start": "2026-07-14T18:00:00.000Z",
          "end": "2026-07-14T19:00:00.000Z",
          "price_eur_mwh": 182.48,
          "price_ct_kwh": "18.25"
        },
        {
          "start": "2026-07-14T19:00:00.000Z",
          "end": "2026-07-14T20:00:00.000Z",
          "price_eur_mwh": 175.32,
          "price_ct_kwh": "17.53"
        },
        {
          "start": "2026-07-14T20:00:00.000Z",
          "end": "2026-07-14T21:00:00.000Z",
          "price_eur_mwh": 168.77,
          "price_ct_kwh": "16.88"
        },
        {
          "start": "2026-07-14T21:00:00.000Z",
          "end": "2026-07-14T22:00:00.000Z",
          "price_eur_mwh": 151.52,
          "price_ct_kwh": "15.15"
        }
      ]
    },
    "fraunhofer_ise": {
      "source": "Fraunhofer ISE energy-charts",
      "timestamp": "2026-07-13T22:51:18.343Z",
      "production_mw": {
        "Hydro Run-of-River": 1243,
        "Biomass": 3592.5,
        "Fossil brown coal / lignite": 7877.1,
        "Fossil hard coal": 2815.4,
        "Fossil oil": 377.6,
        "Fossil coal-derived gas": 462.5,
        "Fossil gas": 4133.3,
        "Geothermal": 13.4,
        "Hydro water reservoir": 39.2,
        "Hydro pumped storage": 550.5,
        "Others": 136.6,
        "Waste": 1448.6,
        "Wind offshore": 3560.3,
        "Wind onshore": 9073,
        "Solar": 0
      },
      "raw_all_metrics": {
        "Hydro pumped storage consumption": -25.7,
        "Cross border electricity trading": 6537.7,
        "Hydro Run-of-River": 1243,
        "Biomass": 3592.5,
        "Fossil brown coal / lignite": 7877.1,
        "Fossil hard coal": 2815.4,
        "Fossil oil": 377.6,
        "Fossil coal-derived gas": 462.5,
        "Fossil gas": 4133.3,
        "Geothermal": 13.4,
        "Hydro water reservoir": 39.2,
        "Hydro pumped storage": 550.5,
        "Others": 136.6,
        "Waste": 1448.6,
        "Wind offshore": 3560.3,
        "Wind onshore": 9073,
        "Solar": 0,
        "Load": 45823.4,
        "Residual load": 33190.1,
        "Renewable share of load": 39.7,
        "Renewable share of generation": 52.4
      },
      "summary": {
        "total_generation_mw": 35323,
        "renewable_mw": 18072,
        "fossil_mw": 17115,
        "nuclear_mw": 0,
        "renewable_share_pct": 51.2,
        "fossil_share_pct": 48.5,
        "load_mw": 45823.4,
        "cross_border_mw": 6537.7,
        "renewable_share_of_load_pct": 39.7,
        "renewable_share_of_generation_pct": 52.4
      },
      "types_count": 15
    },
    "open_meteo": {
      "source": "Open-Meteo",
      "location": {
        "lat": 51.5,
        "lon": 10.5,
        "label": "DE Mitte"
      },
      "hours": 24,
      "avg_cloudcover_pct": 36,
      "avg_windspeed_ms": "6.5",
      "avg_solar_radiation": 306,
      "next_hour": {
        "time": "2026-07-13T00:00",
        "temp_c": 17.4,
        "wind_ms": 4.5,
        "cloud_pct": 0
      }
    },
    "smard": {
      "source": "SMARD Bundesnetzagentur",
      "latest_consumption_mwh": 12349,
      "timestamp": "2026-07-13T21:45:00.000Z",
      "series_count": 96
    },
    "corrently": {
      "source": "Corrently GruenstromIndex",
      "zip": "10115",
      "avg_eevalue_pct": 49,
      "next_3h": [
        {
          "time": "2026-07-13T20:00:00.000Z",
          "gruenstrom_pct": 18,
          "co2_g_kwh": 55
        },
        {
          "time": "2026-07-13T21:00:00.000Z",
          "gruenstrom_pct": 17,
          "co2_g_kwh": 55
        },
        {
          "time": "2026-07-13T22:00:00.000Z",
          "gruenstrom_pct": 26,
          "co2_g_kwh": 50
        }
      ]
    },
    "co2_intensity": {
      "source": "Die Netzhandwerker CO2-Calc (Fraunhofer + UBA Emissionsfaktoren)",
      "zone": "DE",
      "timestamp": "2026-07-13T22:51:18.400Z",
      "carbon_intensity_g_co2_kwh": 419,
      "method": "mix_weighted_generation_only",
      "total_generation_mw": 35323,
      "renewable_share_pct": 51.2
    },
    "entsoe_day_ahead": {
      "source": "ENTSO-E Transparency",
      "zone": "DE-LU",
      "day_ahead_prices_eur_mwh": [
        143.9,
        138.1,
        135.81,
        131.84,
        136.38,
        135.53,
        134.67,
        133.82,
        133.01,
        132.15,
        131.3,
        130.45,
        129.99,
        128.9,
        132.8,
        129.51,
        128.71,
        131.36,
        134,
        136.65,
        132.68,
        138.43,
        144.17,
        143.4
      ],
      "count": 384,
      "avg_eur_mwh": "121.85",
      "min_eur_mwh": "22.85",
      "max_eur_mwh": "228.10"
    },
    "entsoe_generation": {
      "source": "ENTSO-E Generation",
      "zone": "DE",
      "period_hours": 6,
      "raw_size_kb": 54
    }
  },
  "confidence_score": 0.95,
  "timestamp": "2026-07-13T22:51:19.511Z"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /history/prices Historische Preise
Stundendaten für EPEX-Preise nach Periode.
0.05 USDC
{
  "period": "last-7d",
  "rows": []
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /history/prices/stats Preisstatistik
Statistik für eine historische Preisperiode.
0.01 USDC
{
  "avg_eur_mwh": 92.1,
  "min_eur_mwh": 40.2,
  "max_eur_mwh": 160
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /subscribe/price-alert Price Alert Subscription
Webhook-Subscription für Strompreis-Thresholds.
0.10 USDC
{
  "success": true,
  "subscription": "price-alert"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /subscribe/co2-low CO2 Low Subscription
Webhook-Subscription für niedrige CO2-Intensität.
0.10 USDC
{
  "success": true,
  "subscription": "co2-low"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /optimizer/cheapest-window Cheapest Window
Flexible-load agents buy this endpoint to schedule a contiguous operating window at the lowest average electricity price.
0.005 USDC
{
  "source": "Cheapest Window Optimizer",
  "timestamp": "2026-07-13T22:51:21.971Z",
  "duration_hours": 2,
  "best_start": "2026-07-14T11:00:00.000Z",
  "best_end": "2026-07-14T13:00:00.000Z",
  "avg_price_ct_kwh": "5.475",
  "day_avg_ct_kwh": "12.397",
  "savings_vs_avg_pct": "55.8",
  "action": "charge_during_window",
  "window": [
    {
      "start": "2026-07-14T11:00:00.000Z",
      "end": "2026-07-14T12:00:00.000Z",
      "price": 5.18
    },
    {
      "start": "2026-07-14T12:00:00.000Z",
      "end": "2026-07-14T13:00:00.000Z",
      "price": 5.77
    }
  ]
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /price/negative-forecast Negative Price Forecast
Stunden mit negativen Strompreisen in den nächsten 24 Stunden.
0.005 USDC
{
  "negative_hours": [],
  "count": 0
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /grid/cross-border-flows Cross-Border Flows
Free latest ENTSO-E physical cross-border flows around Germany, including outbound, inbound and net export MW. Used as model feature net_export_mw.
frei
{
  "ok": true,
  "available": true,
  "net_export_mw": 4200,
  "outbound": [
    {
      "from_area": "DE",
      "to_area": "AT",
      "flow_mw": 900
    }
  ]
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /stream/alerts SSE Alert Stream
Free Server-Sent Events preview for negative-price alerts. Heartbeat every 30s, prediction check every 5 minutes, max 50 concurrent connections. Later subscription product.
frei
"event: alert\\ndata: {\"type\":\"warning\",\"probability\":0.62}\\n\\n"
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
GET /predict/negative-price Negative Price Signal Index
Free poll endpoint. Reveals whether a fresh actionable signal exists, its probability band and expiry, but withholds exact probability, action, time window and expected value until paid POST.
frei
{
  "signal_id": "negprice_2026-07-12T13",
  "actionable": true,
  "probability_band": "high",
  "changed_since_last_signal": true,
  "generated_at": "2026-07-12T12:00:00.000Z",
  "expires_at": "2026-07-12T13:00:00.000Z",
  "paid_endpoint": "POST /predict/negative-price",
  "price_usdc": "0.001"
}
400: Invalid request
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /predict/negative-price Buy Current Negative Price Signal
Battery, EV, and trading agents buy this endpoint to receive calibrated 2h/4h/6h negative-price probabilities, reviewed threshold profiles and an executable response policy.
0.001 USDC
{
  "ok": true,
  "product": "Optimization Signals",
  "endpoint": "/predict/negative-price",
  "query": {},
  "result": {
    "ok": true,
    "prediction": {
      "negative_price_in_2h": false,
      "probability": 0.0012,
      "risk_level": "low",
      "action": "no_action_normal_operation",
      "target_window": {
        "start": "2026-07-14T00:00:00+00:00",
        "end": "2026-07-14T01:00:00+00:00",
        "lead_hours": 2
      },
      "predicted_price_eur_mwh": 110.53,
      "expected_saving_eur_mwh": 29.11
    },
    "horizons": [
      {
        "lead_hours": 2,
        "negative_price": false,
        "probability": 0.0012,
        "risk_level": "low",
        "predicted_price_eur_mwh": 110.53,
        "expected_saving_eur_mwh": 29.11,
        "target_window": {
          "start": "2026-07-14T00:00:00+00:00",
          "end": "2026-07-14T01:00:00+00:00",
          "lead_hours": 2
        },
        "bot_value_score": 5.82
      },
      {
        "lead_hours": 4,
        "negative_price": false,
        "probability": 0.0716,
        "risk_level": "low",
        "predicted_price_eur_mwh": 87.74,
        "expected_saving_eur_mwh": 51.9,
        "target_window": {
          "start": "2026-07-14T02:00:00+00:00",
          "end": "2026-07-14T03:00:00+00:00",
          "lead_hours": 4
        },
        "bot_value_score": 10.38
      },
      {
        "lead_hours": 6,
        "negative_price": false,
        "probability": 0.1101,
        "risk_level": "low",
        "predicted_price_eur_mwh": 85.34,
        "expected_saving_eur_mwh": 54.3,
        "target_window": {
          "start": "2026-07-14T04:00:00+00:00",
          "end": "2026-07-14T05:00:00+00:00",
          "lead_hours": 6
        },
        "bot_value_score": 10.86
      }
    ],
    "decision_engine": {
      "schema_version": "negprice_bot_decision_v1",
      "recommended_action": "no_action_normal_operation",
      "should_act": false,
      "policy": "below_action_threshold",
      "selected_horizon_hours": 6,
      "target_window": {
        "start": "2026-07-14T04:00:00+00:00",
        "end": "2026-07-14T05:00:00+00:00",
        "lead_hours": 6
      },
      "probability": 0.1101,
      "expected_target_price_eur_mwh": 85.34,
      "expected_saving_eur_mwh": 54.3,
      "bot_value_score": 10.86,
      "minimum_probability_threshold": 0.25,
      "confidence": 0.25,
      "valid_until": "2026-07-13T23:00:00+00:00",
      "retry_after_seconds": 900,
      "do_not_act_reason": "Probability/value threshold not met for paid bot execution.",
      "buyer_work_removed": [
        "multi_horizon_model_call",
        "probability_threshold_selection",
        "target_price_estimation",
        "economic_value_scoring",
        "risk_flag_packaging"
      ]
    },
    "historical_analogies": [
      {
        "date": "2026-06-01T22:00:00+00:00",
        "similarity": 0.9999,
        "price_trajectory_next_6h": [
          131.72,
          125.09,
          120.92,
          120.63,
          124.22,
          131.03
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 120.63
      },
      {
        "date": "2026-06-22T22:00:00+00:00",
        "similarity": 0.9996,
        "price_trajectory_next_6h": [
          139.13,
          135.01,
          135.82,
          138.06,
          142.3,
          164.22
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 135.01
      },
      {
        "date": "2026-05-18T22:00:00+00:00",
        "similarity": 0.9996,
        "price_trajectory_next_6h": [
          141.94,
          139.32,
          138.54,
          141.57,
          146.92,
          164.46
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 138.54
      },
      {
        "date": "2026-05-25T22:00:00+00:00",
        "similarity": 0.9994,
        "price_trajectory_next_6h": [
          125.65,
          120.65,
          121.18,
          119.53,
          128.91,
          143.11
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 119.53
      },
      {
        "date": "2026-03-23T22:00:00+00:00",
        "similarity": 0.9989,
        "price_trajectory_next_6h": [
          141.06,
          124.32,
          110,
          101.64,
          100.38,
          100.97
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 100.38
      },
      {
        "date": "2026-06-15T22:00:00+00:00",
        "similarity": 0.9981,
        "price_trajectory_next_6h": [
          117.32,
          113.78,
          110.99,
          111.24,
          115.12,
          127.99
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 110.99
      },
      {
        "date": "2026-06-29T22:00:00+00:00",
        "similarity": 0.9977,
        "price_trajectory_next_6h": [
          145.37,
          140.21,
          140.72,
          141.37,
          151.51,
          186.66
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 140.21
      },
      {
        "date": "2026-06-08T22:00:00+00:00",
        "similarity": 0.9958,
        "price_trajectory_next_6h": [
          122.16,
          115.5,
          111.22,
          110.48,
          115.84,
          130.15
        ],
        "negative_duration_h": 0,
        "min_price_eur_mwh": 110.48
      }
    ],
    "current_market": {
      "price_eur_mwh": 139.64,
      "price_ct_kwh": 13.96,
      "timestamp": "2026-07-13T22:00:00+00:00",
      "trend_1h_eur_mwh": -4.43,
      "trend_2h_eur_mwh": -19.43,
      "trend_4h_eur_mwh": -43.36,
      "rolling_avg_4h_eur_mwh": 163.74,
      "is_weekend": false,
      "is_solar_peak": false,
      "net_export_mw": -793.28
    },
    "weather_input": {
      "wind_now_ms": 4.7,
      "wind_2h_ms": 8.4,
      "wind_4h_ms": 10.2,
      "solar_now_wm2": 0,
      "solar_2h_wm2": 0,
      "solar_4h_wm2": 0,
      "cloud_now_pct": 100,
      "renewable_pressure": 0.313,
      "renewable_pressure_2h": 0.56
    },
    "crossborder_input": {
      "net_export_mw": -793.28,
      "available_for_latest_hour": true,
      "source": "ENTSO-E physical cross-border flows"
    },
    "smard_input": {
      "available_for_latest_hour": false,
      "total_renewable_generation_mw": 0,
      "total_load_mw": 0,
      "residual_load_mw": 0,
      "gas_generation_mw": 0,
      "coal_generation_mw": 0,
      "nuclear_generation_mw": 0
    },
    "gas_input": {
      "available": true,
      "gas_price_eur_mwh": 48.655,
      "source": "Yahoo Finance TTF=F via gas_prices_daily"
    },
    "drivers": [
      "rapid_price_decline",
      "large_expected_price_spread"
    ],
    "risk_flags": [
      "low_confidence"
    ],
    "bot_contract": {
      "product": "negative_price_decision_intelligence",
      "output_type": "ready_to_execute_decision",
      "stable_fields": [
        "prediction",
        "horizons",
        "decision_engine",
        "historical_analogies",
        "current_market",
        "weather_input",
        "crossborder_input",
        "drivers",
        "risk_flags",
        "model"
      ],
      "why_paid": "The payload packages calibrated probabilities, target-price regression, economic threshold policy and bot-ready action fields."
    },
    "model": {
      "name": "NegPrice-Decision-Intelligence-v4",
      "version": "4.1",
      "features": 47,
      "weather_enhanced": true,
      "multi_horizon": true,
      "supported_horizons_hours": [
        2,
        4,
        6
      ],
      "calibration": "isotonic probability calibration on final TimeSeriesSplit",
      "precision": 0.8115,
      "recall": 0.8564,
      "f1": 0.8333,
      "accuracy": 0.9791,
      "price_mae_eur_mwh": 13.36,
      "depth_mae_eur_mwh_in_sample": 8.17,
      "duration_mae_h_in_sample": 0.1,
      "validation": "5-fold expanding-window time-series cross-validation",
      "training_period": {
        "end": "2026-07-03",
        "start": "2023-07-02"
      },
      "trained_at": "2026-07-05T09:28:11.657666+00:00"
    },
    "schema_version": "negprice_signal_v1",
    "expires_at": "2026-07-13T23:00:00+00:00",
    "freshness": {
      "fresh": true,
      "generated_at": "2026-07-13T22:00:00+00:00",
      "expires_at": "2026-07-13T23:00:00+00:00",
      "age_seconds": 3069,
      "seconds_until_expiry": 531,
      "stale_reason": null
    }
  },
  "recommendation": "no_action_normal_operation",
  "price_paid": "0.001",
  "currency": "USDC",
  "network": "eip155:8453",
  "payment": {
    "required": true,
    "paid": true,
    "verified": true,
    "price_usd": 0.001,
    "amount_usdc": 0.001,
    "asset": "USDC",
    "network": "eip155:8453",
    "network_id": "eip155:8453",
    "chain_id": 8453,
    "protocol": "x402",
    "recipient": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E"
  },
  "meta": {
    "source": "NegPrice Decision Intelligence v4.1",
    "source_type": "ml_decision_intelligence",
    "updated_at": "2026-07-13T22:51:09.080Z",
    "generated_at": "2026-07-13T22:51:09.081Z",
    "cache_ttl_seconds": 60,
    "confidence": 0.25,
    "version": "2.0.0",
    "limitations": []
  }
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /summary/today Daily Summary
Token-effiziente Tageszusammenfassung mit konkreter Handlungsempfehlung.
0.01 USDC
{
  "market_sentiment": "neutral",
  "recommendation": "shift flexible load to cheapest window"
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /region Regionale Energiedaten
Preis, CO2, Grünstrom und Wetter für eine PLZ-Region.
0.005 USDC
{
  "plz": "48599",
  "region": "DE",
  "data": {}
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error
POST /events/grid Grid Events
Ereignisfeed für Dunkelflaute, Sturm, negative Preise und Rekorde.
0.005 USDC
{
  "events": [
    {
      "type": "negative_price",
      "severity": "low"
    }
  ]
}
400: Invalid request
402: Payment Required
404: Not found
429: Rate limit exceeded
500: Internal server error

Discovery

OpenAPI · llms.txt · llms-full.txt · MCP well-known · Agent manifest

Contact / Operator

Operator: Die Netzhandwerker, Daniel Wesseling. Contact: [email protected].