List Odds

Retrieve betting odds with optimized single-query performance.

Required: At least one of league_id or event_id must be provided.

By default, returns only the latest odd per outcome/sportsbook/aggregator combination
(latest_only=true). Set latest_only=false to retrieve full historical odds data.

Finished games (prediction markets): latest prices from prediction venues (Kalshi,
Polymarket, ProphetX, Limitless, Predict.fun, Polymarket US) for a final or cancelled event are kept for at
least 14 days after the event's scheduled start. After that they may be removed, and a latest
read for that event_id returns no rows for those venues. Use latest_only=false for the
price history.

Use additional filters to narrow results by sportsbook, market type, etc.

line_alignment (prediction markets, event-scoped requests only): each row's additive
line_alignment block is only present when this is an event-scoped, latest_only=true
request (event_id given). It is derived at read time from
CommonModel.Betting.PredictionMarkets.LineLadder and never rewrites the sibling is_main
column. For non-event-scoped league_id requests the key is omitted from the response row
entirely
(not present with a null body) -- computing a ladder per event across a whole
league's worth of events in one request is intentionally out of scope; see
docs/plans/2026-09-24-prediction-market-is-main-line-ladder.md Phase D.

Crypto (league_id=CRYPTO or a crypto window event_id; tenants entitled to the
CRYPTO league only).
One row per venue per outcome (Up/Down) with
market_type = "up_down" and market_id = the contract family. Polymarket and
Limitless rows of the same window share one market_id (same Chainlink 60s TWAP
reference and tie rule); Kalshi resolves off a different reference and has its own
market_id. Each row's additive reference_alignment lists the other markets of the
window in different_reference_market_ids, and canonical_outcome_id is a crypto
namespaced id (join it only against other crypto rows, never sports prediction-market
canonical_outcome_ids). Prices are indicative: captured by our one-minute poll
(timestamp/observed_at are our capture time, never a provider clock), so
provider_freshness is unknown (a fresh snapshot) or stale (older than
metadata.crypto_quote.stale_after_ms; 150 s for 5m/15m, 300 s for 1h, 600 s for
1d), never fresh, and execution_readiness.ready is false: treat both as
"indicative, not executable", use stale to grey out a price. A quote older than 15
minutes, a market with no quote, and any window at or after its window_end yield no
row. Crypto odds are latest-only: latest_only=false or since is a 400
historical_unavailable_for_league. line_alignment is omitted on crypto rows.
league_id=CRYPTO returns the board of live windows plus upcoming windows starting
within 60 minutes (default and maximum per_page 100, exact meta.total_count).
asset and horizon filter the board. Crypto at the polling cadence is too slow for
5m-market trading use.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Query Params
string

Filter by league ID (UUID or abbreviation, e.g., 'NFL') — required if event_id not provided

string

Filter by event ID (UUID) - required if league_id not provided

string

Filter by market ID (UUID)

string

Filter by outcome ID (UUID)

string

Filter by player ID (UUID) - useful for player prop markets

string

Filter by sportsbook name (e.g., 'draftkings', 'fanduel')

string

Filter by a single aggregator key. One value only: a comma-separated list returns 400; send one request per aggregator.

string

Filter by market type (e.g., 'moneyline', 'point_spread', 'total_points')

string

Filter by price type (e.g., 'american' for priced odds, 'recommendation' for recommendation cards)

boolean

Filter by main lines only (true/false)

boolean

Filter by live odds only (true/false)

boolean

Return only the latest odd per outcome/sportsbook/aggregator (default: true). Set to false for full historical data.

string

Filter odds updated since this ISO 8601 timestamp (e.g., '2026-02-11T18:00:00Z'). Only applies when latest_only=false.

boolean

Return an exact meta.total_count/meta.total_pages. Defaults to
true for event-scoped requests (event_id present) and false for
league-scoped requests, where counting every matching row is
unbounded. When the count is skipped both fields are null and
meta.has_next_page? drives the next link. Must be true or
false; any other value is rejected with HTTP 400.

string
enum

CRYPTO league only (league_id=CRYPTO): filter to one asset. Ignored on every other league.

Allowed:
string
enum

CRYPTO league only (league_id=CRYPTO): filter to one window horizon. Ignored on every other league.

Allowed:
integer
≥ 1
Defaults to 1

Page number for page/per_page pagination. Do not combine with limit/offset.

integer
1 to 1000
Defaults to 1000

Number of items per page (max 1000). Do not combine with limit/offset.

integer
1 to 1000

Maximum rows for limit/offset pagination. Do not combine with page/per_page.

integer
≥ 0

Zero-based row offset for limit/offset pagination. Do not combine with page/per_page.

Responses

Callback
Language
Credentials
Bearer
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json