Pinnacle alternate lines via API
Answer: on Builder and Pro, /v1/odds and the WebSocket return Pinnacle's alternate spreads and totals as extra markets with alternate: true and main: false, each with its own line, prices, margin and maxStake. Free and Hobby are main markets only. Leave main unset to get the whole ladder; pass main=true when you only want the main line.
Request#
curl -s "https://pinnfeed.io/v1/odds?sport=basketball&market=spread,total&limit=20" \
-H "x-api-key: ps_live_your_key"
Group the ladder by event#
import os, requests
from collections import defaultdict
r = requests.get("https://pinnfeed.io/v1/odds",
params={"sport": "basketball", "market": "total", "limit": 20},
headers={"x-api-key": os.environ["PINNFEED_KEY"]}, timeout=10)
for e in r.json()["events"]:
ladder = defaultdict(dict)
for m in e["markets"]:
if m["period"] != 0:
continue # full game only
for o in m["outcomes"]:
ladder[m["line"]][o["name"]] = o["decimal"]
ladder[m["line"]]["main"] = m["main"]
print(e["home"], "v", e["away"])
for line in sorted(ladder):
print(" ", line, ladder[line])
Fields#
| Field | Meaning |
|---|---|
alternate | true for an alternate line from Pinnacle |
main | true only for the main moneyline, spread or total |
line | Home handicap for spreads, the total for totals and team totals |
period | 0 full game; other values are periods/halves (period markets) |
maxStake | Pinnacle's max risk stake for that line |
Main-line only workflows: main line filter.
Plans#
Alternate lines need Builder (€99/mo) or Pro. 3-day trial; a card is required and it is charged after day 3 unless you cancel. Free and Hobby: main markets only.
Educational content for adults (18+).
Related: Pinnacle lines API.
Questions people ask#
Are alt lines pushed on the WebSocket?#
Yes, on Builder and Pro unless you subscribe with "main":true.
Does every event have alternate lines?#
No. Only what Pinnacle offers for that event; many smaller events only have the main line.
Is maxStake lower on alt lines?#
It can be; read maxStake per market instead of assuming.