# Pinnacle Odds API: Sharp Football Odds as JSON

> Pinnacle odds API for developers: sharp, low-margin football odds for 1X2, Asian handicap and totals, pre-match and in-play, as clean JSON. 600+ leagues. Free trial.

Canonical: https://www.oddsapi.dev/pinnacle-odds-api  
Live data updated: 7 Nov 2026, 07:04 UTC (refreshed every 30 minutes)

## TL;DR

- Pinnacle's own API is restricted to approved accounts; OddsAPI.dev serves its sharp, low-margin football odds (1X2, Asian handicap, totals; full time and first half) as JSON, with no Pinnacle account.
- Pinnacle lists 633 football leagues and cups in the API, with 1,498 upcoming matches right now.
- Its board for Leeds United v Tottenham Hotspur has 6 markets across 3 market types.
- Endpoints: GET /v1/pinnacle/leagues, /v1/pinnacle/events, /v1/pinnacle/events/{id}/odds (pre-match) and /odds/live (in-play).
- Independent data provider, not affiliated with Pinnacle. 7-day free trial on every plan; every plan includes all five bookmakers.

Pinnacle's sharp football prices as clean JSON: match result, Asian handicap and totals, full time and first half, pre-match and in-play. The low-margin reference line, in the same schema as four other bookmakers.

## Right now on Pinnacle

Pinnacle lists 633 football leagues and cups in the API, with 1,498 upcoming matches across 279 of them and 49 in play. For Leeds United v Tottenham Hotspur (Premier League, Sat 7 Nov, 12:30 UTC), its board has 6 markets and 30 prices across 3 market types.

| League (as Pinnacle names it) | Upcoming matches |
| --- | ---: |
| Spain - Segunda Federacion | 44 |
| England - FA Cup | 38 |
| Spain - Tercera Division | 33 |
| Poland - 3rd Liga | 30 |
| Spain - U19 League | 21 |
| England - Premier League | 18 |
| Italy - Serie A | 18 |
| Spain - La Liga | 18 |

```json
{
  "event_id": "ev_600995",
  "bookmaker": "pinnacle",
  "updated_at": "2026-11-07T07:00:54.878Z",
  "markets": [
    {
      "key": "match_result",
      "period": "full_time",
      "outcomes": [
        {
          "key": "home",
          "price": 2.82
        },
        {
          "key": "draw",
          "price": 3.34
        },
        {
          "key": "away",
          "price": 2.63
        }
      ]
    },
    {
      "key": "total_goals",
      "period": "full_time",
      "outcomes": [
        {
          "key": "over",
          "line": 2.5,
          "price": 1.97
        },
        {
          "key": "under",
          "line": 2.5,
          "price": 1.9
        }
      ]
    },
    {
      "key": "asian_handicap",
      "period": "full_time",
      "outcomes": [
        {
          "key": "home",
          "line": -0.25,
          "price": 2.41
        },
        {
          "key": "away",
          "line": 0.25,
          "price": 1.613
        }
      ]
    }
  ]
}
```

## Does Pinnacle have a public API?

Not for most developers. Pinnacle's own API has been limited to approved, funded accounts, and many developers report it closed to new users in 2025. OddsAPI.dev gives you Pinnacle's football odds through a documented REST API with no Pinnacle account, in the same JSON as Bet365, Betfair Exchange, Paddy Power and BetMGM UK.

|  | Building it yourself | OddsAPI.dev |
| --- | ---: | ---: |
| Access | A funded Pinnacle account and approval | API key in minutes |
| Data format | Pinnacle's own schema | Normalized JSON shared by five books |
| In-play odds | Polling and change tracking to build | /odds/live endpoint |
| Closing line | Store every snapshot yourself | Pre-match board kept after kickoff |
| Other bookmakers | A new integration per book | Swap the slug in the URL |
| Cost | Engineering time and upkeep | 7-day free trial, then from $50/mo |

## Pinnacle markets

- **Results:** Match result (1X2), First-half result
- **Handicaps:** Asian handicap, Quarter lines, First-half Asian handicap
- **Goals:** Total goals, Alternative goal lines, First-half totals

## Example request

```bash
curl "https://api.oddsapi.dev/v1/pinnacle/events/ev_344223/odds?markets=match_result,asian_handicap,total_goals" \
  -H "Authorization: Bearer $ODDS_API_KEY"
```

```json
{
  "data": {
    "event_id": "ev_344223",
    "bookmaker": "pinnacle",
    "type": "prematch",
    "updated_at": "2026-11-04T05:19:23.662Z",
    "markets": [
      {
        "key": "match_result",
        "period": "full_time",
        "outcomes": [
          { "key": "home", "price": 4.52 },
          { "key": "draw", "price": 4.09 },
          { "key": "away", "price": 1.751 }
        ]
      },
      {
        "key": "asian_handicap",
        "period": "full_time",
        "outcomes": [
          { "key": "home", "line": 0.5, "price": 2.17 },
          { "key": "away", "line": -0.5, "price": 1.74 },
          { "key": "home", "line": 0.75, "price": 1.917 },
          { "key": "away", "line": -0.75, "price": 1.97 }
        ]
      },
      {
        "key": "total_goals",
        "period": "full_time",
        "outcomes": [
          { "key": "over", "line": 2.75, "price": 1.826 },
          { "key": "under", "line": 2.75, "price": 2.03 }
        ]
      }
    ]
  }
}
```

