Implementing Intraday Market-Making with Energy API: Risk Limits, Inventory Management, and Execution Strategies for Power Traders

Implementing Intraday Market-Making with Energy API: Risk Limits, Inventory Management, and Execution Strategies for Power Traders

Intraday power traders, quant developers, and risk teams all wrestle with the same reality: market-making in electricity is a game of minutes. Quotes must reflect the latest auction releases, balancing prices, and cross-commodity relationships with gas, oil, coal, and carbon. Inventory must be watched and steered within risk limits, while bid/ask spreads must adjust to volatility and liquidity. It’s hard enough to engineer resilient execution, but it’s nearly impossible to do that if your market data pipeline is stitched together from incompatible public feeds and undocumented CSVs.

This post shows how to implement intraday market-making for power using a single, normalized data surface: Energy API. We will focus on three pillars you need to ship fast and trade safely: risk limits (real-time guardrails and alerting), inventory management (exposure and hedging signals), and execution strategies (spread models, curve-aware quoting, and cross-commodity context). You’ll see how to assemble robust price curves, historical baselines, and operational telemetry in a few API calls—no bespoke scrapers, no manual column mapping, and no guesswork about timezone alignment.

By the end, you’ll have a clear blueprint for:

  • Fetching and normalizing intraday electricity curves alongside gas and carbon in a single JSON schema.
  • Quantifying short-term volatility and regime shifts with OHLC and fluctuation endpoints.
  • Automating risk checks, inventory limits, and mark-to-market using the same interface for all commodities.
  • Feeding execution logic with day-ahead auction results and intraday updates—without rewriting ETL for every new country or provider.

Why Energy API

Every power market looks different on the surface—different auction calendars, time granularities, currency conventions, and data portals. The practical consequence for a market-making team is expensive data plumbing and brittle integrations. Energy API solves that with a unified REST interface that covers electricity, natural gas, oil, coal, carbon allowances, and carbon intensity under one JSON schema. Here’s why that matters for finance-grade systems:

  • One normalized interface across sources. Instead of writing custom adapters for OMIE, ENTSO-E, ESIOS, EIA/FRED, and others, you integrate once. The same fields, types, and array shapes show up across all endpoints and symbols. Developers ship features in hours, not weeks of ETL refactoring.
  • Cross-commodity context in the same call. Intraday electricity quotes often lean on gas spark spreads, EUA price signals, or even crude and coal as macro context. Energy API’s latest and timeseries endpoints accept multiple symbols from different categories at once, letting you calculate spreads and hedges on the fly without juggling multiple client libraries or schemas.
  • Curve-aware electricity data. For markets that publish intraday or day-ahead hourly/15-min curves, you can fetch the entire shape in one call. This is crucial for time-slicing inventory steering, dynamic spreads by hour, and avoiding shorts at hours with scarce liquidity or high system stress.
  • Operational reliability built in. Health and provider status endpoints let you wire up monitors and circuit breakers that degrade gracefully if a source is behind schedule. Your execution stack can make informed choices—pause quoting on a lagging symbol, widen spreads, or switch to last-known-good values—automatically.

Quick Start

Energy API exposes a consistent REST surface. The base URL is:

https://energy-api.com/api/v1

Requests include an api_key query parameter. For a first sanity check, hit the /latest endpoint with multiple symbols across categories to see normalized values on one line:

curl -G https://energy-api.com/api/v1/latest \
--data-urlencode "symbols=OMIE_ES_DA,TTF_GAS,EUA_CO2,BRENT_CRUDE" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"date": "2026-06-11",
"base": "MIXED",
"rates": {
"OMIE_ES_DA": 92.35,
"TTF_GAS": 38.15,
"EUA_CO2": 67.40,
"BRENT_CRUDE": 74.82
},
"dates": {
"OMIE_ES_DA": "2026-06-11",
"TTF_GAS": "2026-06-11",
"EUA_CO2": "2026-06-11",
"BRENT_CRUDE": "2026-06-11"
},
"currencies": {
"OMIE_ES_DA": "EUR",
"TTF_GAS": "EUR",
"EUA_CO2": "EUR",
"BRENT_CRUDE": "USD"
}
}

Key fields you’ll use:

  • success: Boolean guardrail for error handling.
  • date: Most recent consolidated date across requested symbols (some release on different schedules).
  • rates: Normalized numeric values per symbol.
  • dates: Per-symbol publish dates—useful when calculating staleness-aware spreads.
  • currencies: Per-symbol currency codes—crucial for conversion or margin reporting.

