# RapidAPI · pinbook-odds (tipsters)

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

Upstream plan: Pro: $15/month for 5,000 requests; free tier: Basic: $0, 550 requests/month hard limit, 1,000 req/h (https://rapidapi.com/tipsters/api/pinbook-odds/pricing).

8 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-pinbook-odds.betting_status` — Betting status

`GET /kit/v1/betting-status` · ✓ working (tested 2026-10-31) · sampled 2026-10-22, 232 ms

Whether the Pinnacle feed is up: status OK and the server time. 1 request.

Fields: `status` OK when Pinnacle is online; `time` server time, unix seconds

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/betting-status" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "time": 1792695237,
 "status": "OK"
}
```

## `rapidapi-pinbook-odds.event_details` — Event Details

`GET /kit/v1/details` · ✓ working (tested 2026-10-31) · sampled 2026-10-22, 353 ms

One Pinnacle event with every period's full price history: for the moneyline, each spread and each total, every change as [unix time, decimal price, max stake] from opening to the close (134 moneyline moves for one NBA game), plus settled scores. The last change before the cutoff is the closing line. 1 request.

| param | required | example / default |
|---|---|---|
| `event_id` | yes | 1633801640 |

Fields: `events[].periods.num_0.history.moneyline.home` [time, price, max bet] changes for the home moneyline; `events[].periods.num_0.history.spreads` history by home handicap; `events[].periods.num_0.history.totals` history by total points: over, under; `events[].periods.num_0.cutoff` betting cutoff, UTC; `events[].period_results[]` settled scores

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/details?event_id=1633801640" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "events": [
  {
   "away": "Oklahoma City Thunder",
   "home": "San Antonio Spurs",
   "last": 1792632166,
   "starts": "2026-10-21T01:50:00",
   "periods": {
    "num_0": {
     "meta": {
      "number": 0,
      "max_total": 10000,
      "max_spread": 50000,
      "open_totals": false,
      "open_spreads": false,
      "max_money_line": 30300,
      "max_team_total": 2000,
      "open_money_line": false,
      "open_team_total": false
     },
     "cutoff": "2026-10-21T01:51:00",
     "number": 0,
     "totals": null,
     "history": {
      "totals": {
       "227.5": {
        "over": [
         [
          1790554147,
          1.735,
          1100
         ],
         [
          1791045511,
          1.699,
          1100
         ],
         [
          1792543981,
          1.751,
          10000
         ],
         "… 3 more"
        ],
        "under": [
         [
          1790554147,
          2.16,
          1100
         ],
         [
          1791045511,
          2.22,
          1100
         ],
         [
          1792543981,
          2.16,
          10000
         ],
         "… 3 more"
        ]
       },
       "228.0": {
        "over": [
         [
          1790554147,
          1.769,
          1100
         ],
         [
          1791045511,
          1.729,
          1100
         ],
         [
          1792543981,
          1.787,
          10000
         ],
         "… 3 more"
        ],
        "under": [
         [
          17905541
…
```

## `rapidapi-pinbook-odds.list_of_archive_events` — List of Archive events

`GET /kit/v1/archive` · ✓ working (tested 2026-11-01) · sampled 2026-10-22, 733 ms

Settled and expired Pinnacle events of one sport, 100 a page (page_num), filterable by league_ids and start_before / start_after: event id, league, teams, start, live or pre-match event, and the score of every settled period; no odds (they are on /kit/v1/details). 1 request a page.

| param | required | example / default |
|---|---|---|
| `start_before` | no | 2026-10-21T18:53:55 |
| `league_ids` | no | 487 |
| `start_after` | no |  |
| `page_num` | yes | 1 |
| `sport_id` | yes | 3 |

Fields: `events[].event_id` Pinnacle event id for /kit/v1/details; `events[].starts` start, UTC; `events[].event_type` prematch or live (live events have parent_id); `events[].period_results[]` settled score per period: number, team_1_score, team_2_score; `events[].home_team_type` Team2: team_2 is the home side

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/archive?page_num=1&sport_id=3&league_ids=487&start_before=2026-10-21T18:53:55" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "events": [
  {
   "away": "Oklahoma City Thunder",
   "home": "San Antonio Spurs",
   "last": 1792632166,
   "starts": "2026-10-21T01:50:00",
   "periods": {
    "num_0": {
     "meta": {
      "number": 0,
      "max_total": 10000,
      "max_spread": 50000,
      "open_totals": false,
      "open_spreads": false,
      "max_money_line": 30300,
      "max_team_total": 2000,
      "open_money_line": false,
      "open_team_total": false
     },
     "cutoff": "2026-10-21T01:51:00",
     "number": 0,
     "totals": null,
     "line_id": 3773422727,
     "spreads": null,
     "money_line": null,
     "team_total": null,
     "description": "Game",
     "period_status": 1
    },
    "num_1": {
     "meta": {
      "number": 1,
      "max_total": 3000,
      "max_spread": 5000,
      "open_totals": false,
      "open_spreads": false,
      "max_money_line": 3100,
      "max_team_total": 1000,
      "open_money_line": false,
      "open_team_total": false
     },
     "cutoff": "2026-10-21T01:51:00",
     "number": 1,
     "totals": null,
     "line_id": 3773422728,
     "spreads": null,
     "money_line": null,
     "team_total": null,
     "description": "1st Half",
     "period_status": 1
    },
    "num_3": {
     "meta": {
      "number": 3,
      "max_total": 1000,
      "max_spread": 3000,
      "open_totals": false,
      "open_spreads": false,
      "max_money_line": 2050,
      "max_team_total": 1050,
      "open_money_line": false,
      "open_team_total": false
   
…
```

## `rapidapi-pinbook-odds.list_of_leagues` — List of Leagues

`GET /kit/v1/leagues` · ✓ working (tested 2026-11-01) · sampled 2026-10-22, 265 ms

Every Pinnacle league of one sport (649 for basketball): league id, name (country - league), which side is listed home and how many events it has. 1 request.

| param | required | example / default |
|---|---|---|
| `sport_id` | yes | 3 |

Fields: `leagues[].id` league id for league_ids (487 NBA); `leagues[].name` league; `leagues[].event_count` events listed; `leagues[].home_team_type` Team1 or Team2 is the home side

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/leagues?sport_id=3" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "leagues": [
  {
   "id": 210680,
   "name": "Austria - SuperLiga Women",
   "sport_id": 3,
   "container": "Austria",
   "event_count": 1,
   "homeTeamType": "Team1",
   "has_offerings": true,
   "home_team_type": "Team1",
   "event_specials_count": 0,
   "league_specials_count": 0
  },
  {
   "id": 227807,
   "name": "FIBA - Americas League Women",
   "sport_id": 3,
   "container": "Americas",
   "event_count": 0,
   "homeTeamType": "Team1",
   "has_offerings": false,
   "home_team_type": "Team1",
   "event_specials_count": 0,
   "league_specials_count": 0
  },
  {
   "id": 5209,
   "name": "Pan American Games",
   "sport_id": 3,
   "container": "Americas",
   "event_count": 0,
   "homeTeamType": "Team1",
   "has_offerings": false,
   "home_team_type": "Team1",
   "event_specials_count": 0,
   "league_specials_count": 0
  },
  "… 646 more"
 ]
}
```

## `rapidapi-pinbook-odds.list_of_markets` — List of Markets

`GET /kit/v1/markets` · ✓ working (tested 2026-11-02) · sampled 2026-10-22, 406 ms

Pinnacle's open events of one sport (filter by league_ids, event_type prematch or live), each with every period's moneyline, spreads and totals by line with decimal odds and max stake (alt_line_id null = the main line). 14 upcoming NBA games on 2026-10-22. Pass since for changes only; at most 25 calls without since per 5 minutes. 1 request.

| param | required | example / default |
|---|---|---|
| `is_have_odds` | no | true |
| `event_type` | no | prematch |
| `event_ids` | no |  |
| `since` | no |  |
| `is_have_periods` | no | true |
| `league_ids` | no | 487 |
| `sport_id` | yes | 3 |

Fields: `events[].event_id` Pinnacle event id for /kit/v1/details; `events[].starts` start, UTC; `events[].periods.num_0.money_line` full-game moneyline: home, draw, away; `events[].periods.num_0.spreads` spread lines by home handicap; `events[].periods.num_0.totals` total lines by points: over, under; `last` pass as since for the next delta call

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/markets?sport_id=3&event_type=prematch&league_ids=487&is_have_odds=true&is_have_periods=true" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "last": 1792695236,
 "events": [
  {
   "away": "Houston Rockets",
   "home": "San Antonio Spurs",
   "last": 1792691478,
   "starts": "2026-10-24T01:40:00",
   "periods": {
    "num_0": {
     "meta": {
      "number": 0,
      "max_total": 1100,
      "max_spread": 3000,
      "open_totals": true,
      "open_spreads": true,
      "max_money_line": 1800,
      "max_team_total": 300,
      "open_money_line": true,
      "open_team_total": true
     },
     "cutoff": "2026-10-24T01:40:00",
     "number": 0,
     "totals": {
      "225.0": {
       "max": 1100,
       "over": 1.724,
       "under": 2.18,
       "points": 225,
       "alt_line_id": 1
      },
      "225.5": {
       "max": 1100,
       "over": 1.763,
       "under": 2.12,
       "points": 225.5,
       "alt_line_id": 1
      },
      "226.0": {
       "max": 1100,
       "over": 1.8,
       "under": 2.07,
       "points": 226,
       "alt_line_id": 1
      },
      "226.5": {
       "max": 1100,
       "over": 1.84,
       "under": 2.02,
       "points": 226.5,
       "alt_line_id": 1
      },
      "227.0": {
       "max": 1100,
       "over": 1.877,
       "under": 1.97,
       "points": 227,
       "alt_line_id": 1
      },
      "227.5": {
       "max": 1100,
       "over": 1.934,
       "under": 1.934,
       "points": 227.5,
       "alt_line_id": null
      },
      "228.0": {
       "max": 1100,
       "over": 1.97,
       "under": 1.884,
       "points": 228,
       "alt_line_id": 1
      },
      "2
…
```

## `rapidapi-pinbook-odds.list_of_periods` — List of Periods

`GET /kit/v1/meta-periods` · ✓ working (tested 2026-11-02) · sampled 2026-10-22, 221 ms

The periods Pinnacle prices for one sport (game, halves, quarters...) with their number and the names of its moneyline, spread and total markets. 1 request.

| param | required | example / default |
|---|---|---|
| `sport_id` | yes | 3 |

Fields: `periods[].number` period number used in num_<n> keys; `periods[].description` period, e.g. Game, 1st Half

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/meta-periods?sport_id=3" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "periods": [
  {
   "number": 0,
   "sport_id": 3,
   "description": "Game",
   "short_description": "FT",
   "total_description": "Total Points",
   "spread_description": "Handicap",
   "moneyline_description": "Money Line",
   "total_short_description": "Total Points",
   "spread_short_description": "HDP",
   "team_1_total_description": "Team 1 Points",
   "team_2_total_description": "Team 2 Points",
   "moneyline_short_description": "Money Line",
   "team_1_total_short_description": "Team 1 Points",
   "team_2_total_short_description": "Team 2 Points"
  },
  {
   "number": 1,
   "sport_id": 3,
   "description": "1st Half",
   "short_description": "1st H",
   "total_description": "1H Total",
   "spread_description": "1H Handicap",
   "moneyline_description": "1H Money Line",
   "total_short_description": "1H Total Points",
   "spread_short_description": "1H HDP",
   "team_1_total_description": "1H Team 1 Points",
   "team_2_total_description": "1H Team 2 Points",
   "moneyline_short_description": "1H Money Line",
   "team_1_total_short_description": "1H Team 1 Points",
   "team_2_total_short_description": "1H Team 2 Points"
  },
  {
   "number": 2,
   "sport_id": 3,
   "description": "2nd Half",
   "short_description": "2nd H",
   "total_description": "2H Total",
   "spread_description": "2H Handicap",
   "moneyline_description": "2H Money Line",
   "total_short_description": "2H Total Points",
   "spread_short_description": "2H HDP",
   "team_1_total_description": "2H T
…
```

## `rapidapi-pinbook-odds.list_of_special_markets` — List of Special markets

`GET /kit/v1/special-markets` · ✓ working (tested 2026-10-30) · sampled 2026-10-22, 233 ms

Pinnacle's special markets (futures, props) of one sport or league: special id, name, category and each contestant's line and odds. 1 request.

| param | required | example / default |
|---|---|---|
| `is_have_lines` | no | true |
| `event_type` | no | prematch |
| `league_ids` | no | 487 |
| `event_ids` | no |  |
| `since` | no |  |
| `is_have_odds` | no | true |
| `sport_id` | yes | 3 |

Fields: `specials[].special_id` special market id; `specials[].name` market; `specials[].lines` contestants with odds

```bash
curl "https://fetchapi.co/api/gw/rapidapi-pinbook-odds/kit/v1/special-markets?sport_id=3&event_type=prematch&league_ids=487&is_have_odds=true&is_have_lines=true" \
  -H "x-api-key: $FETCHAPI_KEY"
```

Real answer (trimmed):

```json
{
 "last": 1792695227,
 "specials": [
  {
   "last": 1792694832,
   "name": "2026-27 NBA Champion",
   "open": true,
   "event": null,
   "lines": {
    "c_1630623794": {
     "id": 1630623794,
     "name": "Atlanta Hawks",
     "price": 71.47,
     "line_id": 6548512310,
     "rot_num": 8272,
     "handicap": null
    },
    "c_1630623795": {
     "id": 1630623795,
     "name": "Boston Celtics",
     "price": 14.09,
     "line_id": 6548512311,
     "rot_num": 8273,
     "handicap": null
    },
    "c_1630623796": {
     "id": 1630623796,
     "name": "Brooklyn Nets",
     "price": 134.21,
     "line_id": 6548512312,
     "rot_num": 8274,
     "handicap": null
    },
    "c_1630623797": {
     "id": 1630623797,
     "name": "Charlotte Hornets",
     "price": 101.64,
     "line_id": 6548512313,
     "rot_num": 8275,
     "handicap": null
    },
    "c_1630623798": {
     "id": 1630623798,
     "name": "Chicago Bulls",
     "price": 403,
     "line_id": 6548512314,
     "rot_num": 8276,
     "handicap": null
    },
    "c_1630623799": {
     "id": 1630623799,
     "name": "Cleveland Cavaliers",
     "price": 24.18,
     "line_id": 6548512315,
     "rot_num": 8277,
     "handicap": null
    },
    "c_1630623800": {
     "id": 1630623800,
     "name": "Dallas Mavericks",
     "price": 141.86,
     "line_id": 6548512316,
     "rot_num": 8278,
     "handicap": null
    },
    "c_1630623801": {
     "id": 1630623801,
     "name": "Denver Nuggets",
     "price": 24.18,
     "line_id"
…
```

## `rapidapi-pinbook-odds.list_of_sports` — List of Sports

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

The 11 sports PinBook reads from Pinnacle: its id (1 soccer, 2 tennis, 3 basketball, 4 hockey, 7 American football), Pinnacle's own sport id and when its markets last changed. 1 request.

Fields: `[].id` PinBook sport id for every other call; `[].p_id` Pinnacle's sport id; `[].last` last market change, unix seconds

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

Real answer (trimmed):

```json
[
 {
  "id": 1,
  "last": 1792695236,
  "name": "Soccer",
  "p_id": 29,
  "last_call": 1792695236,
  "special_last": 1792695210
 },
 {
  "id": 2,
  "last": 1792695237,
  "name": "Tennis",
  "p_id": 33,
  "last_call": 1792695237,
  "special_last": 1792693742
 },
 {
  "id": 3,
  "last": 1792695236,
  "name": "Basketball",
  "p_id": 4,
  "last_call": 1792695238,
  "special_last": 1792695227
 },
 "… 8 more"
]
```
