# RapidAPI · odds-feed (Odds Feed, tipsters)

Gateway provider `rapidapi-odds-feed` · call `https://fetchapi.co/api/gw/rapidapi-odds-feed/<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/tipsters/api/odds-feed/pricing

Upstream plan: Pro: $20/month for 5,000 requests; free tier: Basic: 500 requests/month, hard limit, 1,000 requests/hour (https://rapidapi.com/tipsters/api/odds-feed/pricing).

11 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-feed.categories_list` — Categories list

`GET /api/v1/categories` · ✓ working (tested 2026-10-28) · sampled 2026-10-22, 212 ms

Every country / region Odds Feed groups tournaments under, with its id and two-letter code. 1 request.

Fields: `[].id` category_id for events and tournaments; `[].code` country code (null for regions like Europe, World)

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

Real answer (trimmed):

```json
[
 {
  "id": 1,
  "code": null,
  "name": "Africa",
  "slug": "africa"
 },
 {
  "id": 2,
  "code": "al",
  "name": "Albania",
  "slug": "albania"
 },
 {
  "id": 3,
  "code": "dz",
  "name": "Algeria",
  "slug": "algeria"
 },
 "… 188 more"
]
```

## `rapidapi-odds-feed.event_markets` — Event Markets

`GET /api/v1/events/markets` · ✓ working (tested 2026-10-29) · sampled 2026-10-22, 227 ms

Every market of one game with one market book per bookmaker: moneyline / 1X2, each Asian handicap and total line, both teams to score, pre-game and in-play (119 markets, 10 books for an NBA game on 2026-10-22). outcome_0/1/2 are home / draw / away, home / away, or over / under; volume is Pinnacle's stake limit or Betfair's matched money. 1 request.

| param | required | example / default |
|---|---|---|
| `market_name` | no | HOME_AWAY |
| `period` | no | FULL_TIME_AND_OT |
| `placing` | no | PREMATCH |
| `bet_type` | no | BACK |
| `event_id` | yes | 722591 |

