Historical Energy Symbols Catalog Prices
You need to fetch and analyze historical prices for the Energy Symbols Catalog so you can chart, backfill, or run analytics on a consistent series without guessing symbols or field names. By the end of this guide you will be able to list available symbols, confirm BRENT_CRUDE, and run reproducible date-bounded timeseries queries using GET /api/v1/timeseries with an api_key, plus parse the live catalog payloads that confirm symbol currency and current value metadata.
What you will implement and the scope of the data
This guide focuses on building a historical pipeline for the Energy Symbols Catalog using the BRENT_CRUDE symbol code. You will:
- Authenticate using the api_key query parameter (placeholder is YOUR_API_KEY only).
- Confirm BRENT_CRUDE is live via the catalog listing endpoint before requesting historical data.
- Request a time-bounded series using GET /api/v1/timeseries with start, end, and symbols parameters.
- Read base currency and per-symbol currency metadata from the live listing for correct normalization.
Constraints to observe:
- Unit is mixed across the catalog; check per-symbol currency via the listing.
- Do not pass base=USD when you also need TTF_GAS or EUA_CO2; keep per-symbol currencies separate.
- BRENT_CRUDE belongs to the Energy Symbols Catalog—do not substitute unrelated symbols.
Authenticate and confirm symbols from the live list
Before querying historic data, confirm symbol availability and currency metadata via the live catalog. Use the official listing endpoint with your api_key in the query string. This call should be cached by you briefly (e.g., a few minutes) to avoid redundant lookups while keeping symbol status current.
Official cURL (copy and run)
curl -G "https://energy-api.com/api/v1/symbols" --data-urlencode "api_key=YOUR_API_KEY"
Official JSON response example (copy-only)
{
"success": true,
"date": "2026-10-26",
"base": "EUR",
"rates": {
"OMIE_ES_DA": 196.8615
},
"dates": {
"OMIE_ES_DA": "2026-10-26"
},
"currencies": {
"OMIE_ES_DA": "EUR"
},
"base_filter_note": null
}
What to use from this payload:
- success: quick health check for the catalog response.
- date: server-reported catalog date for the returned snapshot.
- base: the catalog’s default base currency (EUR in the example). Do not override via base when working with TTF_GAS or EUA_CO2.
- rates[SYMBOL]: the current price point for each symbol in the live list.
- dates[SYMBOL]: the valuation date for that symbol’s price.
- currencies[SYMBOL]: per-symbol currency you should respect when analyzing or converting.
Run this listing to verify BRENT_CRUDE exists before timeseries requests. If a symbol is absent from the live list, queue remediation instead of making repeated historical calls.
Plan your timeseries query for the Energy Symbols Catalog
The timeseries endpoint retrieves historical observations. Use:
- Endpoint: GET /api/v1/timeseries
- Query parameters: start, end, symbols, and api_key
- Symbols: BRENT_CRUDE (from the Energy Symbols Catalog)
Practical guidance:
- Dates: supply ISO-8601 dates (YYYY-MM-DD). Align with market calendars; weekends or holidays may not produce observations for some symbols.
- Timezone: treat dates as calendar days; do not mix local midnight boundaries across regions in your own systems. Keep your ingestion consistent in UTC when storing timestamps.
- Units and currency: the catalog is mixed. Use currencies[SYMBOL] (from the live listing) to interpret each observation correctly.
- Caching: cache successful responses for your retry logic. For high-frequency backfills, partition into stable windows (e.g., month chunks) and persist to avoid re-fetching.
cURL for a historical window (BRENT_CRUDE)
This request pulls a January window for BRENT_CRUDE. Replace YOUR_API_KEY with your key. Do not add a base parameter when working across mixed-currency symbols.
curl -G "https://energy-api.com/api/v1/timeseries" \
--data-urlencode "start=2025-01-01" \
--data-urlencode "end=2025-01-31" \
--data-urlencode "symbols=BRENT_CRUDE" \
--data-urlencode "api_key=YOUR_API_KEY"
Notes:
- Symbols is a comma-separated list if you expand beyond BRENT_CRUDE, but keep currencies separate in your storage layer.
- For repeatability in data science pipelines, store your request parameters (start, end, symbols) with the retrieved series.
Parse the catalog response in code
The code below calls the official listing endpoint and extracts fields you will rely on to validate symbols and currencies before any historical pulls. Keep this utility in your ingestion job so failed symbol validations are caught early.
Python example: list symbols, confirm currency, and read price/date
import os
import sys
import json
from urllib.parse import urlencode
from urllib.request import urlopen, Request
API_KEY = os.getenv("ENERGY_API_KEY", "YOUR_API_KEY")
def get_symbols():
qs = urlencode({"api_key": API_KEY})
url = f"https://energy-api.com/api/v1/symbols?{qs}"
req = Request(url)
with urlopen(req, timeout=30) as resp:
body = resp.read().decode("utf-8")
payload = json.loads(body)
if not payload.get("success"):
raise RuntimeError("Symbols listing not successful")
return payload
def main():
catalog = get_symbols()
# Required fields from the official sample schema
base = catalog.get("base")
rates = catalog.get("rates", {})
dates = catalog.get("dates", {})
currencies = catalog.get("currencies", {})
# Example: assert that BRENT_CRUDE exists before timeseries pulls
target_symbol = "BRENT_CRUDE"
if target_symbol not in rates:
print(f"{target_symbol} not present in live catalog; aborting historical request", file=sys.stderr)
sys.exit(1)
# When present, capture the live point for monitoring
price = rates.get(target_symbol)
price_date = dates.get(target_symbol)
currency = currencies.get(target_symbol, base)
print(json.dumps({
"base": base,
"symbol": target_symbol,
"live_price": price,
"live_date": price_date,
"currency": currency
}, indent=2))
if __name__ == "__main__":
main()
Integrate this with your timeseries runner: only call /api/v1/timeseries when BRENT_CRUDE appears in rates, and record currencies[BRENT_CRUDE] to interpret values downstream.
Three canonical JSON snapshots you will use repeatedly
The live listing payload is the anchor for symbol validation, currency consistency, and monitoring. Below are three canonical contexts in which you should persist the unmodified JSON (verbatim) to ensure auditability of your pipelines. The content is the official sample; your production jobs will store what the API returns at runtime.
1) Live symbols check (before backfill)
{
"success": true,
"date": "2026-10-26",
"base": "EUR",
"rates": {
"OMIE_ES_DA": 196.8615
},
"dates": {
"OMIE_ES_DA": "2026-10-26"
},
"currencies": {
"OMIE_ES_DA": "EUR"
},
"base_filter_note": null
}
2) Cache-safe snapshot (stored with your job run metadata)
{
"success": true,
"date": "2026-10-26",
"base": "EUR",
"rates": {
"OMIE_ES_DA": 196.8615
},
"dates": {
"OMIE_ES_DA": "2026-10-26"
},
"currencies": {
"OMIE_ES_DA": "EUR"
},
"base_filter_note": null
}
3) Monitoring heartbeat record (for alerting pipelines)
{
"success": true,
"date": "2026-10-26",
"base": "EUR",
"rates": {
"OMIE_ES_DA": 196.8615
},
"dates": {
"OMIE_ES_DA": "2026-10-26"
},
"currencies": {
"OMIE_ES_DA": "EUR"
},
"base_filter_note": null
}
In your own runs, BRENT_CRUDE should appear among rates when querying production data. Store exactly what you receive without reformatting so debugging and reconciliation are straightforward.
Building a robust timeseries job: sequencing and safeguards
A resilient historical job for the Energy Symbols Catalog should follow a strict sequence to prevent wasteful calls and data ambiguity:
- List symbols via /api/v1/symbols, verify success, confirm BRENT_CRUDE exists, and record currencies[BRENT_CRUDE].
- Partition your requested historical window into fixed-size chunks (for example, monthly) for deterministic retries.
- Fetch timeseries for each chunk via GET /api/v1/timeseries with start, end, symbols=BRENT_CRUDE, api_key.
- Persist raw responses and normalized rows. Do not coerce currencies; retain currencies[BRENT_CRUDE] for correct display and conversions.
- Backfill gaps on a schedule; re-run only the failed partitions to minimize API calls.
Keep your symbol set well-defined. If you add more catalog members later, query each symbol separately or explicitly group compatible currencies; do not pass base=USD across mixed-currency symbols like TTF_GAS or EUA_CO2.
Operational details that will save you time
- Authentication: pass api_key as a query parameter. The placeholder is YOUR_API_KEY; do not embed secrets in code repositories.
- Trial and pricing: Starter $19.99/mo with a 7-day trial / 50 calls. Monitor your job to avoid blowing through calls during retries.
- Timestamps and timezones: the listing response carries a date field, and per-symbol dates in dates[SYMBOL]. Store these verbatim. Treat them as valuation dates and normalize to UTC when adding ingestion timestamps.
- Non-trading days: certain symbols may not publish every calendar day. Design your warehouse to accept sparse series without filling with synthetic values.
- Caching: short-term cache the /symbols response (few minutes) to reduce overhead; cache timeseries partitions after a successful fetch to make retries idempotent.
- Validation: check success before reading data. If a symbol is temporarily absent, log and skip rather than hammering the endpoint.
- No MCP host required: you can run cURL from any CI or shell.
End-to-end example flow
Below is a concise flow you can embed in a weekly backfill job for BRENT_CRUDE:
- Call GET /api/v1/symbols with your api_key.
- Assert BRENT_CRUDE in rates. Capture currencies[BRENT_CRUDE].
- Issue partitioned calls to GET /api/v1/timeseries with start and end windows for BRENT_CRUDE.
- Persist raw payloads and normalized rows keyed by date and symbol, including the per-symbol currency.
- Emit metrics: missing days, retry count, and last successful date.
FAQ
Q: How do I verify that BRENT_CRUDE is valid before requesting history?
A: Call GET /api/v1/symbols with api_key and check that rates includes BRENT_CRUDE. Also record currencies[BRENT_CRUDE] to keep currency handling correct in your warehouse.
Q: Can I pass base=USD to normalize everything before I store it?
A: Do not pass base=USD when you also need TTF_GAS or EUA_CO2. The catalog is mixed; preserve per-symbol currencies and convert later in your own system if needed.
Q: What is the correct authentication method?
A: Use the api_key query parameter. The only placeholder you should put in docs or samples is YOUR_API_KEY.
Q: How should I handle non-trading or missing days?
A: Expect sparse series for some symbols. Do not fill with synthetic prices; store actual observations and let your analytics layer handle gaps explicitly.
Q: Is there a host or MCP requirement?
A: No MCP host is required. You can run the cURL commands or your client code from any environment that can reach the Energy API.
Set up your access and run your first catalog check and BRENT_CRUDE backfill today. Create your key and follow the steps in the docs: Register and review endpoint details in the Documentation.
Ready to get started?
Get your API key and start querying energy commodity prices in minutes.
Get API Key