Skip to content

Prediction Markets Events API ​

Retrieve Octagon's analyzed prediction market events over REST. The Events API exposes three endpoints:

  • List events — the latest snapshot of every analyzed event, including model/market probabilities, confidence scores, analysis summaries, and per-market outcome breakdowns.
  • Get an event — one event as of one analysis run, with each market's quote and status from that run.
  • Event history — the historical snapshots for a single event by ticker, for time-series analysis and backtesting.

Like the Chat Completions and Responses endpoints, these are direct REST endpoints called relative to the Octagon API base URL:

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

List Events ​

GET /predictions/events

Returns the latest snapshot of every analyzed prediction market event tracked by Octagon, ordered by most recently captured first.

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.
includestringNoComma-separated list of optional per-row field groups. Supported: eligibility (see below).

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). See Interpreting the model 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.

The response envelope also includes next_cursor and has_more for pagination.

Eligibility fields ​

Present only when include=eligibility is set:

FieldTypeDescription
eligibleboolean | nullWhether a fresh report can be generated for this event.
eligibility_statusstring | nullMarket state on the marketplace: open, paused, unopened, closed, settled, or unknown.
eligibility_reasonstring | nullHuman-readable explanation for the eligible value.

Generate fresh reports with the Reports API.

Get an Event ​

GET /predictions/events/{event_ticker}

Returns one event as of one analysis run: its metadata, the run's headline numbers, and each market's quote and status from that run. Every number is as of captured_at. The report itself and its Trust Index come from the Reports API.

The path accepts a Kalshi event ticker or a Polymarket event slug, in any letter case.

Query Parameters ​

ParameterTypeRequiredDescription
run_idstring (UUID)NoReturn the event as of this run. Defaults to the latest run.

Response Fields ​

FieldTypeDescription
history_idintegerUnique identifier for this snapshot.
run_idstring (UUID)The analysis run this snapshot belongs to.
captured_atstring (ISO 8601)When this snapshot was captured.
event_tickerstringThe event key: a Kalshi event ticker or a Polymarket event slug.
venuestringkalshi or polymarket.
namestringHuman-readable event name.
titlestringSame as name.
slugstringURL-friendly slug.
subtitlestringEvent subtitle.
image_urlstringEvent image URL.
event_urlstringThe event's page on the marketplace.
series_categorystringThe venue's category for the event.
meta_categorystringOctagon's category, shared across venues.
resolution_cadencestring | nullHow often markets of this kind resolve: five_min, fifteen_min, hourly, four_hour, daily, or weekly. null when none applies.
canonical_market_pagestring | nullThe category path the event's report is published under on octagonai.co/markets, e.g. politics/geopolitics.
mutually_exclusivebooleanWhether the event's outcomes are mutually exclusive.
available_on_brokersbooleanWhether the event is available on supported brokers.
analysis_last_updatedstring (ISO 8601)When the analysis behind this snapshot was produced.
model_probabilityfloatOctagon model probability for the event's primary market (0–100).
market_probabilityfloatMarket-implied probability for the event's primary market (0–100).
edge_ppfloatmodel_probability - market_probability, in percentage points.
expected_returnfloatExpected return if the model is correct.
r_scorefloatRisk-adjusted score.
confidence_scorefloatOctagon's confidence in the model output (0–10).
key_takeawaystringOne-line summary of the model's view.
total_volumefloatTotal trading volume.
total_volume_24hfloatTrading volume over the 24 hours before capture.
total_open_interestfloatTotal open interest.
close_timestringWhen the event closes.
marketsarrayEach market's model and market probability, quote, and status from this run (see below).

The response also carries the venue's own series, contract-terms and link fields as the venue publishes them: series_ticker, series_title, series_frequency, series_tags_raw, collateral_return_type, strike_date, strike_period, fee_type, fee_multiplier, settlement_sources_raw, additional_prohibitions_raw, contract_url, and contract_terms_url. kalshi_event_url and event_category_deprecated are legacy fields kept for existing clients. Read event_url for the event's page.

markets items ​

One item per market in the event:

FieldTypeDescription
market_tickerstringTicker for this market.
outcome_namestringHuman-readable name for the outcome.
model_probabilityfloat | nullOctagon model probability for this outcome (0–100). null when the run didn't model this market.
market_probabilityfloat | nullMarket-implied probability for this outcome (0–100).
model_probability_sourcestring | nullProvenance of model_probability — see Interpreting the model probability.
evidence_gradestring | nullEvidence quality behind model_probability (A–D).
reasonstring | nullThe model's one-line rationale for this outcome's probability.
volumefloat | nullTotal trading volume for this market.
volume_24hfloat | nullTrading volume over the 24 hours before capture.
yes_bidfloat | nullBest YES bid, as a price per $1 contract (0–1).
yes_askfloat | nullBest YES ask (0–1).
no_bidfloat | nullBest NO bid (0–1).
no_askfloat | nullBest NO ask (0–1).
statusstringactive, closed, determined, or terminated. Markets in one event resolve independently.

A determined market's market_probability is fixed at 0 or 100 by its result.

Status Codes ​

StatusMeaning
200The event, as of the latest run or the run run_id names.
400An unknown query parameter, or a malformed run_id (invalid_value).
404No event matches the key, or the event has no snapshot for run_id (not_found).

Event History ​

GET /predictions/events/{event_ticker}/history

Returns historical snapshots for a single prediction market event by its ticker, newest first.

