HomeBlog › Which Sports and Markets the Pinnacle API Covers in 2026
API & Data

Which Sports and Markets the Pinnacle API Covers in 2026

Which Sports and Markets the Pinnacle API Covers in 2026

A straight reference: the 12 sports the Pinnacle API covers, the exact market types you get (money line, spreads, totals, team totals), what's behind the specials flag, and what it deliberately does n

Which Sports and Markets the Pinnacle API Covers in 2026

Quick answer: the Pinnacle API through pinnapi covers 12 sports, with the standard set of markets on each (money line, spreads, totals, and team totals), plus player props, team props, exact scores and futures behind an opt-in flag. Golf is the one real exception, and it is money-line-only. Everything below is the detail behind that sentence.

This is a reference page. Skim to the table you need.

The 12 sports

Each sport has a stable pinnapi sport_id, which is the integer you pass in requests. It is not the same number as Pinnacle's internal sport id, so use the pinnapi column.

pinnapi sport_idSportNotes
1SoccerDeepest coverage: 1X2, totals, Asian handicap, team totals
2TennisMatch and set markets
3BasketballMoney line, spreads, totals; Player Props via specials
4HockeyMoney line, spreads (puck line), totals
5Football (American)Money line, spreads, totals; Player Props via specials
6BaseballMoney line, run line, totals; Player Props via specials
7Rugby (Union and League)Both codes under one id
8MMAMoney line, sometimes totals (rounds)
9BoxingMoney line, round markets where offered
10Other (Volleyball, Handball)Grouped bucket, not a single sport
11EsportsDota 2, CS2, League of Legends
12GolfMoney-line only. See the note below.

Two of those rows catch people out. sport_id=7 is both rugby codes, union and league, under one id, so filter on the league string if you only want one. sport_id=10 is a grouped bucket, currently volleyball and handball, rather than a single clean sport. Treat it as "assorted" and read the league field.

The golf exception

Golf is the one sport that breaks the pattern: it is effectively money-line-only, head-to-head matchups and outright winners. Checked against the live API, a golf event returns a populated money_line and no real prices anywhere else. The catch is that a market key can still be present but empty: in the events pulled for this page, team_totals came back as { "home": {}, "away": {} }, the key there but the object empty. So the rule is not "golf has no other markets", it is "never assume a market key means there are prices under it". Read the contents, not the key. If your parser assumes every sport carries prices for all market families, golf is where it breaks.

The standard market types

Within an event's periods, prices are organised under these keys. These are the ones you parse on nearly every sport:

Decimal odds throughout. Convert to American or Hong Kong on the display layer only, and do your maths on the decimals. Full walkthrough of the payload shape in the odds data format guide.

Specials: props, team props, exact scores, futures

Beyond the standard markets, Pinnacle offers special markets. These are off by default and returned only when you pass include_specials=1. They come back as separate events joined to the main match by parent_id, with prices under a special_markets object.

The one behaviour to know: specials do not fire drop alerts. The drop stream watches main markets only. If you build on props, you poll them yourself. There is a dedicated walkthrough in how to pull Pinnacle player props.

What the Pinnacle API does not cover

Just as useful as the coverage list, and the part most comparison pages leave out. Through pinnapi you get one book's live and prematch prices, and deliberately not these:

None of that is a gap to apologise for. It is the shape of a single-book, latency-focused feed. Knowing what is out of scope before you integrate saves you discovering it three weeks in.

Live and prematch use the same fixtures

One detail that removes a whole class of bugs: a fixture keeps its id from prematch into live. You do not re-key anything at kickoff. The same event you tracked prematch carries its id straight into the live phase, so your joins hold. Pass phase (or the prematch endpoints) to choose which slice you want.

Takeaway

Twelve sports, standard markets on each (money line, spreads, totals, team totals), golf as the money-line-only exception, and specials behind include_specials=1 with no drop alerts. What is out of scope, other books, history, settlement, and stats, is out of scope on purpose. Build against the coverage that is there and you have a fast, sharp, single-book line with no surprises.

Frequently asked questions

How many sports does the Pinnacle API cover?

Twelve, through pinnapi: soccer, tennis, basketball, hockey, American football, baseball, rugby, MMA, boxing, an "other" bucket (volleyball and handball), esports, and golf.

What markets does the Pinnacle API return?

The standard keys are money_line, spreads, totals, team_total, and team_totals, plus meta for period metadata. Player props, team props, exact scores and futures come through the specials flag.

Why does golf only have money line?

Because Pinnacle runs golf as money-line-only: head-to-head matchups and outright winners, with no spreads, totals, or team totals.

Does the Pinnacle API cover player props?

Yes, as special markets returned when you pass include_specials=1. Coverage is thinner and lower-limit than a US retail book. See the player props guide.

Does it include historical odds or results?

No. It is a live and near-live price feed, not an archive or a settlement source. Bring your own history and results data if you need them.

Do I need a Pinnacle account?

No. pinnapi is independent and not affiliated with Pinnacle; your pinnapi key is all you need.

Get real-time Pinnacle odds in your code

Live & prematch markets with sub-second odds-drop alerts. Free trial key in seconds — no card.

Start free trial