Fields: `data[].value` the line: home handicap or total; `data[].market_books[].market_book_id` id of that book's line, for /markets/history; `data[].market_books[].book` PINNACLE, BETFAIR_EXCH, BET365, 1XBET...

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/events/markets?period=FULL_TIME_AND_OT&placing=PREMATCH&bet_type=BACK&event_id=722591&market_name=HOME_AWAY" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 56397910,
   "value": null,
   "period": "FULL_TIME_AND_OT",
   "placing": "PREMATCH",
   "bet_type": "BACK",
   "event_id": 722591,
   "value_type": null,
   "market_name": "HOME_AWAY",
   "market_books": [
    {
     "book": "UNIBET",
     "is_open": true,
     "volume_0": null,
     "volume_1": null,
     "volume_2": null,
     "market_id": 56397910,
     "outcome_0": 1.68,
     "outcome_1": 2.23,
     "outcome_2": null,
     "refresh_at": "2026-10-22T19:16:38.525506",
     "market_book_id": 111858455
    },
    {
     "book": "PINNACLE",
     "is_open": true,
     "volume_0": 12000,
     "volume_1": 12000,
     "volume_2": null,
     "market_id": 56397910,
     "outcome_0": 1.75,
     "outcome_1": 2.23,
     "outcome_2": null,
     "refresh_at": "2026-10-22T19:16:33.306570",
     "market_book_id": 113003543
    },
    {
     "book": "888_SPORT",
     "is_open": true,
     "volume_0": null,
     "volume_1": null,
     "volume_2": null,
     "market_id": 56397910,
     "outcome_0": 1.7,
     "outcome_1": 2.15,
     "outcome_2": null,
     "refresh_at": "2026-10-22T15:49:03.025407",
     "market_book_id": 111858450
    },
    "… 7 more"
   ]
  }
 ]
}
```

## `rapidapi-odds-feed.events_list` — Events list

`GET /api/v1/events` · ✓ working (tested 2026-10-29) · sampled 2026-10-22, 263 ms

Games filtered by sport, country, tournament, season, team, status or start time (100 a page), each with teams, status, live minute, score and Pinnacle's main line: main_outcome_0/1/2 are home / draw / away (home / away for two-way sports) and main_volume its stake limit, plus the Pinnacle event id. 1 request.

| param | required | example / default |
|---|---|---|
| `event_ids` | no | 722591 |
| `team_away` | no |  |
| `category_id` | no |  |
| `start_at_min` | no |  |
| `team_home` | no |  |
| `status` | no | SCHEDULED |
| `season_id` | no |  |
| `start_at_max` | no |  |
| `tournament_id` | no | 9538 |
| `page` | no | 0 |
| `sport_id` | no |  |

Fields: `data[].id` event_id for /events/markets; `data[].main_outcome_0` Pinnacle decimal odds, home; `data[].main_volume_1` Pinnacle stake limit; `data[].comments` live minute, e.g. 70`

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/events?page=0&status=SCHEDULED&event_ids=722591&tournament_id=9538" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 722591,
   "sport": {
    "id": 3,
    "name": "Basketball",
    "slug": "basketball"
   },
   "season": {
    "id": 30738,
    "slug": "2026-2027",
    "year_end": 2027,
    "year_start": 2026
   },
   "status": "SCHEDULED",
   "winner": null,
   "category": {
    "id": 164,
    "code": "us",
    "name": "USA",
    "slug": "usa"
   },
   "comments": null,
   "start_at": "2026-10-22 23:00:00",
   "team_away": {
    "id": 93819,
    "name": "Cleveland Cavaliers",
    "slug": "basketball-cleveland-cavaliers",
    "team_type": "TEAM"
   },
   "team_home": {
    "id": 98587,
    "name": "Philadelphia 76ers",
    "slug": "basketball-philadelphia-76ers",
    "team_type": "TEAM"
   },
   "score_away": null,
   "score_home": null,
   "tournament": {
    "id": 9538,
    "name": "NBA",
    "slug": "basketball-usa-nba"
   },
   "pin_event_id": 1637472395,
   "main_volume_1": 12000,
   "main_volume_2": null,
   "score_details": null,
   "main_outcome_0": 1.75,
   "main_outcome_1": 2.23,
   "main_outcome_2": null,
   "status_details": null,
   "final_result_only": false
  }
 ],
 "total": 1,
 "per_page": 100,
 "last_page": 0,
 "current_page": 0
}
```

## `rapidapi-odds-feed.markets_books` — Markets books

`GET /api/v1/markets/markets-books` · ✓ working (tested 2026-10-30) · sampled 2026-10-22, 200 ms

Bookmaker lines (market books) by id, by market, or everything refreshed since a time, 150 a page with a next_id cursor. 1 request.

| param | required | example / default |
|---|---|---|
| `market_ids` | no | 56397910 |
| `market_book_ids` | no | 113003543 |
| `next_id` | no |  |
| `refresh_at_min` | no |  |

Fields: `data[].outcome_0` decimal odds, first outcome; `data[].refresh_at` when Odds Feed last read it

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/markets/markets-books?market_ids=56397910&market_book_ids=113003543" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "book": "PINNACLE",
   "is_open": true,
   "volume_0": 12000,
   "volume_1": 12000,
   "volume_2": null,
   "market_id": 56397910,
   "outcome_0": 1.75,
   "outcome_1": 2.23,
   "outcome_2": null,
   "refresh_at": "2026-10-22T19:16:33.306570",
   "market_book_id": 113003543
  }
 ],
 "next_id": 113003543
}
```

## `rapidapi-odds-feed.markets_drops` — Markets drops

`GET /api/v1/markets/drops` · ✓ working (tested 2026-10-30) · sampled 2026-10-22, 338 ms

Big price drops: one line's odds before and after, the drop in percent, the volume and the game, filtered by sport, game, line, minimum drop and time; 50 a page from the start of the window with a next_id cursor. 1 request a page.

| param | required | example / default |
|---|---|---|
| `prec_drop_min` | no | 8 |
| `created_at_min` | no |  |
| `next_id` | no |  |
| `market_book_id` | no |  |
| `sport_id` | no |  |
| `event_id` | no |  |