Finding the event ticker in a Kalshi URL. A Kalshi event URL has the form /markets/<series-ticker>/<event-slug>/<event-ticker>. In https://kalshi.com/markets/kxfeddecision/fed-meeting/kxfeddecision-26jun, the event ticker is KXFEDDECISION-26JUN. Market deeplinks end in a market ticker instead, which is the event ticker plus an outcome suffix: strip the suffix to get the event ticker (kxoaianth-40-oai → KXOAIANTH-40).

Query Parameters ​

ParameterTypeRequiredDescription
limitintegerNoNumber of records to return. Default 50; minimum 1; maximum 200.
cursorstringNoCursor for pagination. Use the cursor returned from a previous response to continue.
captured_fromdatetime (ISO 8601)NoStart timestamp filter (inclusive) for snapshot capture time.
captured_todatetime (ISO 8601)NoEnd timestamp filter (inclusive) for snapshot capture time.
includestringNoSet to analysis to include the analysis fields in the response.
daysintegerNoExclude snapshots where close_time is before now minus this many days. Snapshots with no close_time are always included. Minimum 1.
exclude_empty_modelbooleanNoWhen true, exclude snapshots where model_probability is null (incomplete analysis). Default true.

Response Fields ​

Each snapshot 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.
series_categorystringCategory (e.g., "Politics", "Crypto", "Economics").
close_timestringWhen the event closes.
confidence_scorefloatOctagon's confidence in the model output (0–10 scale).
model_probabilityfloatOctagon model probability for the event (0–100 percentage scale).
market_probabilityfloatCurrent market-implied probability (0–100 percentage scale).
edge_ppfloatModel edge in percentage points (model_probability - market_probability). See Interpreting the model probability.
expected_returnfloatExpected return if the model is correct.
r_scorefloatRisk-adjusted score.
total_volumefloatTotal trading volume.
total_open_interestfloatTotal open interest.
outcome_probabilitiesarrayPer-market outcome breakdown (see below). null if unavailable.

When include=analysis is set, these additional fields are included:

FieldTypeDescription
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.

The response envelope also includes the requested event_ticker, plus next_cursor and has_more for pagination.

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).
model_probability_sourcestringProvenance of model_probability — see Interpreting the model probability. null on rows written before this field existed.
evidence_gradestringEvidence quality behind model_probability (A–D), which bounds how far it may deviate from the market-derived anchor. null when unavailable.
market_probabilityfloatMarket-implied probability for this outcome (0–100 percentage scale).
reasonstringThe model's one-line rationale for this outcome's probability. null when unavailable.

Interpreting the model probability ​

model_probability is market-anchored: it starts from the contract's own market price and is adjusted for the research evidence on that outcome. It is a calibrated read on the price, not a second estimate derived independently of it — treat it as correlated with market_probability rather than as an independent opinion.

For a second opinion to weigh against your own model, use rows where model_probability_source is recalibrated and evidence_grade is A or B. Those are the rows where research evidence moved the value furthest from the market-derived anchor. Other combinations track the market price closely by construction.

ladder_model answers a narrower question. Its fitted parameters come from the ladder's own prices, so a rung is independent of its own quote but not of the market as a whole. Use it to compare rungs within a ladder — relative levels and ordering — rather than as an independent read on whether the ladder is priced correctly. The two fields:

model_probability_sourceMeaning
ladder_modelA threshold ladder priced from barrier-touch geometry. The value follows from the contract's own threshold, not its own quote — see Ladder-priced rows.
recalibratedResearch evidence moved the value away from the market-derived anchor.
market_baselineThe market price re-expressed. Carries no signal beyond the price.
unmodeled / out_of_scopeNot modelled; do not read as a forecast.
determinedThe market has settled; the outcome is known.

evidence_grade bounds the maximum deviation from the anchor, so a low grade means the value is close to the market price by construction regardless of what the research said:

GradeMaximum deviation from anchor
A±20pp
B±12pp
C±7pp
D±3pp

Ladder-priced rows ​

On a threshold ladder — a set of contracts on the same underlying at different levels ("above $95,000", "above $120,000") — rows marked ladder_model are derived differently from every other source. One spot and one volatility are fitted to the ladder as a whole, and each rung's probability is then the first-passage probability of reaching its own threshold under that single view.

Two consequences that matter when you consume these:

  • Two rungs quoted at the same price receive different probabilities, because the value follows from the threshold rather than from the quote. Contrast market_baseline, where equal prices give equal model probabilities by construction. (recalibrated rows may differ at equal prices when their evidence differs, but nothing guarantees it — only ladder_model separates them structurally.)
  • Ordering is guaranteed. P(above $95k) >= P(above $120k) holds as an identity, not as a best effort, so you can rely on monotonicity across a ladder without re-sorting.

One limit, stated plainly: the fitted spot and volatility come from the ladder's own prices. A rung's value is independent of its own quote, but the ladder's overall level is still market-derived, so this will not tell you that an entire ladder is mispriced. Rows fall back to recalibrated or market_baseline whenever the fit does not describe the book.

Use Cases ​

  • Discover all events currently tracked and analyzed by Octagon, or build a catalog/dashboard of active events.
  • Monitor the latest model probabilities, confidence scores, and analysis across all events.
  • Filter to events with historical data (has_history=true), then drill into each event's time-series via the history endpoint.
  • Build time-series views of model vs. market probability for a specific event ticker.
  • Backtest signal quality (for example, edge_pp and expected_return) across historical snapshots.
  • Backtest multi-outcome events using outcome_probabilities per snapshot.
  • Track how confidence and liquidity metrics evolve as an event approaches resolution.

Notes ​

  • On Event History, prefer bounded time windows (captured_from and captured_to) for predictable page sizes.
  • Probability and score scales follow the Kalshi Search API conventions.