```python
import os, requests

API = "https://api.oddsapi.dev/v1/pinnacle"
headers = {"Authorization": f"Bearer {os.environ['ODDS_API_KEY']}"}

league = requests.get(f"{API}/leagues", params={"search": "England Premier League"}, headers=headers).json()["data"][0]
events = requests.get(f"{API}/events", params={"league_id": league["id"]}, headers=headers).json()["data"]

for event in events:
    odds = requests.get(
        f"{API}/events/{event['id']}/odds",
        params={"markets": "match_result,asian_handicap,total_goals"},
        headers=headers,
    ).json()["data"]
    print(event["home_team"]["name"], "v", event["away_team"]["name"])
    for market in odds["markets"]:
        print("  ", market["key"], market["period"], market["outcomes"])
```

```javascript
const API = "https://api.oddsapi.dev/v1/pinnacle";
const headers = { Authorization: `Bearer ${process.env.ODDS_API_KEY}` };
const get = (path) => fetch(API + path, { headers }).then((r) => r.json());

const { data: [league] } = await get("/leagues?search=England%20Premier%20League");
const { data: events } = await get(`/events?league_id=${league.id}`);

for (const event of events) {
  const { data: odds } = await get(`/events/${event.id}/odds?markets=match_result,asian_handicap,total_goals`);
  console.log(event.home_team.name, "v", event.away_team.name, odds.markets);
}
```

## Coverage

Live today:

- Football, pre-match and in-play
- Every competition Pinnacle prices: 600+ leagues and cups
- Match result, Asian handicap and totals, full time and first half
- Quarter and alternative lines
- Pre-match board kept after kickoff (closing line)
- Same schema as 4 other bookmakers

Not yet:

- Player props and corners (Pinnacle's feed carries main markets only)
- Other sports (coming soon)
- WebSocket streaming (coming soon; poll REST for now)

## What people build

- **Closing line value.** Pinnacle's closing price is the standard benchmark for whether a bet beat the market. The pre-match board stays available after kickoff, so you can record the close for every match.
- **Fair odds.** Strip Pinnacle's low margin from its 1X2 or Asian handicap to get a fair-probability baseline, then measure every other book against it.
- **Value scanners.** Compare Bet365, Paddy Power and BetMGM UK against Pinnacle on the same match and flag prices above the fair line.
- **Model calibration.** Score your model's probabilities against Pinnacle's no-vig prices across thousands of matches.

## FAQ

### Is this the official Pinnacle API?

No. OddsAPI.dev is an independent data provider, not affiliated with or endorsed by Pinnacle. We deliver Pinnacle's football odds in a documented JSON format, read-only: you can't place bets through the API.

### Which Pinnacle markets are included?

Match result (1X2), Asian handicap and total goals, for full time and first half, with Pinnacle's quarter and alternative lines. These are the markets Pinnacle prices sharply; its feed doesn't carry player props, corners or cards.

### Why use Pinnacle odds?

Pinnacle runs low margins and welcomes winning bettors, so its prices are widely treated as the market's fair line. It's the usual reference for closing line value, fair odds and value betting.

### Can I get Pinnacle closing odds?

Yes. GET /v1/pinnacle/events/{id}/odds returns the pre-match board, and it stays available after kickoff, so the last pre-match price is the closing line. In-play odds come from /odds/live.

### How low is Pinnacle's margin?

It moves with the market; see the live bookmaker margins page for the current average across every league we track, next to Bet365, Betfair Exchange, Paddy Power and BetMGM UK.

### What's the Pinnacle bookmaker slug?

pinnacle. Every Pinnacle endpoint starts with /v1/pinnacle/, and GET /v1/bookmakers lists every bookmaker's slug.

### Is there a free trial?

Yes. Every plan starts with a 7-day free trial with 10% of the plan's monthly requests at the full rate limit, and every plan includes all five bookmakers. Cancel before it ends and you're never charged.

## Other bookmakers

- [Bet365 odds API](https://www.oddsapi.dev/bet365-odds-api) ([markdown](https://www.oddsapi.dev/bet365-odds-api.md))
- [Betfair Exchange API](https://www.oddsapi.dev/betfair-exchange-api) ([markdown](https://www.oddsapi.dev/betfair-exchange-api.md))
- [Paddy Power odds API](https://www.oddsapi.dev/paddy-power-odds-api) ([markdown](https://www.oddsapi.dev/paddy-power-odds-api.md))
- [BetMGM odds API](https://www.oddsapi.dev/betmgm-odds-api) ([markdown](https://www.oddsapi.dev/betmgm-odds-api.md))

## Pricing

Every plan starts with a 7-day free trial (10% of the plan's monthly requests) and includes all 5 bookmakers.

| Plan | Price | Requests | Rate limit |
| --- | ---: | ---: | ---: |
| Starter | $50/month | 100,000 requests/mo | 120/minute |
| Growth | $129/month | 500,000 requests/mo | 300/minute |
| Scale | $379/month | 5,000,000 requests/mo | 1000/minute |

Start a trial: https://www.oddsapi.dev/auth?mode=signup
