List Odds
Changed onBulk odds for a sport. Filter by market keys (comma-separated).
Served through a short-TTL single-flight cache — this is the single highest-volume read path (48% of peak-hour traffic on the 2026-08-08 record day) and the response is tier-independent. See api/odds_cache.py for the TTL rationale. No session dependency: the loader opens its own read session so a cancelled leader request can't poison coalesced callers.
Returns a pre-rendered Response, so FastAPI skips response_model validation and re-serialization on the hot path — that step measured 0.22-0.48s of BLOCKING event-loop time per ~2 MB response and was being paid on cache HITS too. response_model is kept for the OpenAPI schema only; odds_cache.render_odds_json reproduces its output byte for byte (see that function before changing any model in this response tree).
Request
- Base URLhttps://api.prop-line.com (the document declares no server; this is the origin it was published from)
- Auth
- API key in header X-API-Key
- or API key in query parameter apiKey
Path parameters
Query parameters
Comma-separated bookmaker keys (e.g. 'draftkings,fanduel'). Omitted = all books. Matches the-odds-api's bookmakers param.
Game-period filter. Omitted = full-game markets only (backwards-compatible default). Pass a comma-separated list of canonical codes (e.g. 'q1,q2' or 'h1') to filter to specific periods. Pass 'all' to include every period alongside full-game.
When true, each bookmaker block carries a link — that book's public event-page URL (plain navigation, no affiliate tagging). Only books with a verified URL template emit links (Bovada, DraftKings, FanDuel, BetMGM, Kalshi, Polymarket, Smarkets); others return null. Matches the-odds-api's includeLinks param.
When true, each bookmaker block carries book_event_id (that book's own event identifier) and every outcome carries book_outcome_id (that book's own selection/contract id) plus outcome_id (PropLine's own canonical outcome id — the same value line_movement / resolution webhooks carry, so a push delivery joins onto exactly one REST row). Use these to join PropLine rows onto a book's native feed without matching on team names, players and lines. Kalshi ships both — the event ticker and the per-contract market ticker (e.g. KXMLBGAME-26AUG08NYYBOS-NYY). Books that don't publish a stable id return null. PropLine-specific; both fields are always present in the response shape and are null unless this param is set (same convention as link/includeLinks), so no existing consumer's parsing changes.
When true, every outcome carries depth: the order-book levels BEYOND the served price, best-first, each {price, size} (American odds; dollars a taker can spend at that level). Up to 50 levels for Polymarket, Polymarket US and Kalshi (Kalshi: a budgeted read, served only while under 3 minutes old and its top equals price), up to 3 for ProphetX; [] for every other book or an empty ladder. Omitted from the response unless set. PropLine-specific.
Books with no in-game feed stop updating when a game starts, so their prices freeze at the last pregame quote. By default those books are LEFT OUT of a game that is in progress (DFS books stay: their pregame line is the line they settle on). Set true to include them; each such book is flagged pregame_only: true. PropLine-specific.
PrizePicks marks some projections over-only (its own allowed_wager_types), and in some states the Under is still available. By default the leg a projection's flag excludes is LEFT OUT. Set true to include it; every outcome whose book publishes the flag then carries allowed_wager_types ("over", "under_or_over"), so a leg is enterable everywhere only when its side is in that value. Omitted from the response unless set. PropLine-specific.
Drop any market the book has not delivered in the last N seconds (its last_update is older than now minus N). A book left with no markets is dropped; on bulk /odds an event left with no books is dropped. Omitted = no age cut. PropLine-specific.
Response
Successful Response
Changes
- info
added the optional property
///////to the response with the status
- info
- info
added the new optional
queryrequest parameterincludeRestricted - info
added the optional property
///////to the response with the status
- info