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_id | Sport | Notes |
|---|---|---|
| 1 | Soccer | Deepest coverage: 1X2, totals, Asian handicap, team totals |
| 2 | Tennis | Match and set markets |
| 3 | Basketball | Money line, spreads, totals; Player Props via specials |
| 4 | Hockey | Money line, spreads (puck line), totals |
| 5 | Football (American) | Money line, spreads, totals; Player Props via specials |
| 6 | Baseball | Money line, run line, totals; Player Props via specials |
| 7 | Rugby (Union and League) | Both codes under one id |
| 8 | MMA | Money line, sometimes totals (rounds) |
| 9 | Boxing | Money line, round markets where offered |
| 10 | Other (Volleyball, Handball) | Grouped bucket, not a single sport |
| 11 | Esports | Dota 2, CS2, League of Legends |
| 12 | Golf | Money-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:
money_lineis the straight win market:{ home, away, draw }. Thedrawfield carries a price where the sport has one (soccer) and isnullwhere it does not (tennis, basketball, golf).spreadsare handicap lines, keyed by the handicap value:{ "<hdp>": { hdp, home, away, max } }. Themaxis the maximum stake Pinnacle is showing at that line, which is a useful liquidity signal on its own.totalsare over/under, keyed by the points line:{ "<points>": { points, over, under, max } }. Remember the line belongs to the market, not the price: over 2.5 and over 3.0 are different markets, not a price change. That distinction is the single most common odds-parsing bug.team_totalis a single over/under per team:{ home: {...}, away: {...} }.team_totalsis the plural: multiple alternate team-total lines per side. Note the singular-versus-plural naming; they are two different keys.metais per-period metadata such as scores and max stakes, not a betting market but often what you want alongside one.
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:
- Other bookmakers. Pinnacle only, by design. If you need many books in one call, that is an aggregator, and the honest comparison is in the 2026 provider breakdown.
- Historical odds. Live and near-live only. No archive of closing lines to backtest against.
- Results and settlement. No graded-outcome feed. You bring your own results source.
- Player and team stats. Prices, not sports data. If your product needs both, the clean architecture is two feeds, and plenty of stacks run exactly that split.
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