# RapidAPI · odds-api1 (OddsPapi)

Gateway provider `rapidapi-odds-api1` · call `https://fetchapi.co/api/gw/rapidapi-odds-api1/<path>` with header `x-api-key` (get a key at https://fetchapi.co/keys) · MCP: tools `search_endpoints`, `get_endpoint`, `call_endpoint` at https://fetchapi.co/api/mcp · listing: https://rapidapi.com/odds-papi-odds-papi-default/api/odds-api1/pricing

Upstream plan: Pro: $19/month for 10,000 requests; free tier: Basic: 250 requests/month, hard limit, 1,000 requests/hour (https://rapidapi.com/odds-papi-odds-papi-default/api/odds-api1/pricing).

17 working endpoints, each tested live through this gateway. Endpoints that returned no data in our latest test, write actions and endpoints that need the end user's own login are not listed.

## `rapidapi-odds-api1.fixtures_filtered` — Fixtures Filtered

`GET /fixtures` · ✓ working (tested 2026-10-31) · sampled 2026-10-22, 135 ms

Games filtered by tournament, sport, fixture ids, status or a start-time window (startTimeFrom / startTimeTo in epoch seconds): fixtureId, status, tournament, season, venue, start time, the two participants (participant1 is home), scores by period when played, and the game's ids at Betradar, Betgenius, Sofascore, Flashscore, Pinnacle and OpticOdds. 1 request.

| param | required | example / default |
|---|---|---|
| `startTimeTo` | no |  |
| `fixtureIds` | no |  |
| `bookmakers` | no |  |
| `startTimeFrom` | no |  |
| `tournamentId` | no | 132 |
| `sportId` | no |  |
| `statusId` | no |  |

Fields: `[].fixtureId` id for the odds calls; `[].startTime` start, epoch seconds UTC; `[].participants.participant1Name` home team; `[].status.statusName` Pre-Game, Live, Finished; `[].scores.result.participant1Score` home score (incl. overtime); `[].externalProviders` the same game's ids at other data providers

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures?tournamentId=132" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "clock": {
   "stopped": null,
   "updatedAt": null,
   "currentTime": null,
   "currentPeriod": null,
   "remainingTime": null,
   "remainingTimeInPeriod": null
  },
  "sport": {
   "sportId": 11,
   "sportName": "Basketball"
  },
  "venue": {
   "venueId": 6068,
   "venueName": "Xfinity Mobile Arena",
   "venueLocation": "Philadelphia, PA, USA"
  },
  "scores": {},
  "season": {
   "seasonId": 142074,
   "seasonName": "NBA 26/27",
   "seasonRound": 1
  },
  "status": {
   "live": false,
   "statusId": 0,
   "statusName": "Pre-Game"
  },
  "fixtureId": "id1100013273682480",
  "startTime": 1792710000,
  "bookmakers": {},
  "tournament": {
   "categoryName": "USA",
   "tournamentId": 132,
   "tournamentName": "NBA"
  },
  "trueEndTime": null,
  "participants": {
   "participant1Id": 3420,
   "participant2Id": 3432,
   "participant1Abbr": "PHI",
   "participant1Name": "Philadelphia 76ers",
   "participant2Abbr": "CLE",
   "participant2Name": "Cleveland Cavaliers",
   "participant1RotNr": 329,
   "participant2RotNr": 328,
   "participant1ShortName": "Philadelphia",
   "participant2ShortName": "Cleveland"
  },
  "periodLength": 12,
  "trueStartTime": null,
  "expectedPeriods": 4,
  "externalProviders": {
   "oddinId": null,
   "txoddsId": null,
   "lsportsId": 19774923,
   "betradarId": 73682480,
   "mollybetId": "2026-10-22,29094,29102",
   "pinnacleId": 1637472395,
   "betgeniusId": 14304084,
   "opticoddsId": "20261022205C4E07",
   "sofascoreId": 16814813,
   "flashscor
…
```

## `rapidapi-odds-api1.fixtures_live` — Fixtures Live

`GET /fixtures/live` · ✓ working (tested 2026-11-01) · sampled 2026-10-22, 82 ms

Games being played now, of one sport or tournament, with the live score by period and the clock. 1 request.

| param | required | example / default |
|---|---|---|
| `tournamentId` | no |  |
| `bookmakers` | no |  |
| `sportId` | no | 10 |

Fields: `[].scores.result` current score; `[].clock` period and time

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures/live?sportId=10" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "clock": {
   "stopped": true,
   "updatedAt": "2026-10-22T18:02:01.703154+00:00",
   "currentTime": "95:09",
   "currentPeriod": "p2",
   "remainingTime": null,
   "remainingTimeInPeriod": null
  },
  "sport": {
   "sportId": 10,
   "sportName": "Soccer"
  },
  "venue": {
   "venueId": 9677,
   "venueName": "Rashid Stadium",
   "venueLocation": "Dubai, United Arab Emirates"
  },
  "scores": {
   "p1": {
    "period": "p1",
    "updatedAt": "2026-10-22T16:56:05.261441+00:00",
    "participant1Score": 2,
    "participant2Score": 1
   },
   "result": {
    "period": "result",
    "updatedAt": "2026-10-22T17:42:43.072992+00:00",
    "participant1Score": 2,
    "participant2Score": 2
   },
   "fulltime": {
    "period": "fulltime",
    "updatedAt": "2026-10-22T18:03:42.260658+00:00",
    "participant1Score": 2,
    "participant2Score": 2
   }
  },
  "season": {
   "seasonId": 146554,
   "seasonName": "Presidents Cup 26/27",
   "seasonRound": null
  },
  "status": {
   "live": true,
   "statusId": 1,
   "statusName": "Live"
  },
  "fixtureId": "id1000251375516408",
  "startTime": 1792684800,
  "bookmakers": {},
  "tournament": {
   "categoryName": "United Arab Emirates",
   "tournamentId": 2513,
   "tournamentName": "Presidents Cup"
  },
  "trueEndTime": null,
  "participants": {
   "participant1Id": 370464,
   "participant2Id": 37082,
   "participant1Abbr": "SAH",
   "participant1Name": "Shabab Al Ahli Dubai",
   "participant2Abbr": "AIN",
   "participant2Name": "Al Ain FC
…
```

## `rapidapi-odds-api1.fixtures_odds` — Fixtures Odds

`GET /fixtures/odds` · ✓ working (tested 2026-11-01) · sampled 2026-10-22, 73 ms

One game's current odds from every bookmaker that prices it (196 bookmakers for an NBA game on 2026-10-22), or only those named: odds[bookmaker][oddsId] with marketId, outcomeId, price in three formats, active flag, mainLine flag, Pinnacle's limit and a bet-slip link. Add mainLine=true (2.7 MB) or name bookmakers: without either the answer carries every line and player prop (40 MB). 1 request.

| param | required | example / default |
|---|---|---|
| `fixtureId` | yes | id1100119575752068 |
| `mainLine` | no |  |
| `since` | no |  |
| `bookmakers` | yes | pinnacle,draftkings,fanduel,bet365,betmgm,caesars |

Fields: `odds.<bookmaker>.<oddsId>.price` decimal odds; `odds.<bookmaker>.<oddsId>.mainLine` the bookmaker's main line for that market; `odds.<bookmaker>.<oddsId>.changedAt` last change, epoch ms; `odds.<bookmaker>.<oddsId>.limit` maximum stake (Pinnacle)

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures/odds?fixtureId=id1100119575752068&bookmakers=pinnacle,draftkings,fanduel,bet365,betmgm,caesars" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "odds": {},
 "clock": {
  "stopped": null,
  "updatedAt": null,
  "currentTime": null,
  "currentPeriod": null,
  "remainingTime": null,
  "remainingTimeInPeriod": null
 },
 "sport": {
  "sportId": 11,
  "sportName": "Basketball"
 },
 "venue": {
  "venueId": null,
  "venueName": null,
  "venueLocation": null
 },
 "scores": {
  "p1": {
   "period": "p1",
   "updatedAt": "2026-10-22T05:13:49.735972+00:00",
   "participant1Score": 20,
   "participant2Score": 25
  },
  "p2": {
   "period": "p2",
   "updatedAt": "2026-10-22T05:34:01.164378+00:00",
   "participant1Score": 22,
   "participant2Score": 16
  },
  "p3": {
   "period": "p3",
   "updatedAt": "2026-10-22T05:53:10.528834+00:00",
   "participant1Score": 11,
   "participant2Score": 27
  },
  "p4": {
   "period": "p4",
   "updatedAt": "2026-10-22T06:13:41.77278+00:00",
   "participant1Score": 16,
   "participant2Score": 14
  },
  "result": {
   "period": "result",
   "updatedAt": "2026-10-22T06:10:36.643683+00:00",
   "participant1Score": 69,
   "participant2Score": 82
  },
  "fulltime": {
   "period": "fulltime",
   "updatedAt": "2026-10-22T06:13:41.791758+00:00",
   "participant1Score": 69,
   "participant2Score": 82
  }
 },
 "season": {
  "seasonId": null,
  "seasonName": null,
  "seasonRound": null
 },
 "status": {
  "live": false,
  "statusId": 2,
  "statusName": "Finished"
 },
 "fixtureId": "id1100119575752068",
 "startTime": 1792645200,
 "bookmakers": {
  "bet365": {
   "meta": null,
   "hasOdds": true,
   "bookmaker
…
```

## `rapidapi-odds-api1.fixtures_odds_clv` — Fixtures Odds CLV

`GET /fixtures/odds/clv` · ✓ working (tested 2026-11-02) · sampled 2026-10-22, 857 ms

Closing-line view of one game for the named bookmakers: the fixture plus the last odds before the start, to measure closing line value. 1 request.

| param | required | example / default |
|---|---|---|
| `fixtureId` | yes | id1100119575752068 |
| `bookmakers` | yes | pinnacle |
| `oddsIds` | no |  |

Fields: `odds.<bookmaker>.<oddsId>.price` closing decimal odds

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures/odds/clv?fixtureId=id1100119575752068&bookmakers=pinnacle" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "odds": {},
 "clock": {
  "stopped": null,
  "updatedAt": null,
  "currentTime": null,
  "currentPeriod": null,
  "remainingTime": null,
  "remainingTimeInPeriod": null
 },
 "sport": {
  "sportId": 11,
  "sportName": "Basketball"
 },
 "venue": {
  "venueId": null,
  "venueName": null,
  "venueLocation": null
 },
 "scores": {
  "p1": {
   "period": "p1",
   "updatedAt": "2026-10-22T05:13:49.735972+00:00",
   "participant1Score": 20,
   "participant2Score": 25
  },
  "p2": {
   "period": "p2",
   "updatedAt": "2026-10-22T05:34:01.164378+00:00",
   "participant1Score": 22,
   "participant2Score": 16
  },
  "p3": {
   "period": "p3",
   "updatedAt": "2026-10-22T05:53:10.528834+00:00",
   "participant1Score": 11,
   "participant2Score": 27
  },
  "p4": {
   "period": "p4",
   "updatedAt": "2026-10-22T06:13:41.77278+00:00",
   "participant1Score": 16,
   "participant2Score": 14
  },
  "result": {
   "period": "result",
   "updatedAt": "2026-10-22T06:10:36.643683+00:00",
   "participant1Score": 69,
   "participant2Score": 82
  },
  "fulltime": {
   "period": "fulltime",
   "updatedAt": "2026-10-22T06:13:41.791758+00:00",
   "participant1Score": 69,
   "participant2Score": 82
  }
 },
 "season": {
  "seasonId": null,
  "seasonName": null,
  "seasonRound": null
 },
 "status": {
  "live": false,
  "statusId": 2,
  "statusName": "Finished"
 },
 "fixtureId": "id1100119575752068",
 "startTime": 1792645200,
 "bookmakers": {},
 "tournament": {
  "categoryName": "International",
  "tournam
…
```

## `rapidapi-odds-api1.fixtures_odds_historical` — Fixtures Odds Historical

`GET /fixtures/odds/historical` · ✓ working (tested 2026-10-25) · sampled 2026-10-22, 639 ms

One bookmaker's full odds timeline for one game: odds[bookmaker][oddsId][changedAt] = the quote at that moment, every line it offered from opening (Pinnacle on an NBA game: 290 lines, ~100 snapshots each, 2.7 MB). Exactly one bookmaker unless oddsIds are named. 1 request.

| param | required | example / default |
|---|---|---|
| `fixtureId` | yes | id1100119575752068 |
| `oddsIds` | no |  |
| `bookmaker` | yes | pinnacle |

Fields: `odds.<bookmaker>.<oddsId>.<changedAt>.price` decimal odds at that time; `odds.<bookmaker>.<oddsId>.<changedAt>.mainLine` was the main line then; `odds.<bookmaker>.<oddsId>.<changedAt>.limit` maximum stake then

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures/odds/historical?bookmaker=pinnacle&fixtureId=id1100119575752068" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "odds": {},
 "clock": {
  "stopped": null,
  "updatedAt": null,
  "currentTime": null,
  "currentPeriod": null,
  "remainingTime": null,
  "remainingTimeInPeriod": null
 },
 "sport": {
  "sportId": 11,
  "sportName": "Basketball"
 },
 "venue": {
  "venueId": null,
  "venueName": null,
  "venueLocation": null
 },
 "scores": {
  "p1": {
   "period": "p1",
   "updatedAt": "2026-10-22T05:13:49.735972+00:00",
   "participant1Score": 20,
   "participant2Score": 25
  },
  "p2": {
   "period": "p2",
   "updatedAt": "2026-10-22T05:34:01.164378+00:00",
   "participant1Score": 22,
   "participant2Score": 16
  },
  "p3": {
   "period": "p3",
   "updatedAt": "2026-10-22T05:53:10.528834+00:00",
   "participant1Score": 11,
   "participant2Score": 27
  },
  "p4": {
   "period": "p4",
   "updatedAt": "2026-10-22T06:13:41.77278+00:00",
   "participant1Score": 16,
   "participant2Score": 14
  },
  "result": {
   "period": "result",
   "updatedAt": "2026-10-22T06:10:36.643683+00:00",
   "participant1Score": 69,
   "participant2Score": 82
  },
  "fulltime": {
   "period": "fulltime",
   "updatedAt": "2026-10-22T06:13:41.791758+00:00",
   "participant1Score": 69,
   "participant2Score": 82
  }
 },
 "season": {
  "seasonId": null,
  "seasonName": null,
  "seasonRound": null
 },
 "status": {
  "live": false,
  "statusId": 2,
  "statusName": "Finished"
 },
 "fixtureId": "id1100119575752068",
 "startTime": 1792645200,
 "bookmakers": {},
 "tournament": {
  "categoryName": "International",
  "tournam
…
```

## `rapidapi-odds-api1.fixtures_odds_main` — Fixtures Odds Main

`GET /fixtures/odds/main` · ✓ working (tested 2026-10-25) · sampled 2026-10-22, 453 ms

Up to 100 upcoming games of one tournament (or named fixtureIds), each with every named bookmaker's main-line odds: odds[bookmaker][oddsId] with marketId, outcomeId, decimal, American and fractional price, and a bet-slip link. Market names come from /markets. 1 request whatever the number of games or bookmakers (NBA, 3 bookmakers: 0.5 MB).

| param | required | example / default |
|---|---|---|
| `fixtureIds` | no |  |
| `bookmakers` | yes | pinnacle,draftkings,fanduel |
| `since` | no |  |
| `tournamentId` | no | 132 |

Fields: `[].odds.<bookmaker>.<oddsId>.price` decimal odds; `[].odds.<bookmaker>.<oddsId>.priceAmerican` American odds; `[].odds.<bookmaker>.<oddsId>.marketId` look up in /markets; `[].bookmakers.<bookmaker>.fixturePath` the game's page at that bookmaker

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures/odds/main?bookmakers=pinnacle,draftkings,fanduel&tournamentId=132" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "preview": "[{\"fixtureId\":\"id1100013273682480\",\"reissuedFixtureId\":null,\"status\":{\"live\":false,\"statusId\":0,\"statusName\":\"Pre-Game\"},\"sport\":{\"sportId\":11,\"sportName\":\"Basketball\"},\"tournament\":{\"tournamentId\":132,\"tournamentName\":\"NBA\",\"categoryName\":\"USA\"},\"season\":{\"seasonId\":142074,\"seasonName\":\"NBA 26/27\",\"seasonRound\":1},\"venue\":{\"venueId\":6068,\"venueName\":\"Xfinity Mobile Arena\",\"venueLocation\":\"Philadelphia, PA, USA\"},\"startTime\":1792710000,\"trueStartTime\":null,\"trueEndTime\":null,\"participants\":{\"participant1Id\":3420,\"participant1RotNr\":329,\"participant1Name\":\"Philadelphia 76ers\",\"participant1ShortName\":\"Philadelphia\",\"participant1Abbr\":\"PHI\",\"participant2Id\":3432,\"participant2RotNr\":328,\"participant2Name\":\"Cleveland Cavaliers\",\"participant2ShortName\":\"Cleveland\",\"participant2Abbr\":\"CLE\"},\"scores\":{},\"clock\":{\"currentPeriod\":null,\"currentTime\":null,\"remainingTime\":null,\"remainingTimeInPeriod\":null,\"stopped\":null,\"updatedAt\":null},\"expectedPeriods\":4,\"periodLength\":12,\"externalProviders\":{\"betgeniusId\":14304084,\"betradarId\":73682480,\"flashscoreId\":\"vqjr83tS\",\"mollybetId\":\"2026-10-22,29094,29102\",\"oddinId\":null,\"opticoddsId\":\"20261022205C4E07\",\"pinnacleId\":1637472395,\"sofascoreId\":16814813,\"lsportsId\":19774923,\"txoddsId\":null},\"odds\":{\"draftkings\":{\"id1100013273682480:draftkings:111108:0\":{\"outcomeId\":111108,\"player
…
```

## `rapidapi-odds-api1.fixtures_today` — Fixtures Today

`GET /fixtures/today` · ✓ working (tested 2026-10-26) · sampled 2026-10-22, 79 ms

Today's games (UTC day) of one sport or tournament, in the same shape as /fixtures, finished ones included. 1 request.

| param | required | example / default |
|---|---|---|
| `bookmakers` | no |  |
| `tournamentId` | no |  |
| `sportId` | no | 11 |

Fields: `[].fixtureId` id for the odds calls; `[].status.statusName` Pre-Game, Live, Finished

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/fixtures/today?sportId=11" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "clock": {
   "stopped": null,
   "updatedAt": null,
   "currentTime": null,
   "currentPeriod": null,
   "remainingTime": null,
   "remainingTimeInPeriod": null
  },
  "sport": {
   "sportId": 11,
   "sportName": "Basketball"
  },
  "venue": {
   "venueId": null,
   "venueName": null,
   "venueLocation": null
  },
  "scores": {
   "p1": {
    "period": "p1",
    "updatedAt": "2026-10-22T05:13:49.735972+00:00",
    "participant1Score": 20,
    "participant2Score": 25
   },
   "p2": {
    "period": "p2",
    "updatedAt": "2026-10-22T05:34:01.164378+00:00",
    "participant1Score": 22,
    "participant2Score": 16
   },
   "p3": {
    "period": "p3",
    "updatedAt": "2026-10-22T05:53:10.528834+00:00",
    "participant1Score": 11,
    "participant2Score": 27
   },
   "p4": {
    "period": "p4",
    "updatedAt": "2026-10-22T06:13:41.77278+00:00",
    "participant1Score": 16,
    "participant2Score": 14
   },
   "result": {
    "period": "result",
    "updatedAt": "2026-10-22T06:10:36.643683+00:00",
    "participant1Score": 69,
    "participant2Score": 82
   },
   "fulltime": {
    "period": "fulltime",
    "updatedAt": "2026-10-22T06:13:41.791758+00:00",
    "participant1Score": 69,
    "participant2Score": 82
   }
  },
  "season": {
   "seasonId": null,
   "seasonName": null,
   "seasonRound": null
  },
  "status": {
   "live": false,
   "statusId": 2,
   "statusName": "Finished"
  },
  "fixtureId": "id1100119575752068",
  "startTime": 1792645200,
  "bookmakers": {},
  "t
…
```

## `rapidapi-odds-api1.futures_filtered` — Futures Filtered

`GET /futures` · ✓ working (tested 2026-10-26) · sampled 2026-10-22, 233 ms

Futures (outright) markets filtered by sport, tournament, status or time: futureId, tournament, season, start and end, and which bookmakers price it. 1 request.

| param | required | example / default |
|---|---|---|
| `statusId` | no |  |
| `startTimeTo` | no |  |
| `sportId` | no | 11 |
| `startTimeFrom` | no |  |
| `bookmakers` | no |  |
| `tournamentId` | no |  |
| `futureIds` | no |  |

Fields: `[].futureId` id for /futures/odds; `[].endTime` when it settles, epoch seconds

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/futures?sportId=11" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "sport": {
   "sportId": 11,
   "sportName": "Basketball"
  },
  "market": {
   "marketId": 1,
   "marketName": null,
   "marketType": null
  },
  "season": {
   "seasonId": 5417,
   "seasonName": "Lega Due 12/13"
  },
  "status": {
   "live": false,
   "statusId": 0,
   "statusName": "Pre-Game"
  },
  "endTime": 1371945599,
  "futureId": "id1100055554171",
  "startTime": 1349395200,
  "bookmakers": {},
  "tournament": {
   "categoryName": "Italy",
   "tournamentId": 555,
   "tournamentName": "Lega Due"
  },
  "participants": [],
  "reissuedFutureId": null,
  "externalProviders": {
   "kalshiId": null,
   "betradarId": 5417,
   "opticoddsId": null,
   "sofascoreId": null,
   "flashscoreId": null,
   "polymarketId": null
  }
 },
 {
  "sport": {
   "sportId": 11,
   "sportName": "Basketball"
  },
  "market": {
   "marketId": 1,
   "marketName": null,
   "marketType": null
  },
  "season": {
   "seasonId": 9318,
   "seasonName": "Superleague 14/15"
  },
  "status": {
   "live": false,
   "statusId": 0,
   "statusName": "Pre-Game"
  },
  "endTime": 1432598399,
  "futureId": "id1100152893181",
  "startTime": 1412380800,
  "bookmakers": {},
  "tournament": {
   "categoryName": "Ukraine",
   "tournamentId": 1528,
   "tournamentName": "Superleague"
  },
  "participants": [],
  "reissuedFutureId": null,
  "externalProviders": {
   "kalshiId": null,
   "betradarId": 9318,
   "opticoddsId": null,
   "sofascoreId": null,
   "flashscoreId": null,
   "polymarketId": null
  }
 },
 {

…
```

## `rapidapi-odds-api1.futures_live` — Futures Live

`GET /futures/live` · ✓ working (tested 2026-10-27) · sampled 2026-10-22, 236 ms

Futures markets open now for one sport or tournament (162 for basketball on 2026-10-22), same shape as /futures. 1 request.

| param | required | example / default |
|---|---|---|
| `bookmakers` | no |  |
| `sportId` | no | 11 |
| `tournamentId` | no |  |

Fields: `[].futureId` id for /futures/odds

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/futures/live?sportId=11" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "sport": {
   "sportId": 11,
   "sportName": "Basketball"
  },
  "market": {
   "marketId": 1,
   "marketName": null,
   "marketType": null
  },
  "season": {
   "seasonId": 109975,
   "seasonName": "World Cup Qualification, Europe 2025"
  },
  "status": {
   "live": true,
   "statusId": 1,
   "statusName": "Live"
  },
  "endTime": 1803945599,
  "futureId": "id110168821099751",
  "startTime": 1708560000,
  "bookmakers": {},
  "tournament": {
   "categoryName": "International",
   "tournamentId": 16882,
   "tournamentName": "World Cup Qualification, Europe"
  },
  "participants": [],
  "reissuedFutureId": null,
  "externalProviders": {
   "kalshiId": null,
   "betradarId": 109975,
   "opticoddsId": null,
   "sofascoreId": null,
   "flashscoreId": null,
   "polymarketId": null
  }
 },
 {
  "sport": {
   "sportId": 11,
   "sportName": "Basketball"
  },
  "market": {
   "marketId": 1,
   "marketName": null,
   "marketType": null
  },
  "season": {
   "seasonId": 120795,
   "seasonName": "World Cup Qualification, Americas 2026"
  },
  "status": {
   "live": true,
   "statusId": 1,
   "statusName": "Live"
  },
  "endTime": 1803859199,
  "futureId": "id110173241207951",
  "startTime": 1720569600,
  "bookmakers": {},
  "tournament": {
   "categoryName": "International",
   "tournamentId": 17324,
   "tournamentName": "World Cup Qualification, Americas"
  },
  "participants": [],
  "reissuedFutureId": null,
  "externalProviders": {
   "kalshiId": null,
   "betradarId": 120795,
 
…
```

## `rapidapi-odds-api1.get_bookmakers` — Get Bookmakers

`GET /bookmakers` · ✓ working (tested 2026-10-27) · sampled 2026-10-22, 144 ms

The bookmakers OddsPapi reads (366 on 2026-10-22): slug, name, the countries it serves, the sports it has, whether it has player props, its feed delay and when it last had odds. Without bookmakers= every bookmaker is listed. 1 request.

| param | required | example / default |
|---|---|---|
| `bookmakers` | no | pinnacle,draftkings,fanduel,bet365 |
| `playerProps` | no |  |

Fields: `[].slug` bookmaker key for the odds calls (pinnacle, draftkings, bet365, betfair-ex); `[].availableCountries` country codes it serves (usa, gb, de...); `[].availableSports` sportIds it has odds for; `[].lastOddsAt` when it last had odds

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/bookmakers?bookmakers=pinnacle,draftkings,fanduel,bet365" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "slug": "bet365",
  "price": 30,
  "active": true,
  "domain": "https://bet365.com",
  "lastOddsAt": "2026-10-22T18:05:50+00:00",
  "playerProps": true,
  "serverGroup": "de2",
  "bookmakerName": "bet365",
  "websocketLive": false,
  "staleOddsSince": "2026-10-22T06:01:41.012864+00:00",
  "availableSports": "[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,31,49,61]",
  "websocketPregame": true,
  "maxDelayLiveInSec": 5,
  "staleThresholdSec": "240",
  "availableCountries": [
   "gb",
   "br",
   "usa",
   "… 2 more"
  ],
  "maxDelayPregameInSec": 60,
  "maxDelayPregameMainInSec": 8
 },
 {
  "slug": "draftkings",
  "price": 20,
  "active": true,
  "domain": "https://draftkings.com",
  "lastOddsAt": "2026-10-22T18:05:50+00:00",
  "playerProps": true,
  "serverGroup": "at2",
  "bookmakerName": "Draftkings",
  "websocketLive": true,
  "staleOddsSince": "2026-10-18T08:28:21.993951+00:00",
  "availableSports": "[10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,27]",
  "websocketPregame": true,
  "maxDelayLiveInSec": 0.22,
  "staleThresholdSec": "240",
  "availableCountries": [
   "usa"
  ],
  "maxDelayPregameInSec": 0.26,
  "maxDelayPregameMainInSec": 0.23
 },
 {
  "slug": "fanduel",
  "price": 30,
  "active": true,
  "domain": "https://sportsbook.fanduel.com",
  "lastOddsAt": "2026-10-22T14:22:20+00:00",
  "playerProps": true,
  "serverGroup": "at2",
  "bookmakerName": "FanDuel",
  "websocketLive": true,
  "staleOddsSince": "2026-10-18T08:34:57.922507+00:00",
  "availabl
…
```

## `rapidapi-odds-api1.get_currencies` — Get Currencies

`GET /currencies` · ✓ working (tested 2026-10-28) · sampled 2026-10-22, 237 ms

Exchange rates OddsPapi uses (fiat and crypto) against USD, with when each was updated. 1 request.

| param | required | example / default |
|---|---|---|
| `currency` | no |  |

Fields: `[].currency` currency code; `[].currencyValue` units per 1 USD

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/currencies" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "currency": "AAVE",
  "updatedAt": "2026-10-22T18:08:01+00:00",
  "currencyValue": 0.00692042
 },
 {
  "currency": "ADA",
  "updatedAt": "2026-10-22T18:07:00+00:00",
  "currencyValue": 4.72864891
 },
 {
  "currency": "AED",
  "updatedAt": "2026-10-22T18:00:00+00:00",
  "currencyValue": 3.673
 },
 "… 143 more"
]
```

## `rapidapi-odds-api1.get_markets` — Get Markets

`GET /markets` · ✓ working (tested 2026-10-28) · sampled 2026-10-22, 97 ms

Market definitions: odds answers key prices by marketId and outcomeId only, and this names them. Each market has its type (moneyline, 1x2, spreads, totals, teamtotals...), handicap or total line, period (result = incl. overtime, fulltime = regulation, p1+p2 = first half...), whether it is a player prop, and its outcomes (1, 2, X, Over, Under). Ask by marketIds (small) or a whole sportId (basketball: 4,902 markets, 1.6 MB). 1 request.

| param | required | example / default |
|---|---|---|
| `marketIds` | no | 111,11446,11280 |
| `outcomeIds` | no |  |
| `sportId` | no |  |

Fields: `[].marketType` moneyline, 1x2, spreads, totals...; `[].handicap` the spread (for outcome 1) or the total line; `[].period` result (incl. overtime), fulltime, p1, p1+p2...; `[].outcomes[].outcomeName` 1 = participant1 (home), 2 = participant2, X = draw, Over / Under

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/markets?marketIds=111,11446,11280" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "period": "result",
  "sportId": 11,
  "handicap": 0,
  "marketId": 111,
  "outcomes": [
   {
    "outcomeId": 111,
    "outcomeName": "1"
   },
   {
    "outcomeId": 112,
    "outcomeName": "2"
   }
  ],
  "marketName": "Winner (incl. overtime)",
  "marketType": "moneyline",
  "playerProp": false,
  "marketLength": 2,
  "marketNameShort": "Winner"
 },
 {
  "period": "result",
  "sportId": 11,
  "handicap": -2.5,
  "marketId": 11446,
  "outcomes": [
   {
    "outcomeId": 11446,
    "outcomeName": "1"
   },
   {
    "outcomeId": 11447,
    "outcomeName": "2"
   }
  ],
  "marketName": "Handicap (incl. overtime)",
  "marketType": "spreads",
  "playerProp": false,
  "marketLength": 2,
  "marketNameShort": "Spread"
 },
 {
  "period": "result",
  "sportId": 11,
  "handicap": 237.5,
  "marketId": 11280,
  "outcomes": [
   {
    "outcomeId": 11280,
    "outcomeName": "Over"
   },
   {
    "outcomeId": 11281,
    "outcomeName": "Under"
   }
  ],
  "marketName": "Over Under (incl. overtime)",
  "marketType": "totals",
  "playerProp": false,
  "marketLength": 2,
  "marketNameShort": "Total"
 }
]
```

## `rapidapi-odds-api1.get_participants` — Get Participants

`GET /participants` · ✓ working (tested 2026-10-29) · sampled 2026-10-22, 1298 ms

The teams or players of one sport: participantId, name, short name and abbreviation. 1 request.

| param | required | example / default |
|---|---|---|
| `participantIds` | no |  |
| `playerId` | no |  |
| `sportId` | no | 11 |

Fields: `[].participantId` team id (fixtures use it as participant1Id / participant2Id); `[].name` team name

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/participants?sportId=11" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "name": "Chicago Bulls",
  "sportId": 11,
  "participantId": 3409,
  "participantAbbr": "CHI",
  "participantShortName": "Chicago"
 },
 {
  "name": "Milwaukee Bucks",
  "sportId": 11,
  "participantId": 3410,
  "participantAbbr": "MIL",
  "participantShortName": "Milwaukee"
 },
 {
  "name": "Dallas Mavericks",
  "sportId": 11,
  "participantId": 3411,
  "participantAbbr": "DAL",
  "participantShortName": "Dallas"
 },
 "… 6404 more"
]
```

## `rapidapi-odds-api1.get_players` — Get Players

`GET /players` · ✓ working (tested 2026-10-29) · sampled 2026-10-22, 283 ms

The players of one team (participantId) or named playerIds: id and name, as used by player-prop odds. 1 request.

| param | required | example / default |
|---|---|---|
| `playerIds` | no |  |
| `sportId` | no |  |
| `participantId` | no | 3420 |

Fields: `[].playerId` player id in player-prop odds; `[].playerName` Last, First

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/players?participantId=3420" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "playerId": 607528,
  "playerName": "Embiid, Joel"
 },
 {
  "playerId": 607548,
  "playerName": "Gordon, Eric"
 },
 {
  "playerId": 607620,
  "playerName": "Drummond, Andre"
 },
 "… 63 more"
]
```

