Skip to main content

What it streams

Realtime odds updates for outcomes within markets, scoped to a specific fixtureId. Odds are grouped by bookmaker and keyed by a unique oddsId per outcome. Each entry represents a single oddsId (one price for one outcome).

Routing

  • Entity key: payload.fixtureId
  • Filters: sportIds, tournamentIds, fixtureIds, bookmakers
  • Access: determined by your apiKey
  • Bookmaker-gated: ✅ Yes

Delivery semantics

  • This channel is high throughput
  • Updates are latest-state only
  • The gateway may coalesce or drop intermediate updates under load
  • Do not assume tick-by-tick completeness
Treat every message as a state update, not a ledger.
Need every price move or the closing line? The stream is for trading on latest state; for full movement use Historical Odds and for opening/closing prices use CLV.

Payload structure

oddsId:

outcome object (full schema)

Each odds entry is an outcome, with the following fields:

Notes on timestamps

  • changedAt is always present and represents when the gateway accepted the update
  • bookmakerChangedAt (when present) reflects the bookmaker’s own timestamp
  • These values may differ — do not assume equality

Advanced metadata (meta)

Some bookmakers (e.g. prediction markets / exchanges) provide rich metadata. Example:
Typical meta contents may include:
  • Orderbook ladders (back / lay)
  • Liquidity hints
  • Internal sizing or tick metadata
The schema of meta is bookmaker-specific and may evolve.

Example: traditional bookmaker odds


Example: prediction market odds (extended fields)


Implementation guidance

  • Always key storage by
  • Group outcomes by marketId (see Concepts) for:
    • arbitrage detection
    • overround calculations
    • probability normalization
  • Treat active=false or marketActive=false as hard stops
  • Preserve unknown fields in meta to remain forward-compatible