> ## Documentation Index
> Fetch the complete documentation index at: https://docs.odds-api.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Outrights

> Outright odds and results with the Outrights add-on. Golf is the first sport: Winner, Top 5/10/20, Top 5/10/20 (Incl. Ties) and Make Cut prices for PGA Tour, DP World Tour, LIV Golf and the majors, with final positions.

## What are outrights?

An outright is a bet on how a whole tournament ends rather than on a single match: who wins, who finishes in the top 5, 10 or 20, and who makes the cut.

Outrights are a paid add-on. Golf is the first sport: PGA Tour, DP World Tour and LIV Golf individual tournaments and the four majors. More sports will follow on the same endpoints.

Three endpoints:

| Endpoint | Returns |
| - | - |
| `GET /v3/outrights` | Tournaments for a sport, with how many bookmakers currently price each one |
| `GET /v3/outrights/odds` | Prices for one tournament from the bookmakers you choose |
| `GET /v3/outrights/results` | Final positions and the winners of each market after the tournament |

Every golfer carries a `participantId` from `/v3/participants`. It is the same id for every bookmaker and in the results, so you can join prices and results without matching names.

## Markets

| Market | Runner fields | Wins when the golfer |
| - | - | - |
| `Winner` | `odds` (and `layOdds` on exchanges and prediction markets) | finishes first |
| `Top 5`, `Top 10`, `Top 20` | `odds` (and `layOdds`) | finishes in that many places. Ties at the boundary settle under the bookmaker's dead-heat rules |
| `Top 5 (Incl. Ties)`, `Top 10 (Incl. Ties)`, `Top 20 (Incl. Ties)` | `odds` (and `layOdds`) | finishes in that many places. Ties at the boundary are paid in full |
| `Make Cut` | `yes`, `no` (and `layYes`, `layNo` on exchanges) | makes the cut. Only offered for events with a cut |

`Top 5` and `Top 5 (Incl. Ties)` are different bets and are never merged: the Incl. Ties price is shorter because ties are paid in full. Each bookmaker's market is filed under the tie rule that bookmaker states. A bookmaker that does not offer a market leaves it out. Odds are decimal strings, like `/v3/odds`.

## Query Parameters

### GET /v3/outrights

| Parameter | Required | Description |
| - | - | - |
| `apiKey` | Yes | Your API key |
| `sport` | Yes | Sport name or slug. `golf` |
| `league` | No | League slug: `pga-tour`, `dp-world-tour`, `liv-golf` or `majors` |
| `status` | No | Comma-separated: `pending`, `live`, `settled`, `cancelled`. Default `pending,live` |

The list holds the whole season, sorted by start date. `bookmakerCount` is how many bookmakers you can request in `/v3/outrights/odds` currently price the tournament. A market that lists only a small part of the field (fewer than a quarter as many golfers as the typical bookmaker for that tournament) does not count, but `/v3/outrights/odds` still returns those prices when you request that bookmaker. Tournaments that bookmakers do not price yet show `bookmakerCount: 0`, so filter by `league` to keep the list short.

### GET /v3/outrights/odds

| Parameter | Required | Description |
| - | - | - |
| `apiKey` | Yes | Your API key |
| `id` | Yes | Outright id from `/v3/outrights` |
| `bookmakers` | Yes | Comma-separated bookmaker names, max 30. Same rules as `/v3/odds`: the bookmakers come from your plan's selection |

### GET /v3/outrights/results

| Parameter | Required | Description |
| - | - | - |
| `apiKey` | Yes | Your API key |
| `id` | Yes | Outright id from `/v3/outrights` |

## Fetching Outrights

List the PGA Tour tournaments, then fetch prices for the next one that bookmakers price:

```javascript JavaScript theme={null}
const apiKey = process.env.ODDS_API_KEY;
const base = 'https://api.odds-api.io/v3';

const tournaments = await fetch(
  `${base}/outrights?apiKey=${apiKey}&sport=golf&league=pga-tour`
).then((r) => r.json());

const next = tournaments.find((t) => t.bookmakerCount > 0);

const odds = await fetch(
  `${base}/outrights/odds?apiKey=${apiKey}&id=${next.id}&bookmakers=DraftKings,Kalshi,Betfair%20Exchange`
).then((r) => r.json());

console.log(odds.bookmakers.DraftKings);
```

```python Python theme={null}
import os
import requests

api_key = os.environ['ODDS_API_KEY']
base = 'https://api.odds-api.io/v3'

tournaments = requests.get(
    f'{base}/outrights',
    params={'apiKey': api_key, 'sport': 'golf', 'league': 'pga-tour'},
).json()

next_event = next(t for t in tournaments if t['bookmakerCount'] > 0)

odds = requests.get(
    f'{base}/outrights/odds',
    params={'apiKey': api_key, 'id': next_event['id'], 'bookmakers': 'DraftKings,Kalshi,Betfair Exchange'},
).json()

print(odds['bookmakers'].get('DraftKings'))
```

```bash cURL theme={null}
curl "https://api.odds-api.io/v3/outrights?apiKey=YOUR_API_KEY&sport=golf&league=pga-tour"
curl "https://api.odds-api.io/v3/outrights/odds?apiKey=YOUR_API_KEY&id=1001&bookmakers=DraftKings,Kalshi,Betfair%20Exchange"
```

## Response Format

`GET /v3/outrights`:

```json theme={null}
[
  {
    "id": 1001,
    "name": "World Wide Technology Championship 2026",
    "date": "2026-11-05T13:30:00Z",
    "status": "pending",
    "sport": { "name": "Golf", "slug": "golf" },
    "league": { "name": "PGA Tour", "slug": "pga-tour" },
    "bookmakerCount": 40
  }
]
```

`GET /v3/outrights/odds` (two golfers per market and some markets shown):

```json theme={null}
{
  "id": 1001,
  "name": "World Wide Technology Championship 2026",
  "date": "2026-11-05T13:30:00Z",
  "status": "pending",
  "sport": { "name": "Golf", "slug": "golf" },
  "league": { "name": "PGA Tour", "slug": "pga-tour" },
  "bookmakers": {
    "DraftKings": [
      {
        "name": "Winner",
        "updatedAt": "2026-11-04T17:01:15.428Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "odds": "14.25" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "odds": "14.75" }
        ]
      },
      {
        "name": "Top 5",
        "updatedAt": "2026-11-04T17:01:15.869Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "odds": "4.25" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "odds": "4.35" }
        ]
      },
      {
        "name": "Top 5 (Incl. Ties)",
        "updatedAt": "2026-11-04T17:01:15.428Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "odds": "3.70" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "odds": "3.70" }
        ]
      }
    ],
    "Kalshi": [
      {
        "name": "Winner",
        "updatedAt": "2026-11-04T18:18:33.665Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "odds": "16.129", "layOdds": "18.182" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "odds": "16.667", "layOdds": "18.182" }
        ]
      },
      {
        "name": "Make Cut",
        "updatedAt": "2026-11-04T18:18:35.594Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "yes": "1.149", "no": "6.667" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "yes": "1.163", "no": "5.882" }
        ]
      }
    ],
    "Betfair Exchange": [
      {
        "name": "Winner",
        "updatedAt": "2026-11-05T12:00:18.63Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "odds": "18.50", "layOdds": "19.00" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "odds": "18.50", "layOdds": "19.50" }
        ]
      },
      {
        "name": "Top 5",
        "updatedAt": "2026-11-05T12:00:18.63Z",
        "odds": [
          { "label": "Ben Griffin", "participantId": 991291386379, "odds": "4.40", "layOdds": "4.70" },
          { "label": "Ryan Gerard", "participantId": 991890826517, "odds": "4.70", "layOdds": "4.90" }
        ]
      }
    ]
  }
}
```

* `label` is the golfer's name as listed in `/v3/participants`, whatever spelling the bookmaker uses.
* `updatedAt` is when a price in that market last changed, the same meaning as on `/v3/odds`.
* Markets come in a fixed order: Winner, Top 5, Top 5 (Incl. Ties), Top 10, Top 10 (Incl. Ties), Top 20, Top 20 (Incl. Ties), Make Cut.
* Runners are sorted by `odds` (Make Cut by `yes`), shortest first; equal prices sort by name.
* A market is served only while its prices are current: confirmed within the last 10 minutes while the tournament is in play, 30 minutes during the week before it starts, and 6 hours further out. A bookmaker with no current market is left out of `bookmakers` and is not counted in `bookmakerCount`.
* Settled and cancelled tournaments return `"bookmakers": {}`.

