Skip to main content

What it streams

Realtime odds updates for long-term or season-based markets (“futures”), scoped to a futureId. Each update contains one or more prices per outcome, per bookmaker. Odds are grouped by bookmaker and keyed by participant within each bookmaker.

Routing

  • Entity key: payload.futureId
  • Filters: sportIds, tournamentIds, futureIds, bookmakers
  • Bookmaker-gated: ✅ Yes

Delivery semantics

Same conflation model as the odds channel: updates for the same oddsId within a fixed ~10 ms batching window are collapsed to the newest value.
  • No state is lost — the final value of every price move is always delivered
  • Intermediate ticks superseded within a window are not delivered — treat it as a state stream, not a ledger
Need full price movement or closing line value? Use the REST Historical Odds & CLV endpoints (/futures/odds/historical, /futures/odds/clv).

Payload structure

oddsId:
futureOutcomeId identifies the side and line within the market. Participant-keyed markets (winner, topscorer, relegation, mvp) own no outcome rows and carry the sentinel 0 — the selection is the participant. Decomposed markets (Yes / No, Over / Under) carry a real futureOutcomeId per side per line. Treat oddsId as an opaque string and read values from the explicit fields below rather than splitting it. See Future odds IDs.

outcome object (full schema)

Each entry in the oddsFutures map is an outcome, similar to the one used in the odds channel.

Example: traditional bookmaker odds for futures


Example: prediction market odds with orderbook metadata


Implementation guidance

  • Always use the oddsId as the unique ID for odds — as an opaque string, not a parseable one
  • Normalize prices as needed (decimal → American, etc.)
  • Join futureId to:
  • Use active=false to pause display or betting logic
  • Preserve all fields in meta even if unused (for forward compatibility)