Skip to content

Prediction Markets Events

Use this endpoint to retrieve the latest snapshot of every analyzed prediction market event tracked by Octagon. Each item represents the most recent capture of an event, including model/market probabilities, confidence scores, analysis summaries, and per-market outcome breakdowns.

Pair this endpoint with Prediction Markets Events History to first discover events, then drill into the time-series for any event of interest.

Like the Chat Completions and Responses endpoints, this is a direct REST endpoint and is called relative to the Octagon API base URL:

text
https://api.octagonai.co/v1

Endpoint

GET /prediction-markets/events

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoNumber of records to return. Default 10; minimum 1; maximum 200.
cursorstringNoCursor for pagination. Use the cursor returned from a previous response to continue.
has_historybooleanNoWhen true, only return events that have multiple historical snapshots available for time-series use.

Response Fields

Each event in the data array includes:

FieldTypeDescription
history_idintegerUnique identifier for this snapshot.
run_idstring (UUID)The export run that produced this snapshot.
captured_atstring (ISO 8601)When this snapshot was captured.
event_tickerstringTicker identifier for the event.
namestringHuman-readable event name.
slugstringURL-friendly slug.
image_urlstringEvent image URL.
series_categorystringCategory (e.g., "Politics", "Crypto", "Economics").
available_on_brokersbooleanWhether the event is available on supported brokers.
mutually_exclusivebooleanWhether the event's outcomes are mutually exclusive.
analysis_last_updatedstring (ISO 8601)When the analysis was last refreshed.
confidence_scorefloatOctagon's confidence in the model output (0–10 scale).
model_probabilityfloatOctagon model probability for the event's primary/most-liquid market (0–100 percentage scale). See outcome_probabilities for the full per-market breakdown.
market_probabilityfloatMarket-implied probability for the event's primary/most-liquid market (0–100 percentage scale). See outcome_probabilities for the full per-market breakdown.
edge_ppfloatModel edge in percentage points (model_probability - market_probability).
expected_returnfloatExpected return if the model is correct.
r_scorefloatRisk-adjusted score.
total_volumefloatTotal trading volume.
total_open_interestfloatTotal open interest.
close_timestringWhen the event closes.
key_takeawaystringOne-line summary of the model's view.
current_state_summary_richtextstringRich-text summary of the current state.
short_answer_richtextstringRich-text short answer.
executive_summary_richtextstringRich-text executive summary.
outcome_probabilitiesarrayPer-market outcome breakdown (see below). null if unavailable.
has_historybooleanWhether this event has multiple historical snapshots for time-series analysis.

outcome_probabilities items

Each item in the outcome_probabilities array represents one market/outcome within the event:

FieldTypeDescription
market_tickerstringTicker for this specific market/outcome.
outcome_namestringHuman-readable name for the outcome.
model_probabilityfloatOctagon model probability for this outcome (0–100 percentage scale).
market_probabilityfloatMarket-implied probability for this outcome (0–100 percentage scale).

Use Cases

  • Discover all events currently tracked and analyzed by Octagon.
  • Build a catalog or dashboard of active prediction market events.
  • Filter to events with historical data (has_history=true), then drill into each event's time-series via GET /prediction-markets/events/<event_ticker>/history.
  • Monitor the latest model probabilities, confidence scores, and analysis across all events.
  • Use outcome_probabilities for multi-outcome backtesting — compare per-market model_probability against market_probability and settlement outcomes.

Examples

List all events

Python
import requests

url = "https://api.octagonai.co/v1/prediction-markets/events"
headers = {"Authorization": "Bearer your-octagon-api-key"}
params = {"limit": 10}

response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
print(response.json())
JavaScript
const params = new URLSearchParams({
  limit: "10",
});

const response = await fetch(
  `https://api.octagonai.co/v1/prediction-markets/events?${params}`,
  {
    headers: {
      Authorization: "Bearer your-octagon-api-key",
    },
  }
);

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
sh
curl -G "https://api.octagonai.co/v1/prediction-markets/events" \
  -H "Authorization: Bearer <your-octagon-api-key>" \
  --data-urlencode "limit=10"

Example response (truncated for brevity):

