Energy Events Dashboard

Filterable timeline of macro and asset-specific energy events

Permutable API Explorer

1

Choose a Ticker

Select the energy commodity to use in the examples below.

2

The Endpoint

The Historical Events Feed returns individual events that impact energy commodities, including direction and impact scores.

Base URL https://copilot-api.permutable.ai/v1/events/feed/historical/ticker/BZ_COM
ParameterValueDescription
limit1000Records per page (max 1000)
event_typeCombinedAsset + Macro events combined
start_date2026-02-06How far back (max 90 days)
3

Try It — cURL

Copy and paste this into a terminal. Replace YOUR_API_KEY with your Permutable API key.

Shell curl -H "x-api-key: YOUR_API_KEY" \ "https://copilot-api.permutable.ai/v1/events/feed/historical/ticker/BZ_COM?limit=100&event_type=Combined&start_date=2026-02-06"
4

Try It — Python

A minimal script to fetch and print event data.

Python import requests url = "https://copilot-api.permutable.ai/v1/events/feed/historical/ticker/BZ_COM" params = { "limit": 100, "event_type": "Combined", "start_date": "2026-02-06", } headers = {"x-api-key": "YOUR_API_KEY"} resp = requests.get(url, params=params, headers=headers) data = resp.json() for evt in data["data"][:5]: print(evt["event_date"][:10], evt["direction"], evt["impact"], evt["event_name"][:80])
5

Response Structure

Each record is a single event with a direction (Bullish/Bearish) and impact score.

JSON response (truncated) { "data": [ { "event_date": "2026-03-07T00:00:00+00:00", "event_name": "US Imposes New Sanctions...", "summary": "The US has imposed...", "event_type": "Asset", "direction": "Bullish", "impact": "0.9", "topic_name": "Supply-Geopolitical Tensions" }, // ... more events ], "has_more": true, "next_token": "eyJhcGl..." // use for pagination }
6

Computing the Sentiment Index

The sentiment index is constructed from event direction and impact. Three measures are available via the Measure toggle:

Python # Base per-event score # direction_sign: Bullish = +1, Bearish = -1 # impact: 0–1 (text mapped: High=0.9, Medium=0.5, Low=0.2) score = direction_sign * impact # Measure 1 — "Avg Sentiment" (default) # Average score per day, normalised by event count daily = sum(score) / event_count # Measure 2 — "Event-Weighted" # Raw sum: more narratives drive a bigger signal daily = sum(score) # Measure 3 — "Source-Weighted" # Each event multiplied by its headline/source count daily = sum(score * source_count) # Mode: Daily shows the daily value, # Cumulative shows the running sum over time
7

Available Tickers

Ticker IDCommodity
BZ_COMBrent Crude Oil
CL_COMWTI Crude Oil
GOIL_COMGasoil (ICE)
HO_COMHeating Oil (ULSD)
LNG_COMLNG
NG_COMHenry Hub Natural Gas
RB_COMRBOB Gasoline
TFM_COMDutch TTF Natural Gas
Event Headlines API
8

Headlines Endpoint

The Event Headlines Feed returns the individual news articles (sources) behind each event. This powers the Sources column and the Source-Weighted sentiment measure.

Base URL https://copilot-api.permutable.ai/v1/event_headlines/feed/historical/ticker/BZ_COM
ParameterValueDescription
limit1000Records per page (max 1000)
event_typeCombinedAsset + Macro headlines combined
start_date2026-02-06How far back (max 90 days)
next_tokenstringPagination token from previous response
9

Headlines — cURL

Shell curl -H "x-api-key: YOUR_API_KEY" \ "https://copilot-api.permutable.ai/v1/event_headlines/feed/historical/ticker/BZ_COM?limit=100&event_type=Combined&start_date=2026-02-06"
10

Headlines — Python

Fetch headlines and group by event. Uses pagination to pull all pages.

Python import requests from collections import defaultdict url = "https://copilot-api.permutable.ai/v1/event_headlines/feed/historical/ticker/BZ_COM" headers = {"x-api-key": "YOUR_API_KEY"} params = { "limit": 1000, "event_type": "Combined", "start_date": "2026-02-06", } all_headlines = [] while True: resp = requests.get(url, params=params, headers=headers) data = resp.json() all_headlines.extend(data["data"]) if not data.get("has_more"): break params["next_token"] = data["next_token"] # Group by event_id by_event = defaultdict(list) for h in all_headlines: by_event[h["event_id"]].append(h) print(f"Total: {len(all_headlines)} headlines across {len(by_event)} events") for eid, items in list(by_event.items())[:3]: print(f"\nEvent {eid}: {len(items)} sources") for h in items[:2]: print(f" {h['source_name']}{h['headline'][:80]}")
11

Headlines Response Structure

Each record is a single headline linked to an event via event_id. An event may have many headlines from different sources.

JSON response (truncated) { "data": [ { "event_id": "evt_abc123", "event_type": "Asset", "headline": "Oil Prices Surge on Supply Fears...", "source_name": "Reuters", "publication_time": "2026-03-07T14:30:00+00:00", "link": "https://...", "language": "en" }, // ... more headlines ], "has_more": true, "next_token": "eyJhcGl..." }

Headlines

Settings
00.51.0
01020
Labels
Visualization
Brent Crude
Event Feed
Rows per page: