# GET /v2/fixtures/{id}/odds

Group: Betting odds

Every market the bookmaker prices for a fixture — result (1X2), winner, double chance, draw no bet, both teams to score, first to score, goal / card / corner / points totals, Asian handicap, handicap / point spread, next goal (live), cricket toss winner, most sixes and a hundred / fifty in the match — with opening and current prices (decimal and fractional), the direction of the last move, suspension and, after the match, the winning choices. Pro, Business and Enterprise plans.

Plans: Pro and up (other plans get 403 endpoint_not_in_plan).

Note: A market’s key is stable within the fixture (kind, then :period, :line and :live — "result", "result:half1", "totalGoals:2.5", "asianHandicap:-1.25", "winner:live") — merge WebSocket odds frames by it. In play the bookmaker lists the in-play market (live: true, key …:live) next to the closed pre-match one, whose prices are the last before kick-off. line is a total’s figure or the HOME side’s handicap; a moved line is a new key. decimal = 1 + fractional, rounded to 2 decimals. winning is null before settlement and where nobody settles the market; settledBy says who set it. The source does not settle every market — on NBA games the handicap (point spread) and the first-quarter winner stayed null after the final whistle (checked 2026-11-05, hours later), and football Asian handicaps and total cards on every finished fixture (checked 2026-11-12, days later), while results, winners and goal totals were settled within minutes (settledBy "source"). Since 2026-11-12 we settle two of those ourselves from the final result, marked settledBy "computed" and never over a flag of the source’s: football Asian handicaps on half lines (from the regular-time score) and football total cards on half lines when the match had yellow cards only, all to players on the pitch, with the incidents and the statistics agreeing. Everything else the source leaves unsettled stays null for good. The bookmaker’s own rules decide a bet. An empty markets list (and a null updatedAt) = the bookmaker prices nothing for it — minor leagues, matches far ahead. REST reads are refreshed about every 30 seconds in play; for every price move subscribe to odds:{id}.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `id` | path | yes | our numeric id (positive integer) |

## Response

- `data`: `Odds`
- `meta`: count (markets)
- Objects: Odds (https://sportsapi.app/markdown/en/reference.md#odds)

## Errors

- 403 endpoint_not_in_plan — Free and Starter keys
- 403 history_not_in_plan — the fixture is older than your plan’s history
- 404 not_found — an id we never issued

Plus the common errors (https://sportsapi.app/markdown/en/docs.md#errors).

## Request

cURL:

```bash
curl -H "Authorization: Bearer sk_live_…" \
    "https://api.sportsapi.app/v2/fixtures/{id}/odds"
```

TypeScript:

```ts
const { data, meta } = await client.fixtures.odds(id);
```

Python:

```python
res = client.fixtures.odds(id)
```

Go:

```go
res, err := client.Fixtures.Odds(ctx, id)
```

CLI:

```bash
$ sportsapi fixtures odds <id>
```

## Example response

```json
{ "data": { "fixtureId": 701210, "updatedAt": "2026-11-04T17:20:00.000Z",
    "markets": [
      { "key": "result", "kind": "result", "name": "Full time", "period": "match", "line": null, "live": false, "suspended": false,
        "choices": [
          { "name": "1", "outcome": "home", "fractional": "19/20", "decimal": 1.95, "openingFractional": "11/10", "openingDecimal": 2.1, "change": "down", "winning": null },
          { "name": "X", "outcome": "draw", "fractional": "10/3", "decimal": 4.33, "openingFractional": "5/2", "openingDecimal": 3.5, "change": "up", "winning": null },
          { "name": "2", "outcome": "away", "fractional": "11/5", "decimal": 3.2, "openingFractional": "11/5", "openingDecimal": 3.2, "change": "none", "winning": null } ], "settledBy": null },
      { "key": "totalGoals:2.5", "kind": "totalGoals", "name": "Match goals", "period": "match", "line": 2.5, "live": false, "suspended": false,
        "choices": [ { "name": "Over", "outcome": "over", "fractional": "4/5", "decimal": 1.8, … }, { "name": "Under", "outcome": "under", … } ] },
      { "key": "asianHandicap:-0.5", "kind": "asianHandicap", "name": "Asian handicap", "period": "match", "line": -0.5, … }, … ] },
  "meta": { "count": 19 } }
```

---

Base URL: https://api.sportsapi.app. Send your API key as `Authorization: Bearer <key>` on every /v2 request; keys are created in the dashboard (https://sportsapi.app/dashboard).
HTML: https://sportsapi.app/docs/odds/fixtures-odds · All docs: https://sportsapi.app/markdown/en/docs.md