json
{
  "data": [
    {
      "history_id": 353,
      "run_id": "11538efb-6a39-407c-bf13-e8d6cb070fae",
      "captured_at": "2026-04-04T15:43:44.468242Z",
      "event_ticker": "FEDHIKE",
      "name": "Next Fed rate hike?",
      "slug": "next-fed-rate-hike",
      "image_url": "https://kalshi-public-docs.s3.amazonaws.com/series-images-webp/KXFEDHIKE.webp",
      "series_category": "Economics",
      "available_on_brokers": true,
      "mutually_exclusive": false,
      "analysis_last_updated": "2026-04-04T15:40:35.327497Z",
      "confidence_score": 8.0,
      "model_probability": 17.5,
      "market_probability": 35.0,
      "edge_pp": -17.5,
      "expected_return": -0.4998,
      "r_score": -2.5,
      "total_volume": 1026944.0,
      "total_open_interest": 349221.0,
      "close_time": "2028-01-01T04:59:00Z",
      "key_takeaway": "Model's 17.5% probability suggests a rate hike is overvalued at 35c, with a 2.9x payout multiple if correct.",
      "current_state_summary_richtext": "...",
      "short_answer_richtext": "...",
      "executive_summary_richtext": "...",
      "outcome_probabilities": [
        { "market_ticker": "FEDHIKE-27JUN30", "outcome_name": "Before July 2027", "model_probability": 17.5, "market_probability": 35.0 },
        { "market_ticker": "FEDHIKE-26JUN30", "outcome_name": "Before July 2026", "model_probability": 2.28, "market_probability": 5.0 },
        { "market_ticker": "FEDHIKE-26DEC31", "outcome_name": "Before 2027", "model_probability": 8.44, "market_probability": 18.0 },
        { "market_ticker": "FEDHIKE-27DEC31", "outcome_name": "Before 2028", "model_probability": 38.44, "market_probability": 63.0 }
      ],
      "has_history": true
    }
  ],
  "next_cursor": "eyJjYXB0dXJlZF9hdCI6IjIwMjYtMDQtMDRUMTU6NDM6NDQuNDY4MjQyWiIsImhpc3RvcnlfaWQiOjM1M30",
  "has_more": true
}

List only events with history

Python
import requests

url = "https://api.octagonai.co/v1/prediction-markets/events"
headers = {"Authorization": "Bearer your-octagon-api-key"}
params = {
    "limit": 10,
    "has_history": "true",
}

response = requests.get(url, headers=headers, params=params)
response.raise_for_status()

for event in response.json()["data"]:
    print(f"{event['event_ticker']}: {event['name']} (has_history={event['has_history']})")
JavaScript
const params = new URLSearchParams({
  limit: "10",
  has_history: "true",
});

const response = await fetch(
  `https://api.octagonai.co/v1/prediction-markets/events?${params}`,
  {
    headers: {
      Authorization: "Bearer your-octagon-api-key",
    },
  }
);

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
data.data.forEach((event) => {
  console.log(`${event.event_ticker}: ${event.name} (has_history=${event.has_history})`);
});
sh
curl -G "https://api.octagonai.co/v1/prediction-markets/events" \
  -H "Authorization: Bearer <your-octagon-api-key>" \
  --data-urlencode "limit=10" \
  --data-urlencode "has_history=true"

Paginate through all events

Python
import requests

url = "https://api.octagonai.co/v1/prediction-markets/events"
headers = {"Authorization": "Bearer your-octagon-api-key"}
cursor = None

while True:
    params = {"limit": 10}
    if cursor:
        params["cursor"] = cursor

    response = requests.get(url, headers=headers, params=params)
    response.raise_for_status()
    page = response.json()

    for event in page["data"]:
        print(event["event_ticker"], event["name"])

    if not page["has_more"]:
        break
    cursor = page["next_cursor"]
JavaScript
const headers = { Authorization: "Bearer your-octagon-api-key" };
let cursor = null;

while (true) {
  const params = new URLSearchParams({ limit: "10" });
  if (cursor) params.set("cursor", cursor);

  const response = await fetch(
    `https://api.octagonai.co/v1/prediction-markets/events?${params}`,
    { headers }
  );

  if (!response.ok) throw new Error(`Request failed: ${response.status}`);

  const page = await response.json();

  for (const event of page.data) {
    console.log(event.event_ticker, event.name);
  }

  if (!page.has_more) break;
  cursor = page.next_cursor;
}
sh
# First page
curl -G "https://api.octagonai.co/v1/prediction-markets/events" \
  -H "Authorization: Bearer <your-octagon-api-key>" \
  --data-urlencode "limit=10"

# Next page (use next_cursor from previous response)
curl -G "https://api.octagonai.co/v1/prediction-markets/events" \
  -H "Authorization: Bearer <your-octagon-api-key>" \
  --data-urlencode "limit=10" \
  --data-urlencode "cursor=<next_cursor_value>"

Notes

  • Events are ordered by most recently captured first (captured_at descending).
  • Use cursor for pagination when the response includes "has_more": true.
  • Each event in the response includes full analysis fields (key_takeaway, executive_summary_richtext, etc.) by default.
  • Use has_history=true to filter to events with multiple snapshots, then call GET /prediction-markets/events/<event_ticker>/history to retrieve the time-series for a specific event.
  • All probability values (model_probability, market_probability, and those within outcome_probabilities) are expressed as percentages on a 0–100 scale (e.g., 37.7 means 37.7%).
  • outcome_probabilities is null when outcome data is not available for an event.