## Results and Ties

`GET /v3/outrights/results` returns final positions once the result is confirmed, usually several hours after the final round. While `status` is `pending`, `live` or `cancelled`, the response is still `200` with empty `results` and `winners`.

Shortened example (six of 120 golfers; the longer `winners` lists are cut short the same way):

```json theme={null}
{
  "id": 1000,
  "name": "Mexico Open 2026",
  "status": "settled",
  "results": [
    { "label": "Andrew Novak", "participantId": 991570904131, "position": 1, "tied": false, "madeCut": true, "status": "finished" },
    { "label": "Kristoffer Ventura", "participantId": 993035649881, "position": 2, "tied": true, "madeCut": true, "status": "finished" },
    { "label": "Steven Fisk", "participantId": 993893124464, "position": 2, "tied": true, "madeCut": true, "status": "finished" },
    { "label": "Ben Griffin", "participantId": 991291386379, "position": 4, "tied": true, "madeCut": true, "status": "finished" },
    { "label": "Mackenzie Hughes", "participantId": 990349596473, "position": 4, "tied": true, "madeCut": true, "status": "finished" },
    { "label": "Davis Riley", "participantId": 991030050812, "position": null, "tied": false, "madeCut": false, "status": "cut" }
  ],
  "winners": {
    "Winner": [991570904131],
    "Top 5": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473],
    "Top 5 (Incl. Ties)": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473],
    "Top 10": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473],
    "Top 10 (Incl. Ties)": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473],
    "Top 20": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473],
    "Top 20 (Incl. Ties)": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473],
    "Make Cut": [991570904131, 993035649881, 993893124464, 991291386379, 990349596473]
  }
}
```

* `status` per golfer: `finished`, `cut`, `withdrawn` or `disqualified`.
* `position` is the final position. Tied golfers share it and have `tied: true`. It is `null` for `cut`, `withdrawn` and `disqualified`.
* `madeCut` is `true` or `false` when the event has a cut, and `null` on every row for events without one (LIV Golf, no-cut signature events, the Tour Championship). A golfer who withdrew before the first round has `madeCut: null`.
* `winners["Top N"]` and `winners["Top N (Incl. Ties)"]` both list every golfer with `position` N or better, so ties at the boundary can make them longer than N. The two markets differ only in how a boundary tie is paid: dead heat for `Top N`, in full for `Top N (Incl. Ties)`.
* `winners["Winner"]` is everyone at position 1: normally one golfer (a playoff winner is first, not tied), or several co-winners with `tied: true`.
* `winners["Make Cut"]` lists every golfer who made the cut. It is absent for events without a cut.
* Dead-heat reductions and each-way terms are set by each bookmaker. Apply your bookmaker's rules to these results.

## Plan Access

Outrights are an add-on for paid plans and are not available on the free plan. Add it under Billing > Add-ons in the dashboard on a monthly card-paid plan; for annual or crypto plans, contact support and we'll add it. Without the add-on, all three endpoints return `403`:

```json theme={null}
{ "error": "Outrights are a paid add-on. Add it in your dashboard: https://odds-api.io/dashboard/billing#outrights" }
```

Errors: `400` for missing or invalid parameters, `401` for a missing or invalid API key, `403` without the add-on, `404` for an unknown or malformed id, `429` when you exceed the rate limit, `500` on a server error, `503` when the service is temporarily busy.

Each call counts as one request against your normal quota. `/v3/outrights/odds` uses the bookmakers in your plan's selection, exactly like `/v3/odds`: the add-on unlocks the endpoints, not extra bookmakers.

## Limitations & Considerations

> [!WARNING]
>
> * Golf is the only sport so far, individual stroke-play tournaments. Team events are not covered.
> * No WebSocket stream, historical outright odds or odds movements for outrights yet.
> * Results appear only after the final result is confirmed, which can take several hours after the last round.
> * Not every bookmaker offers every market, and coverage can differ by tour.

## Next Steps

> [card] [Fetching Odds](https://docs.odds-api.io/guides/fetching-odds.md)
>
> Bookmaker selection and odds formats shared with outrights

> [card] [Bet Settlement](https://docs.odds-api.io/guides/settlement.md)
>
> Settle match bets from final results


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.