With this one call, you can compute spark spreads, EUA-adjusted costs, and oil-linked sentiment, then feed a market-making model with fresh context.

Core Endpoints for Intraday Market-Making

1) Discover Tradables and Metadata — GET /symbols

Before you build quoting logic, you need to map markets, countries, and categories to internal product IDs. The /symbols endpoint returns all active instruments with metadata, normalized across providers. This step eliminates a massive ETL task and supports future expansion into new geographies and commodities.

Endpoint: /symbols

Useful params:

  • category: Filter to gas, electricity, oil, coal, carbon, or carbon_intensity.
  • base: Filter by currency code if you only want EUR or USD-denominated references.
  • provider: Optionally filter by upstream source (e.g., omie, fred, entso-e, esios).
curl -G https://energy-api.com/api/v1/symbols \
--data-urlencode "category=electricity" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"count": 4,
"symbols": [
{
"symbol": "OMIE_ES_DA",
"name": "OMIE Spain Day-Ahead",
"category": "electricity",
"country_code": "ES",
"currency_code": "EUR",
"frequency": "daily",
"description": "OMIE day-ahead auction clearing price."
},
{
"symbol": "EPEX_DE_DA",
"name": "EPEX Germany Day-Ahead",
"category": "electricity",
"country_code": "DE",
"currency_code": "EUR",
"frequency": "daily",
"description": "EPEX SPOT day-ahead auction for Germany."
},
{
"symbol": "PVPC_ES_2TD",
"name": "Spain PVPC 2TD",
"category": "electricity",
"country_code": "ES",
"currency_code": "EUR",
"frequency": "hourly",
"description": "Hourly PVPC reference prices for Spain."
},
{
"symbol": "AEMO_NSW1",
"name": "AEMO NSW Region",
"category": "electricity",
"country_code": "AU",
"currency_code": "AUD",
"frequency": "5min",
"description": "Australian NEM regional price (NSW)."
}
]
}

Practical uses:

  • Populate instrument pickers in UIs and ensure downstream jobs are symbol-driven (not hard-coded).
  • Align portfolio mapping (country_code, currency_code) for margin and P&L grouping.
  • Drive per-product quoting parameters (e.g., frequency informs expected update cadence and cache TTLs).

2) Get the Latest Cross-Commodity Context — GET /latest

Market-makers price electricity with an eye on gas and carbon. A streamlined, unified call preserves latency budgets and simplifies error handling. Pair it with a periodic update loop that re-calculates spreads only when inputs change or pass staleness thresholds.

Endpoint: /latest

Key params:

  • symbols: Comma-separated list of instruments across categories.
  • base: Optional currency filter to standardize outputs.
  • category: Optional filter if you want a whole category in one go (less common for spread logic).
curl -G https://energy-api.com/api/v1/latest \
--data-urlencode "symbols=EPEX_DE_DA,TTF_GAS,EUA_CO2" \
--data-urlencode "api_key=YOUR_API_KEY"

Example response (abbreviated fields explained previously):

{
"success": true,
"date": "2026-06-11",
"base": "MIXED",
"rates": {
"EPEX_DE_DA": 86.10,
"TTF_GAS": 38.12,
"EUA_CO2": 67.52
},
"dates": {
"EPEX_DE_DA": "2026-06-11",
"TTF_GAS": "2026-06-11",
"EUA_CO2": "2026-06-11"
},
"currencies": {
"EPEX_DE_DA": "EUR",
"TTF_GAS": "EUR",
"EUA_CO2": "EUR"
}
}

Tips:

  • Use dates to enforce freshness. If one symbol lags, widen spreads or reduce size on that product.
  • Leverage currencies to drive on-the-fly conversion or to bucket quotes by margin currency.
  • Batch symbols to cut connection overhead and align timestamps across your analytics.

3) Intraday Curve for Execution Windows — GET /electricity/hourly

Intraday electricity market-making is curve-aware by nature: your inventory risk spikes at certain hours, imbalance fees vary, and liquidity is inconsistent. You can’t run flat spreads all day. With /electricity/hourly, fetch the complete intraday shape (hourly or 15-minute where available) for a specific symbol and date, then use time-sliced spread, skew, and inventory steering rules per interval.

Endpoint: /electricity/hourly

