Discover a fixture and its markets

Get the league from /v1/leagues, a fixture ID from /v1/{league}/games, and market keys from /v1/{league}/odds/markets or /props/markets. Market catalogs describe supported vocabulary; they do not guarantee prices for every fixture or bookmaker. /v1/bookmakers exposes id, display_name, class, and has_odds. The public /v1/coverage/bookmakers reports recent coverage. Core, Sharp, and Max currently include odds, stats, and sharp-book prices. Streaming requires its own entitlement, and settlement signals require Max. Trials/grants can have different access. A mixed bookmaker request returns visible books; a request exclusively for excluded books returns 403 feature_not_in_plan.

Current odds and props

Odds markets map market keys to bookmaker entries. Entries contain bookmaker, optional period, updated_at, selections, and, where available, first_seen_at. Selections include selection, optional participant_id, base_market_key, line, a price field, status, and is_suspended. format=american is the default and selects price_american; decimal selects price_decimal. Line values are distinct from prices. Omitted lines are normal for markets such as moneyline. Do not treat suspended or closed selections as currently bettable. Keep market, period, participant, selection, and signed line together when comparing prices. Full-game and first-inning markets, opposite spread sides, and two players’ same-named props are different selections. A missing period on these projections denotes the default full-game period.
snapshot_at summarizes the returned snapshot; inspect each bookmaker’s updated_at for quote age. first_seen_at records when the quote identity was first observed, not when every subsequent price changed. When truncated=true, narrow the bookmaker/player/market filters before assuming completeness.

Fair and best prices

Fixture odds and props have /fair and /best routes, including /props/{player_id}/fair and /best. Their payloads also live at data.data. Fair probabilities remove the quoted margin within a complete selection set; missing or unusable selections can leave fair probabilities unavailable. Consensus is the median of available fair probabilities for the same selection and line. Best-price comparison chooses the highest decimal payout for that exact selection. Book counts describe the returned comparison set, not every bookmaker integrated by SportQuanta. Derived props accept player and bookmaker, plus format; they do not implement the current-props market filter. Baseball /games/{id}/props/{player_id}/edge?window=20 compares recent over-rate with fair prop prices. A historical over-rate is distinct from a model forecast.

History and source changes

/games/{id}/odds/history and /props/history return data.items, oldest first. They accept market, bookmaker, selection, from, to, and limit; prop history adds player_id. Defaults are 1000 rows, capped at 5000. from and to are inclusive RFC 3339 timestamps. No cursor is returned. History exposes changes, including timestamp, line, prices, status/suspension, and source-routing fields when available. These routes require the stats entitlement and history support on the deployment; unavailable history returns 502 data_layer_unavailable. /games/{id}/source-tier-changes annotates source transitions with old/new source IDs and tiers, fallback state, reason, and event time. It accepts one bookmaker, from, to, and limit. Default 200; values outside 1–1000 revert to 200. Source tier is an ingestion-source concept, separate from plan tier.

Opening, closing, CLV, and movement

These paths are relative to /v1/{league}/games/{id}. Payloads live at data.data. Opening/closing ledgers and history-window endpoints represent different facts; a shortened history series can change a window-derived comparison. CLV publishes anchor, open_at, close_at, prices, implied probabilities, and clv_implied. Compare prices at matching selection, period, and line. Missing close data should remain missing.
The current closing-anchor refusal reports details.feature="signals" and details.parameter="anchor", but still carries a legacy details.required_tier="sharp" label. The current entitlement table grants signals with Max; Sharp alone does not unlock the closing anchor. The closing and settlement route gates report required_tier="max".

Settlement and divergence signals

Max unlocks:
  • /v1/{league}/games/{id}/settlements: grades for one fixture.
  • /v1/{league}/settlements?date=YYYY-MM-DD: league/date grades.
  • /v1/{league}/settlements/revisions?since=RFC3339: corrected grades since a timestamp; defaults to the preceding 24 hours and is uncached.
  • /v1/{league}/games/{id}/odds/divergence: sharp versus mainstream fair probabilities, book counts, per-selection gap, and market max_gap.
These return a direct object in outer data. Preserve settlement identity, grading status, revision, and grading time when synchronizing results. Poll revisions with overlap and apply corrections idempotently. Divergence gap is mainstream minus sharp fair probability, and markets are ordered by maximum absolute gap. Read both class book counts before interpreting a consensus; a one-book comparison has a different evidential basis from a broad market.