## `rapidapi-odds-api1.get_seasons` — Get Seasons

`GET /seasons` · ✓ working (tested 2026-10-30) · sampled 2026-10-22, 259 ms

Every season of one tournament, oldest first (NBA from 04/05): seasonId, slug and name. 1 request.

| param | required | example / default |
|---|---|---|
| `tournamentId` | no | 132 |
| `seasonIds` | no |  |

Fields: `[].seasonId` season id; `[].seasonName` e.g. NBA 26/27

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/seasons?tournamentId=132" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "sportId": 11,
  "seasonId": 519,
  "seasonName": "NBA 04/05",
  "seasonSlug": "nba-04-05",
  "tournamentId": 132
 },
 {
  "sportId": 11,
  "seasonId": 520,
  "seasonName": "NBA 05/06",
  "seasonSlug": "nba-05-06",
  "tournamentId": 132
 },
 {
  "sportId": 11,
  "seasonId": 521,
  "seasonName": "NBA 06/07",
  "seasonSlug": "nba-06-07",
  "tournamentId": 132
 },
 "… 78 more"
]
```

## `rapidapi-odds-api1.get_sports` — Get Sports

`GET /sports` · ✓ working (tested 2026-10-30) · sampled 2026-10-22, 75 ms

Every sport OddsPapi covers (60+), one row each: its numeric sportId (10 soccer, 11 basketball, 14 American football...), slug and name. The sportId filters tournaments, fixtures, markets and participants. Counts 1 request on RapidAPI.

| param | required | example / default |
|---|---|---|
| `sportIds` | no |  |

Fields: `[].sportId` the id other calls filter by; `[].slug` e.g. american-football, ice-hockey

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/sports" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "slug": "soccer",
  "sportId": 10,
  "sportName": "Soccer"
 },
 {
  "slug": "basketball",
  "sportId": 11,
  "sportName": "Basketball"
 },
 {
  "slug": "tennis",
  "sportId": 12,
  "sportName": "Tennis"
 },
 "… 56 more"
]
```