Key params:

  • symbol: A single electricity symbol that supports intraday curves.
  • date: YYYY-MM-DD for the trading day you want.
curl -G https://energy-api.com/api/v1/electricity/hourly \
--data-urlencode "symbol=OMIE_ES_DA" \
--data-urlencode "date=2026-06-12" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"symbol": "OMIE_ES_DA",
"date": "2026-06-12",
"granularity": "hourly",
"unit": "EUR/MWh",
"curve": [
{"interval": "2026-06-12T00:00:00+01:00", "price": 74.20},
{"interval": "2026-06-12T01:00:00+01:00", "price": 72.90},
{"interval": "2026-06-12T02:00:00+01:00", "price": 70.15},
{"interval": "2026-06-12T03:00:00+01:00", "price": 68.80},
{"interval": "2026-06-12T04:00:00+01:00", "price": 67.40},
{"interval": "2026-06-12T05:00:00+01:00", "price": 69.10},
{"interval": "2026-06-12T06:00:00+01:00", "price": 73.55},
{"interval": "2026-06-12T07:00:00+01:00", "price": 81.00},
{"interval": "2026-06-12T08:00:00+01:00", "price": 90.35},
{"interval": "2026-06-12T09:00:00+01:00", "price": 94.10},
{"interval": "2026-06-12T10:00:00+01:00", "price": 92.80},
{"interval": "2026-06-12T11:00:00+01:00", "price": 88.50},
{"interval": "2026-06-12T12:00:00+01:00", "price": 85.60},
{"interval": "2026-06-12T13:00:00+01:00", "price": 83.25},
{"interval": "2026-06-12T14:00:00+01:00", "price": 82.10},
{"interval": "2026-06-12T15:00:00+01:00", "price": 84.75},
{"interval": "2026-06-12T16:00:00+01:00", "price": 88.20},
{"interval": "2026-06-12T17:00:00+01:00", "price": 93.40},
{"interval": "2026-06-12T18:00:00+01:00", "price": 97.80},
{"interval": "2026-06-12T19:00:00+01:00", "price": 95.10},
{"interval": "2026-06-12T20:00:00+01:00", "price": 90.00},
{"interval": "2026-06-12T21:00:00+01:00", "price": 84.90},
{"interval": "2026-06-12T22:00:00+01:00", "price": 79.75},
{"interval": "2026-06-12T23:00:00+01:00", "price": 76.30}
]
}

Field guidance:

  • granularity: hourly or 15-min. Align your risk windows and P&L buckets to this.
  • interval: Timestamp with timezone; convert consistently in your stack to avoid off-by-one-hour during DST.
  • curve: Use as an input to interval-specific spread and skew. For example, widen spreads during evening peaks, cut size in tight reserve margin hours, or prioritize inventory unwind in low-liquidity windows.

4) Day-Ahead Auction Visibility — GET /forecast

For auction-based electricity symbols, you can fetch the next published day-ahead price via /forecast. This is not a predictive model—it returns the deterministic next cleared auction result from the official source once available. Market-makers use it to pre-adjust quotes, stage hedges, or alert ops to expected P&L shifts when the clearing price deviates from internal estimates.

Endpoint: /forecast

Key params:

  • symbol: Auction-based electricity symbol (e.g., OMIE_ES_DA, EPEX_DE_DA).
curl -G https://energy-api.com/api/v1/forecast \
--data-urlencode "symbol=EPEX_DE_DA" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"symbol": "EPEX_DE_DA",
"date": "2026-06-12",
"unit": "EUR/MWh",
"value": 88.45,
"source": "EPEX",
"note": "Next published day-ahead auction clearing value."
}

Usage pattern:

  • Trigger pre-market runs that update quoting curves and inventory setpoints for the following day.
  • Compare with prior day’s intraday curve and volatility to adjust risk buffers and overnight limits.

5) Short-Term Volatility and Ranges — GET /ohlc

Weekly or monthly OHLC candles are a compact way to detect regime changes, calibrate spread floors, and inform inventory tolerances. With electricity, you may rely on day-ahead aggregates; for gas, coal, and carbon, OHLC helps your cross-commodity hedging policy. Pair OHLC with fluctuation analysis to determine when to switch your quoting mode from passive to defensive.

Endpoint: /ohlc

Key params:

  • symbols: One or more symbols.
  • period: weekly, monthly, quarterly (default monthly).
  • start, end: Optional date filters for the candle window.
