What it streams
Realtime odds updates for long-term or season-based markets (“futures”), scoped to afutureId.
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 sameoddsId 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 theoddsFutures 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
oddsIdas the unique ID for odds — as an opaque string, not a parseable one - Normalize prices as needed (decimal → American, etc.)
- Join
futureIdto: - Use
active=falseto pause display or betting logic - Preserve all fields in
metaeven if unused (for forward compatibility)