## `rapidapi-odds-api1.get_tournaments` — Get Tournaments

`GET /tournaments` · ✓ working (tested 2026-10-31) · sampled 2026-10-22, 223 ms

The leagues and tournaments of one sport (sportId) or of named tournamentIds: id, slug, name and country/category (American football: NFL is 31; basketball: NBA is 132). The tournamentId is what fixtures and odds-by-tournament take. 1 request.

| param | required | example / default |
|---|---|---|
| `tournamentIds` | no |  |
| `sportId` | no | 14 |

Fields: `[].tournamentId` id for /fixtures and /fixtures/odds/main; `[].tournamentSlug` e.g. nfl, premier-league; `[].categoryName` country or region (USA, England, International)

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-api1/tournaments?sportId=14" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
[
 {
  "sportId": 14,
  "categoryName": "USA",
  "categorySlug": "usa",
  "tournamentId": 31,
  "tournamentName": "NFL",
  "tournamentSlug": "nfl"
 },
 {
  "sportId": 14,
  "categoryName": "USA",
  "categorySlug": "usa",
  "tournamentId": 233,
  "tournamentName": "NFL Preseason",
  "tournamentSlug": "nfl-preseason"
 },
 {
  "sportId": 14,
  "categoryName": "Europe",
  "categorySlug": "europe",
  "tournamentId": 458,
  "tournamentName": "NFL Europe",
  "tournamentSlug": "nfl-europe"
 },
 "… 32 more"
]
```
