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 outcome within each bookmaker.
Routing
- Entity key:
payload.futureId - Filters:
sportIds,tournamentIds,futureIds,bookmakers - Bookmaker-gated: ✅ Yes
Delivery semantics
- This channel is high throughput
- Updates are latest state only
- Intermediate odds may be coalesced or dropped if the client lags
- Do not rely on tick-by-tick delivery — treat it as a state stream
Payload structure
oddsId:outcome object (full schema)
Each entry in theoddsFutures map is an outcome, similar to the one used in the odds channel.
| Field | Type | Description | |
|---|---|---|---|
bookmaker | string | Bookmaker slug (e.g. "stake", "pinnacle", "polymarket") | |
outcomeId | integer | ID of the outcome | |
participantId | integer | null | Participant (team/player) the odds apply to | |
playerId | integer | Player ID (0 for non-player markets) | |
price | number | Decimal odds | |
active | boolean | Whether the outcome is currently available | |
bookmakerOutcomeId | string | null | Bookmaker-native outcome ID | |
bookmakerChangedAt | integer | null | Bookmaker-provided update timestamp (ms) | |
priceFractional | `string | ` | Fractional odds (e.g. "5/2") |
priceAmerican | `integer | ` | American odds (e.g. +200, -120) |
limit | number | null | Max allowed stake (if applicable) | |
betslip | string | null | Optional bookmaker betslip/deeplink info | |
meta | object | null | Bookmaker-specific metadata (e.g. ladders, ticks) | |
changedAt | integer | Epoch milliseconds (UTC) when received by the gateway |
Example: traditional bookmaker odds for futures
Example: prediction market odds with orderbook metadata
Implementation guidance
- Always use the
oddsIdas the unique ID for odds - 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)