---
title: "Tournament-wide odds list (WC2026)"
method: GET
path: "/v1/odds"
tags: ["nerd"]
---

# Tournament-wide odds list (WC2026)

`GET /v1/odds`

## Request

- Base URL: `https://api.bigballsdata.com`
- URL: `https://api.bigballsdata.com/v1/odds`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Latest odds snapshot per (match, sportsbook, market, participant) for
every match in a tournament, grouped per match. `tournament` is required
(wc2026 today). Returns 200 with `matches: []` when no odds exist yet, so
it self-fills as books open their markets. Response object keys:
tournament, matches[] (match_id, kickoff, status, home, away, odds[]),
generated_at. Each odds[] entry carries sportsbook, market, line (a
market-shaped object), and fetched_at. 60-second Redis cache.

`line.price_format` (`american` | `decimal`) states which number system
`line.price` is in. The two are stored in one column with no per-row
flag, so a consumer reading `price` alone had to guess: a whole-number
decimal such as `2` or `19` is indistinguishable from an American `+2`
/ `+19` by inspection, and 900 decimal rows sit at |price| >= 100 where
magnitude cannot separate them either. The field is a FORMAT, never a
provider.
**Edge plan or higher**: odds access starts at Edge; Free / Solo / Trio
receive a 403 naming the tier and linking the docs and pricing pages.

## Query parameters

- `tournament` 'wc2026', required
- `date` string, date
- `tz` string
- `market` string

## Response `200`

ok

- object

## Other responses

- `400`: invalid query (tournament required)
- `403`: plan_required (Edge or higher)

---

[API](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api.md) · [All operations](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bigballsdata/apis/big-ball-sports-api/revisions/9191fc13fcdb?raw)