Fields: `data[].value_old` odds before; `data[].value_new` odds after; `data[].prec_drop` drop in percent

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/markets/drops?prec_drop_min=8" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 2279038,
   "event": {
    "id": 722547,
    "sport": {
     "id": 3,
     "name": "Basketball",
     "slug": "basketball"
    },
    "season": {
     "id": 30857,
     "slug": "2026-2027",
     "year_end": 2027,
     "year_start": 2026
    },
    "status": "FINISHED",
    "winner": "HOME_WIN",
    "category": {
     "id": 55,
     "code": "fi",
     "name": "Finland",
     "slug": "finland"
    },
    "comments": null,
    "start_at": "2026-10-22 16:00:00",
    "team_away": {
     "id": 148841,
     "name": "Huima",
     "slug": "basketball-huima",
     "team_type": "TEAM"
    },
    "team_home": {
     "id": 717057,
     "name": "Pyrinto Akatemia",
     "slug": "basketball-pyrinto-akatemia",
     "team_type": "TEAM"
    },
    "score_away": 75,
    "score_home": 85,
    "tournament": {
     "id": 9347,
     "name": "I Divisioona A",
     "slug": "basketball-finland-i-divisioona-a"
    },
    "pin_event_id": 1638461184,
    "main_volume_1": null,
    "main_volume_2": null,
    "score_details": "(47:41, 38:34)",
    "main_outcome_0": null,
    "main_outcome_1": null,
    "main_outcome_2": null,
    "status_details": null,
    "final_result_only": false
   },
   "volume": 150,
   "event_id": 722547,
   "sport_id": 3,
   "prec_drop": 8.59,
   "value_new": 1.81,
   "value_old": 1.98,
   "created_at": "2026-10-22T13:33:21",
   "market_book": {
    "book": "PINNACLE",
    "is_open": false,
    "volume_0": 200,
    "volume_1": 200,
    "volume_2": null,
  
…
```

## `rapidapi-odds-feed.markets_feed` — Markets feed

`GET /api/v1/markets/feed` · ✓ working (tested 2026-10-31) · sampled 2026-10-22, 223 ms

Markets with their bookmaker lines for up to 50 games at once, filtered by market name, period, placing and back / lay, 50 markets a page. 1 request a page.

| param | required | example / default |
|---|---|---|
| `bet_type` | no | BACK |
| `market_name` | no | HOME_AWAY |
| `period` | no | FULL_TIME_AND_OT |
| `page` | no | 0 |
| `placing` | no | PREMATCH |
| `event_ids` | yes | 722591 |

Fields: `data[].event_id` the game; `data[].market_books[]` one line per bookmaker

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/markets/feed?page=0&period=FULL_TIME_AND_OT&placing=PREMATCH&bet_type=BACK&event_ids=722591&market_name=HOME_AWAY" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 56397910,
   "value": null,
   "period": "FULL_TIME_AND_OT",
   "placing": "PREMATCH",
   "bet_type": "BACK",
   "event_id": 722591,
   "value_type": null,
   "market_name": "HOME_AWAY",
   "market_books": [
    {
     "book": "UNIBET",
     "is_open": true,
     "volume_0": null,
     "volume_1": null,
     "volume_2": null,
     "market_id": 56397910,
     "outcome_0": 1.68,
     "outcome_1": 2.23,
     "outcome_2": null,
     "refresh_at": "2026-10-22T19:16:38.525506",
     "market_book_id": 111858455
    },
    {
     "book": "PINNACLE",
     "is_open": true,
     "volume_0": 12000,
     "volume_1": 12000,
     "volume_2": null,
     "market_id": 56397910,
     "outcome_0": 1.75,
     "outcome_1": 2.23,
     "outcome_2": null,
     "refresh_at": "2026-10-22T19:16:33.306570",
     "market_book_id": 113003543
    },
    {
     "book": "888_SPORT",
     "is_open": true,
     "volume_0": null,
     "volume_1": null,
     "volume_2": null,
     "market_id": 56397910,
     "outcome_0": 1.7,
     "outcome_1": 2.15,
     "outcome_2": null,
     "refresh_at": "2026-10-22T15:49:03.025407",
     "market_book_id": 111858450
    },
    "… 7 more"
   ]
  }
 ],
 "total": 1,
 "per_page": 50,
 "last_page": 0,
 "current_page": 0
}
```

## `rapidapi-odds-feed.markets_history` — Markets history

`GET /api/v1/markets/history` · ✓ working (tested 2026-10-31) · sampled 2026-10-22, 241 ms

Every change of one bookmaker line, oldest first, with only the fields that changed at each step (44 changes over two days for Pinnacle's PHI-CLE moneyline). 1 request.

| param | required | example / default |
|---|---|---|
| `market_book_id` | yes | 113003543 |

Fields: `data[].change_at` when the price changed (UTC); `data[].volume_0` stake limit at that point

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/markets/history?market_book_id=113003543" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "is_open": true,
   "volume_0": 180,
   "volume_1": 180,
   "volume_2": null,
   "change_at": "2026-10-21 06:24:28",
   "outcome_0": 1.79,
   "outcome_1": 2.12,
   "outcome_2": null,
   "market_book_id": 113003543
  },
  {
   "is_open": true,
   "volume_0": 180,
   "volume_1": 180,
   "volume_2": null,
   "change_at": "2026-10-21 15:14:29",
   "outcome_0": 1.78,
   "outcome_1": 2.14,
   "outcome_2": null,
   "market_book_id": 113003543
  },
  {
   "is_open": true,
   "volume_0": 180,
   "volume_1": 180,
   "volume_2": null,
   "change_at": "2026-10-21 15:15:39",
   "outcome_0": 1.8,
   "outcome_1": 2.11,
   "outcome_2": null,
   "market_book_id": 113003543
  },
  "… 44 more"
 ]
}
```

## `rapidapi-odds-feed.markets_list` — Markets list

`GET /api/v1/markets` · ✓ working (tested 2026-11-01) · sampled 2026-10-22, 220 ms

Markets (without their bookmaker lines) of some games or ids, 50 a page with a next_id cursor. 1 request.

| param | required | example / default |
|---|---|---|
| `bet_type` | no | BACK |
| `market_ids` | no | 56397910 |
| `next_id` | no |  |
| `market_name` | no | HOME_AWAY |
| `event_ids` | no | 722591 |
| `placing` | no | PREMATCH |
| `period` | no | FULL_TIME_AND_OT |

Fields: `next_id` cursor for the next page

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/markets?period=FULL_TIME_AND_OT&placing=PREMATCH&bet_type=BACK&event_ids=722591&market_ids=56397910&market_name=HOME_AWAY" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 56397910,
   "value": null,
   "period": "FULL_TIME_AND_OT",
   "placing": "PREMATCH",
   "bet_type": "BACK",
   "event_id": 722591,
   "value_type": null,
   "market_name": "HOME_AWAY"
  }
 ],
 "next_id": 56397910
}
```