curl -G https://energy-api.com/api/v1/ohlc \
--data-urlencode "symbols=TTF_GAS,EUA_CO2" \
--data-urlencode "period=weekly" \
--data-urlencode "start=2026-05-01" \
--data-urlencode "end=2026-06-14" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"data": {
"TTF_GAS": [
{"period": "2026-W18", "open": 35.10, "high": 38.60, "low": 34.00, "close": 37.85, "data_points": 5},
{"period": "2026-W19", "open": 37.90, "high": 39.40, "low": 36.75, "close": 38.20, "data_points": 5}
],
"EUA_CO2": [
{"period": "2026-W18", "open": 65.25, "high": 68.10, "low": 64.10, "close": 66.95, "data_points": 5},
{"period": "2026-W19", "open": 67.00, "high": 69.20, "low": 65.90, "close": 67.45, "data_points": 5}
]
}
}

Interpretation:

  • open/high/low/close: Standard candle values for risk and volatility filters.
  • data_points: Number of contributing days in the period—sanity check for partial holiday weeks.
  • Use these candles to set dynamic minimum spreads (wider when weekly range expands) and to schedule inventory clip reductions during high-volatility weeks.

6) Direct Change Calculations — GET /fluctuation

Compute deltas and percentage moves over a target window without writing your own differencing logic. This endpoint is ideal for backtesting threshold-based spread rules and for alerting on sharp moves in hedging legs.

Endpoint: /fluctuation

Key params:

  • start, end: Inclusive dates to measure change.
  • symbols: Any mix of electricity, gas, oil, coal, carbon.
curl -G https://energy-api.com/api/v1/fluctuation \
--data-urlencode "start=2026-05-15" \
--data-urlencode "end=2026-06-11" \
--data-urlencode "symbols=OMIE_ES_DA,TTF_GAS,EUA_CO2" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"start": "2026-05-15",
"end": "2026-06-11",
"results": {
"OMIE_ES_DA": {
"start_value": 78.20,
"end_value": 92.35,
"change": 14.15,
"change_pct": 18.09
},
"TTF_GAS": {
"start_value": 36.40,
"end_value": 38.15,
"change": 1.75,
"change_pct": 4.81
},
"EUA_CO2": {
"start_value": 66.10,
"end_value": 67.40,
"change": 1.30,
"change_pct": 1.97
}
}
}

How to use:

  • Route quotes to a “defensive” mode when change_pct exceeds a threshold in any hedging leg.
  • Trigger automated inventory trims when the electricity move outpaces the gas/carbon basket.

7) Historical Series for Backtesting — GET /timeseries

Backtest spread logic, simulate inventory steering, and train regime classifiers with clean historical series. Because electricity and gas sit on the same schema, you can join series without ETL gymnastics and iterate faster on features.

Endpoint: /timeseries

Key params:

  • start, end: YYYY-MM-DD boundaries.
  • symbols: Any combination across categories.
  • base: Optional standardization by currency.
curl -G https://energy-api.com/api/v1/timeseries \
--data-urlencode "start=2026-01-01" \
--data-urlencode "end=2026-03-31" \
--data-urlencode "symbols=EPEX_DE_DA,TTF_GAS,EUA_CO2" \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"base": "MIXED",
"start_date": "2026-01-01",
"end_date": "2026-03-31",
"rates": {
"EPEX_DE_DA": {
"2026-01-02": 89.70,
"2026-01-03": 87.10
},
"TTF_GAS": {
"2026-01-02": 41.30,
"2026-01-03": 40.90
},
"EUA_CO2": {
"2026-01-02": 69.10,
"2026-01-03": 68.55
}
},
"frequencies": {
"EPEX_DE_DA": "daily",
"TTF_GAS": "daily",
"EUA_CO2": "daily"
},
"currencies": {
"EPEX_DE_DA": "EUR",
"TTF_GAS": "EUR",
"EUA_CO2": "EUR"
}
}

Best practices:

  • Use frequencies to resample when joining with intraday curves; avoid accidental daily-to-hourly leakage.
  • Frequent backtesting pattern: Bootstrap spread floors per symbol using rolling volatility windows from timeseries + ohlc data.

8) Ops Telemetry for Circuit Breakers — GET /status

Production market-makers need to know when a source is late or stale. The /status endpoint reports last fetch health by provider so you can widen spreads, pause quoting, or fall back to cached values safely—and log why.

Endpoint: /status

