MDS
Market Data Service — real-time status and data freshness
Data Source Freshness
| Source | Status | Last Updated | Age | Expected Lag | Freshness |
|---|---|---|---|---|---|
| Loading... | |||||
Markets & Areas
Loading...
API Access
Credentials: HTTP Basic users in the marketdata.marbl.energy htpasswd (per-machine users, e.g. mds-status, ai-worker-01). On the workstation they live in the status repo's .env.local as MDS_USER / MDS_PASS — the smoke-test scripts load it automatically. The same credential works for REST and gRPC.
REST
Base URL https://marketdata.marbl.energy — HTTP Basic auth at the edge. The OpenAPI 3 spec is served by the API itself:
source .env.local # provides MDS_USER / MDS_PASS curl -u "$MDS_USER:$MDS_PASS" https://marketdata.marbl.energy/api/v1/health curl -u "$MDS_USER:$MDS_PASS" https://marketdata.marbl.energy/api/v1/openapi.yaml -o openapi.yaml curl -u "$MDS_USER:$MDS_PASS" "https://marketdata.marbl.energy/api/v1/prices/day-ahead?zone=DE-LU&limit=24"
Import the downloaded openapi.yaml into Swagger Editor / Insomnia / Postman for a browsable API page.
gRPC
marketdata.v1.EnergyMarketService — TLS on marketdata.marbl.energy:443, same basic-auth credentials sent as gRPC metadata. Server reflection is enabled, so grpcurl needs no proto files:
source .env.local # provides MDS_USER / MDS_PASS
AUTH="Authorization: Basic $(printf '%s:%s' "$MDS_USER" "$MDS_PASS" | base64 -w0)"
grpcurl -H "$AUTH" marketdata.marbl.energy:443 list
grpcurl -H "$AUTH" marketdata.marbl.energy:443 describe marketdata.v1.EnergyMarketService
grpcurl -H "$AUTH" -d '{}' marketdata.marbl.energy:443 marketdata.v1.EnergyMarketService/HealthCheck
grpcurl -H "$AUTH" -d '{"zone":"DE-LU"}' marketdata.marbl.energy:443 marketdata.v1.EnergyMarketService/GetDayAheadLatest
grpcurl -H "$AUTH" -d '{"zone":"AT","limit":3}' marketdata.marbl.energy:443 marketdata.v1.EnergyMarketService/GetDayAheadPrices
Live Market Feed (gRPC streaming)
orderbook.v1.MarketFeedService/SubscribeFeed — long-lived server-streaming RPC delivering a snapshot of the current orderbook followed by typed deltas, trades, contract notifications, and heartbeats in real time. Same auth, same endpoint:
source .env.local
AUTH="Authorization: Basic $(printf '%s:%s' "$MDS_USER" "$MDS_PASS" | base64 -w0)"
# Subscribe to AT intraday feed (streams until cancelled):
grpcurl -H "$AUTH" -d '{"delivery_area":"AT"}' \
marketdata.marbl.energy:443 orderbook.v1.MarketFeedService/SubscribeFeed
# Quick check (first 30s, then exit):
grpcurl -H "$AUTH" -d '{"delivery_area":"AT"}' -max-time 30 \
marketdata.marbl.energy:443 orderbook.v1.MarketFeedService/SubscribeFeed
Message types: ORDERBOOK_SNAPSHOT, SNAPSHOT_COMPLETE, ORDER_DELTA, TRADE, CONTRACT, HEARTBEAT (every ~15s, includes upstream_connected flag).
Smoke-test scripts live in the status repo: scripts/check-rest.sh and scripts/check-grpc.sh.