## `rapidapi-odds-feed.seasons_list` — Seasons list

`GET /api/v1/seasons` · ✓ working (tested 2026-11-01) · sampled 2026-10-22, 261 ms

Seasons (editions) of a tournament or sport, filtered by start year, 500 a page. 1 request.

| param | required | example / default |
|---|---|---|
| `tournament_id` | no | 9538 |
| `year_start` | no | 2026 |
| `page` | no | 0 |
| `sport_id` | no |  |

Fields: `data[].id` season_id for events

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/seasons?page=0&year_start=2026&tournament_id=9538" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 30738,
   "slug": "2026-2027",
   "sport": {
    "id": 3,
    "name": "Basketball",
    "slug": "basketball"
   },
   "year_end": 2027,
   "tournament": {
    "id": 9538,
    "name": "NBA",
    "slug": "basketball-usa-nba"
   },
   "year_start": 2026
  }
 ],
 "total": 1,
 "per_page": 500,
 "last_page": 0,
 "current_page": 0
}
```

## `rapidapi-odds-feed.sports_list` — Sports list

`GET /api/v1/sports` · ✓ working (tested 2026-11-02) · sampled 2026-10-22, 217 ms

The 8 sports Odds Feed covers (football, tennis, basketball, hockey, baseball, volleyball, esports, MMA) with the numeric id used as sport_id everywhere else. 1 request.

Fields: `[].id` sport_id for events, tournaments, drops

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

Real answer (trimmed):

```json
[
 {
  "id": 1,
  "name": "Football",
  "slug": "football"
 },
 {
  "id": 2,
  "name": "Tennis",
  "slug": "tennis"
 },
 {
  "id": 3,
  "name": "Basketball",
  "slug": "basketball"
 },
 "… 5 more"
]
```

## `rapidapi-odds-feed.tournaments_list` — Tournaments list

`GET /api/v1/tournaments` · ✓ working (tested 2026-11-02) · sampled 2026-10-22, 250 ms

Tournaments (leagues) matching a name, sport or country, 500 a page, each with its sport and country. Names repeat across countries (124 'Premier League's), so pick by slug (football-england-premier-league). 1 request.

| param | required | example / default |
|---|---|---|
| `page` | no | 0 |
| `name` | no | NBA |
| `sport_id` | no | 3 |
| `tournament_ids` | no |  |
| `category_id` | no |  |

Fields: `data[].id` tournament_id for events (9538 = NBA); `data[].slug` sport-country-name, unique

```bash
curl "https://fetchapi.co/api/gw/rapidapi-odds-feed/api/v1/tournaments?name=NBA&page=0&sport_id=3" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "data": [
  {
   "id": 9540,
   "name": "NBA Orlando Summer League",
   "slug": "basketball-usa-nba-orlando-summer-league",
   "sport": {
    "id": 3,
    "name": "Basketball",
    "slug": "basketball"
   },
   "category": {
    "id": 164,
    "code": "us",
    "name": "USA",
    "slug": "usa"
   }
  },
  {
   "id": 9538,
   "name": "NBA",
   "slug": "basketball-usa-nba",
   "sport": {
    "id": 3,
    "name": "Basketball",
    "slug": "basketball"
   },
   "category": {
    "id": 164,
    "code": "us",
    "name": "USA",
    "slug": "usa"
   }
  },
  {
   "id": 9539,
   "name": "NBA In-Season Tournament",
   "slug": "basketball-usa-nba-in-season-tournament",
   "sport": {
    "id": 3,
    "name": "Basketball",
    "slug": "basketball"
   },
   "category": {
    "id": 164,
    "code": "us",
    "name": "USA",
    "slug": "usa"
   }
  },
  "… 12 more"
 ],
 "total": 15,
 "per_page": 500,
 "last_page": 0,
 "current_page": 0
}
```