curl -G https://energy-api.com/api/v1/status \
--data-urlencode "api_key=YOUR_API_KEY"

Sample response:

{
"success": true,
"providers": [
{
"name": "OMIE",
"last_fetch": "2026-06-11T10:05:12Z",
"status": "ok",
"note": "All endpoints healthy."
},
{
"name": "ENTSO-E",
"last_fetch": "2026-06-11T10:02:30Z",
"status": "ok",
"note": "Normal latency."
},
{
"name": "EIA",
"last_fetch": "2026-06-10T21:00:00Z",
"status": "delayed",
"note": "Scheduled update pending."
}
]
}

Operational tips:

  • Integrate status into health dashboards and on-call alerts.
  • Automate quote throttling when a critical provider is delayed.

Designing Risk Limits, Inventory Management, and Execution Using Energy API

Let’s connect the dots from endpoints to trading logic. Market-making needs a closed loop of data, decisions, and safeguards. Below is a practical design that uses Energy API at each step.

Risk Limits

Define limits by product, hour, and volatility regime. Use /ohlc and /fluctuation to characterize current volatility; broaden or narrow spreads dynamically:

  • Volatility-aware spread floor: If weekly high − low exceeds an absolute or relative threshold, widen spreads by N ticks for the coming session.
  • Delta guardrails: If /fluctuation shows a move greater than X% in TTF_GAS or EUA_CO2 over Y days, reduce displayed size for correlated electricity symbols.
  • Source staleness: If /latest returns an older date for any leg, increase staleness penalty or move to “indicative” quotes only.
  • Provider health: If /status indicates delayed for a critical provider, enter safe mode (wider quotes, smaller clips, or pause).

These limit adjustments are deterministic and easily auditable. Store the daily /ohlc and /fluctuation snapshots you used, alongside decisions you took, to give risk managers full transparency.

Inventory Management

Electricity inventory risk is time-bucketed: long at 18:00 CET is not the same as long at 03:00 CET. You can stitch an intraday steering function with /electricity/hourly:

  • Build an hourly risk budget: Assign max long/short exposure per interval based on expected price variability (inferred from curve steepness, historical volatility, and peak hours).
  • Apply dynamic skew: If you’re near the long cap for 18:00–20:00, shade your bid down slightly and your ask up to encourage unwind.
  • Cross-commodity signals: If TTF_GAS rallies intraday, tighten risk on peak electricity hours and pre-hedge EUA sensitivity if your book has carbon exposure assumptions.

This loop requires fresh context from /latest (cross-commodity) and /electricity/hourly (shape). Because both share a common schema, your control code can stay uniform and testable.

Execution Strategies

Execution depends on the day-ahead baseline and intraday microstructure:

  • Day-ahead anchor: Use /forecast for the next published auction result. Compare to yesterday’s intraday pattern and current /latest for correlated commodities to set the day’s initial quoting curve.
  • Intraday curve steering: Recalculate spreads per hour using the /electricity/hourly curve, widen at expected peaks, narrow when liquidity is better.
  • Regime toggle: If /fluctuation shows outsized moves in gas/carbon over the past week, operate defensive (lower displayed size, quicker inventory trims).

You can implement this strategy on any region that Energy API covers without changing data access code, just swapping symbols. That means faster rollout across desks and consistent operational metrics.

Practical Code Examples

JavaScript: Fetch Cross-Commodity Context for Spread Calculation

