---
title: "List Odds"
method: GET
path: "/v1/sports/{sport_key}/odds"
tags: ["Events & Odds"]
---

# List Odds

`GET /v1/sports/{sport_key}/odds`

Bulk 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.

## Path parameters

- `sport_key` string, required

## Query parameters

- `markets` string
- `bookmakers` string, nullable — Comma-separated bookmaker keys (e.g. 'draftkings,fanduel'). Omitted = all books. Matches the-odds-api's `bookmakers` param.
- `period` string, nullable — 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.
- `includeLinks` boolean — 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.
- `includeBookIds` boolean — 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). 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.

## Response `200`

Successful Response

- EventOddsOut[]
  - `id` string, required
  - `sport_key` string, required
  - `home_team` string, required
  - `away_team` string, required
  - `commence_time` string, date-time, required
  - `live` boolean
  - `last_update` string, date-time, nullable
  - `bookmakers` BookmakerOut[], required
    - `key` string, required
    - `title` string, required
    - `last_update` string, date-time, nullable
    - `link` string, nullable
    - `book_event_id` string, nullable
    - `markets` MarketOut[], required
      - `key` string, required
      - `last_update` string, date-time, required
      - `period` string, nullable
      - `outcomes` OutcomeOut[], required
        - `name` string, required
        - `description` string, required
        - `price` integer, nullable, required
        - `point` number, nullable, required
        - `book_updated_at` string, date-time, nullable
        - `book_version` integer, nullable
        - `payout_multiplier` number, nullable
        - `dfs_odds_type` string, nullable
        - `last_change_at` string, date-time, nullable
        - `line_gap` number, nullable
        - `book_outcome_id` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/prop-line/apis/player-props-api.md) · [All operations](https://skmtc.net/prop-line/apis/player-props-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/prop-line/player-props-api/revisions/241d1dc5f82e/schema)