async function fetchLatestContext() {
const params = new URLSearchParams({
symbols: "OMIE_ES_DA,TTF_GAS,EUA_CO2",
api_key: "YOUR_API_KEY"
});
const res = await fetch(`https://energy-api.com/api/v1/latest?${params.toString()}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const json = await res.json();
if (!json.success) throw new Error(json.error || "Unknown API error");
return json;
}

async function computeElectricitySpread() {
const { rates, currencies, dates } = await fetchLatestContext();

// Example: simple spark-spread-style anchor (illustrative only)
const power = rates["OMIE_ES_DA"]; // EUR/MWh
const gas = rates["TTF_GAS"]; // EUR/MWh equivalent for gas day-ahead context
const eua = rates["EUA_CO2"]; // EUR/MT allowances

// Simplified model: base spread from power volatility + gas/carbon anchors
const baseSpread = Math.max(1.5, 0.02 * power); // floor + proportional to level
const gasAdj = 0.005 * gas;
const carbonAdj = 0.003 * eua;

const quotedSpread = baseSpread + gasAdj + carbonAdj;

return {
bid: power - quotedSpread / 2,
ask: power + quotedSpread / 2,
meta: { currencies, dates }
};
}

computeElectricitySpread().then(console.log).catch(console.error);

Notes:

  • Check currencies and dates to add staleness penalties or FX adjustments.
  • Wrap fetch with retries and backoff in production; widen spreads on transient errors.

Python: Build Hourly Inventory Steering from Intraday Curve

import requests
from datetime import date

BASE = "https://energy-api.com/api/v1"
API_KEY = "YOUR_API_KEY"

def get_hourly_curve(symbol: str, day: str):
params = {"symbol": symbol, "date": day, "api_key": API_KEY}
r = requests.get(f"{BASE}/electricity/hourly", params=params, timeout=15)
r.raise_for_status()
data = r.json()
if not data.get("success", False):
raise RuntimeError(data.get("error", "Unknown API error"))
return data

def build_inventory_targets(curve):
# Assign higher risk at off-peak, lower at peak; example heuristics
targets = []
for pt in curve["curve"]:
ts = pt["interval"]
price = pt["price"]
hour = int(ts[11:13]) # crude parse; prefer robust ISO parser in production

# Example: reduce risk at evening peaks
if 18 <= hour <= 20:
max_mwh = 5
elif 8 <= hour <= 12:
max_mwh = 8
else:
max_mwh = 10

# Adjust by price level as a proxy for system stress
if price > 95:
max_mwh = max(3, int(max_mwh * 0.6))

targets.append({"interval": ts, "max_long_mwh": max_mwh, "max_short_mwh": max_mwh})
return targets

if __name__ == "__main__":
day = date.today().isoformat()
data = get_hourly_curve("OMIE_ES_DA", day)
targets = build_inventory_targets(data)
for t in targets[:6]:
print(t)

This snippet illustrates per-interval exposure caps derived from the price curve. In production, tie these caps to volatility states from /ohlc and recent moves from /fluctuation.

Real-World Use Cases

1) Intraday Power Market-Maker with Cross-Commodity Anchors

Build a quoting engine for day-ahead electricity with spreads that react to gas and carbon. Use /latest to fetch OMIE_ES_DA (or EPEX_DE_DA), TTF_GAS, and EUA_CO2, then derive a spread curve informed by current levels and historical volatility from /ohlc. Intraday adjustments pull in /electricity/hourly to time-slice spreads by hour and rebalance inventory.

2) Risk Dashboard with Staleness and Volatility Alarms

Create a real-time dashboard for risk managers that displays exposure by hour, staleness by symbol, and weekly ranges. The UI polls /status for provider health, /ohlc for candle ranges, and /fluctuation for near-term deltas. When thresholds are breached, the dashboard signals the quoting engine to enter safe mode automatically.

3) Hedging and P&L Attribution Across Commodities

For a power desk that hedges with TTF gas and EUA allowances, use /timeseries to load daily history for electricity, gas, and carbon. Run a simple factor model to attribute P&L moves and track hedge effectiveness through time. Supplement the model with /latest to ensure live P&L reflects current cross-commodity conditions.

FAQ

How often do electricity and gas prices update?

Energy API normalizes official releases from sources such as OMIE and ENTSO-E for electricity and EEX-linked references for gas. Update frequency depends on the underlying market schedule (e.g., day-ahead auctions vs. intraday curves). Use /status to monitor provider health and /latest dates to detect symbol-level staleness.

Can I get hourly or 15-minute intraday electricity curves?

Yes, where the official sources publish them. Use /electricity/hourly with a supported symbol and date to retrieve the full curve. The response includes granularity and timestamped intervals so you can align execution windows, DST, and time bucket P&L precisely.

Does the API support multiple commodities in one call?

Yes. Endpoints like /latest and /timeseries accept multiple symbols across categories (electricity, gas, oil, coal, carbon, and carbon intensity). This lets you compute spreads and hedges in a single response without juggling multiple schemas or clients.

How far back can I get historical data, and how should I use it?

Historical depth varies by symbol and source. Use /timeseries to retrieve consistent historical series for backtesting spread rules, regime detection, and inventory policies. Pair with /ohlc and /fluctuation to summarize ranges and momentum over weekly or monthly windows.

What happens if a provider is delayed or data is missing?

Energy API provides a /status endpoint to surface provider health and last fetch times. In your application, implement safe-mode behaviors—widen spreads, reduce size, or pause quoting—and log decisions with the status context. This ensures controlled behavior under upstream delays.

Error Handling, Validation, and Troubleshooting

A resilient market-making stack is defensive by default. Energy API returns conventional HTTP codes and a consistent JSON error shape to keep control flow simple.

  • 401: Missing or invalid credentials. Ensure the api_key parameter is sent and correct.
  • 404: No data for requested symbols or date. Common when querying dates prior to publication or symbols without coverage.
  • 422: Validation error. Check parameter names, types, and accepted values (e.g., symbol not supported for an endpoint).
  • 429: Rate limiting. Implement exponential backoff and temporary safe-mode quotes if a critical read fails.

Error response shape:

{
"success": false,
"error": "Human-readable message."
}

Troubleshooting tips:

  • Validate symbol names with /symbols before wiring into jobs.
  • Use /status to distinguish between your network issues and upstream provider delays.
  • Guard against empty or partial arrays (e.g., fewer data_points in an OHLC period around holidays).
  • Align timezones end-to-end for /electricity/hourly; store intervals as ISO strings and parse with robust libraries.

Putting It All Together: Reference Flow for an Intraday Power Market-Maker

Below is a suggested production flow that teams use to combine Energy API endpoints into a robust loop:

  1. Pre-open baseline:
    • Call /forecast for your target electricity symbol to retrieve the next published day-ahead clearing price.
    • Load /timeseries for the last 60–90 days across electricity, TTF_GAS, and EUA_CO2; compute rolling volatilities and correlations.
    • Pull weekly /ohlc to set spread floors and inventory buffers.
  2. Open and intraday updates:
    • Fetch /latest for electricity, gas, and carbon symbols on a cadence that matches your latency budget (e.g., every 30–60 seconds or event-driven).
    • Refresh /electricity/hourly for the current date after major events (e.g., re-clears or official updates) to adjust per-interval skews and limits.
    • Watch /fluctuation across a rolling window to switch between passive and defensive quoting modes.
  3. Operational guardrails:
    • Monitor /status to detect provider delays and toggle safe-mode behaviors.
    • On errors (401/404/422/429), follow a consistent policy: retry, widen spreads, reduce size, or pause quoting—always with structured logs.
  4. End-of-day:
    • Snapshot /latest, /ohlc, and /fluctuation to archive the day’s risk state.
    • Re-run /timeseries deltas for backtests and refine parameter fits for tomorrow.

Additional Category Endpoints You’ll Likely Use

Gas Convenience Endpoint — GET /gas/latest

If you prefer a targeted call for gas references, /gas/latest is a convenience wrapper returning TTF_GAS and HENRY_HUB in one response. Good for nightly hedging checks or sanity monitors.

curl -G https://energy-api.com/api/v1/gas/latest \
--data-urlencode "api_key=YOUR_API_KEY"

Expected output includes keys for TTF_GAS and HENRY_HUB with normalized currencies and dates, mirroring /latest semantics for easy integration.

Emissions Snapshot — GET /emissions/latest

EUA_CO2 is a key input to power pricing and hedging. Use this endpoint to fetch the current allowance price quickly for risk reports or alert triggers.

curl -G https://energy-api.com/api/v1/emissions/latest \
--data-urlencode "api_key=YOUR_API_KEY"

Like other category endpoints, it provides a normalized value and currency code, keeping your hedging math consistent.

Country-Level Carbon Intensity — GET /carbon-intensity

For desks and ESG teams building carbon-aware execution logic or analytics, country grid intensity adds valuable context (e.g., whether a region’s marginal emissions are high during a given period). Use it to drive carbon-aware analytics in dashboards or client reporting.

curl -G https://energy-api.com/api/v1/carbon-intensity \
--data-urlencode "country=DE" \
--data-urlencode "api_key=YOUR_API_KEY"

Combine with electricity curves to analyze the emissions profile of hours where you deploy most capital or take peak exposure.

Data Modeling Considerations and Best Practices

As you operationalize an intraday market-making system on Energy API, keep these modeling notes in mind:

  • Time alignment:
    • Normalize all timestamps to a single canonical timezone internally. Store the raw ISO strings from /electricity/hourly alongside converted epoch seconds for performance.
    • When joining daily series to hourly curves, prevent leakage by using previous-close logic for daily signals.
  • Currency consistency:
    • Use the currencies map in /latest and /timeseries responses to ensure conversions before calculating mixed-commodity spreads.
    • Keep a centralized FX adapter if your P&L and VaR are booked in a base currency.
  • Regime switching:
    • Drive discrete modes (passive, normal, defensive) using thresholds on /ohlc ranges and /fluctuation change_pct.
    • Log the triggering evidence (API response snapshots) for post-mortem clarity.
  • Operational resilience:
    • Incorporate /status into health checks; use circuit breakers to gracefully degrade quoting.
    • On partial responses or symbol-specific staleness (per-symbol dates), route inventory to stronger symbols until freshness normalizes.

Sample End-to-End JSON: Multi-Symbol Latest, Curve, OHLC, and Status Snapshots

The following combined snapshots illustrate the documents you would store per cycle to make decisions auditable and reproducible:

{
"timestamp": "2026-06-11T10:10:00Z",
"latest": {
"success": true,
"date": "2026-06-11",
"base": "MIXED",
"rates": {
"OMIE_ES_DA": 92.35,
"TTF_GAS": 38.15,
"EUA_CO2": 67.40
},
"dates": {
"OMIE_ES_DA": "2026-06-11",
"TTF_GAS": "2026-06-11",
"EUA_CO2": "2026-06-11"
},
"currencies": {
"OMIE_ES_DA": "EUR",
"TTF_GAS": "EUR",
"EUA_CO2": "EUR"
}
},
"curve": {
"success": true,
"symbol": "OMIE_ES_DA",
"date": "2026-06-11",
"granularity": "hourly",
"unit": "EUR/MWh",
"curve": [
{"interval": "2026-06-11T08:00:00+01:00", "price": 90.35},
{"interval": "2026-06-11T09:00:00+01:00", "price": 94.10}
]
},
"ohlc": {
"success": true,
"data": {
"TTF_GAS": [
{"period": "2026-W18", "open": 35.10, "high": 38.60, "low": 34.00, "close": 37.85, "data_points": 5}
],
"EUA_CO2": [
{"period": "2026-W18", "open": 65.25, "high": 68.10, "low": 64.10, "close": 66.95, "data_points": 5}
]
}
},
"status": {
"success": true,
"providers": [
{"name": "OMIE", "last_fetch": "2026-06-11T10:05:12Z", "status": "ok", "note": "All endpoints healthy."},
{"name": "ENTSO-E", "last_fetch": "2026-06-11T10:02:30Z", "status": "ok", "note": "Normal latency."}
]
}
}

With this structure, your decision engine can attribute every action (tighten spreads, reduce clips, pause quoting) to concrete evidence from normalized data, easing audits and post-trade analysis.

Advanced Tips for Execution Engineers

  • Event-driven recalculation:
    • Only recompute quotes on changes to /latest values or when /status changes from ok to delayed for a critical provider.
    • Debounce frequent micro-changes to maintain stable quotes under noisy conditions.
  • Composite hedging:
    • Construct a composite hedge index from TTF_GAS and EUA_CO2 using /latest, and run sensitivity tests in backtests from /timeseries.
    • Trigger automatic hedge rebalancing if composite drift exceeds a threshold for N minutes.
  • Cache strategy:
    • Respect data freshness: Add a staleness field from /latest dates and curve timestamps to your cache keys to avoid serving out-of-date quotes silently.
    • Cache hit savings allow you to reserve network headroom for curve calls and risk analytics.

Conclusion + CTA

Intraday market-making for power is complex, but it becomes tractable when the data is reliable, normalized, and available in one place. With Energy API, desks can launch curve-aware quoting, cross-commodity hedging, and rigorous risk controls without building and maintaining a zoo of scrapers and fragile ETL jobs. You get intraday electricity curves, day-ahead auction values, and cross-commodity context (gas, carbon, oil, coal) through a single JSON schema designed for production systems.

If your priority is execution quality, controlled risk, and rapid iteration, simplify your market data foundation first. Integrate Energy API’s core endpoints—/symbols, /latest, /electricity/hourly, /forecast, /timeseries, /ohlc, /fluctuation, and /status—then wire them into your inventory steering and strategy logic. You’ll ship faster, monitor better, and trade with confidence.

Ready to build? Explore live endpoints, wire up your first strategy, and operationalize risk controls today. Try Energy API for free.

Ready to get started?

Get your API key and start querying energy commodity prices in minutes.

Get API Key

Related posts