Official client libraries for pinnapi.com — real-time Pinnacle odds, dropping-odds alerts, and steam-move detection over REST, Server-Sent Events, and WebSocket. Live and prematch, across 10+ sports, with ~15–40 ms frame-to-client latency.
Does Pinnacle still have a public API? No. Pinnacle closed its public API on July 23, 2025 — only bespoke commercial/academic access remains. pinnapi is an independent drop-in alternative to the Pinnacle API: the same familiar response shape, served from its own real-time feed. Swap the base URL and API key in existing Pinnacle-style client code; no Pinnacle account needed.
Get a free trial key in seconds at pinnapi.com — no card, no email verification; the key is your login.
pip install pinnapi # Python 3.8+ (requests only)
npm install pinnapi # Node 18+ (zero dependencies, TypeScript types included)from pinnapi import Client, SPORTS
api = Client("YOUR_KEY")
# Live soccer markets — moneyline, spreads, totals, team totals, every period
events = api.markets(sport_id=SPORTS["soccer"])
# Prematch fixtures
fixtures = api.prematch_fixtures(sport_id=SPORTS["tennis"])
# Real-time odds-drop alerts (SSE) — fires the instant a price falls past your threshold
for drop in api.stream_drops(min_drop=5):
print(f'{drop["home"]} v {drop["away"]} · {drop["market"]} '
f'{drop["from"]} → {drop["to"]} (▼{drop["drop_pct"]}%)')import { Client, SPORTS } from "pinnapi";
const api = new Client("YOUR_KEY");
const events = await api.markets({ sportId: SPORTS.soccer });
for await (const drop of api.streamDrops({ minDrop: 5 })) {
console.log(`${drop.home} v ${drop.away} · ${drop.market}`,
drop.from, "→", drop.to, `▼${drop.drop_pct}%`);
}More runnable code in examples/.
Pinnacle is the market's reference price — a low-margin, high-limit book that moves its line instead of banning winners. That makes its odds the closest thing to a consensus "true" probability, which is why closing-line value (CLV) is measured against it. When Pinnacle's line breaks, the soft books take seconds to follow; everything in between is the window for arbitrage, +EV betting, and steam chasing. This feed is push, not poll — you hear about the move when it happens, not on your next request.
| Surface | Endpoint | Use it for |
|---|---|---|
| REST markets | GET /kit/v1/markets |
Live or prematch snapshots for a sport |
| REST event | GET /kit/v1/details |
One live event, full structure |
| REST prematch | GET /kit/v1/prematch/{fixtures,markets,lines} |
Pre-game boards |
| Drops buffer | GET /api/drops |
"What just dropped" without an open connection |
| SSE streams | /odds-drop, /odds-drop-prematch |
Real-time drop alerts (the point of the product) |
| WebSocket | /ws/feed (add-on) |
Every raw Pinnacle frame, byte-identical |
Sports: soccer, tennis, basketball, hockey, football, baseball, rugby, MMA, boxing, volleyball/handball, esports, golf. No-vig fair prices included.
Is this an alternative to the closed Pinnacle API? Yes — drop-in compatible response shapes; migrate by swapping base URL + key.
How fast is it? ~15–40 ms from Pinnacle frame to your client over SSE/WebSocket. Polled aggregators are typically seconds stale.
Is there a free tier? A free trial key (no card) covers all REST endpoints at 100 requests/day. SSE drop streams are on paid plans, from $99/mo.
Historical odds? No — this is a real-time feed. Buffer the stream yourself, or query /api/drops for recent drops.
Docs? Human docs at pinnapi.com/docs · LLM-friendly single-file reference at pinnapi.com/llms-full.txt · guides on the blog.
python/ pip install pinnapi — source, tests (unittest)
javascript/ npm install pinnapi — source, types, tests (node --test)
examples/ runnable drop-alert bots in both languages
Issues and PRs welcome — see CONTRIBUTING.md. Commercial support: info@pinnapi.com.
pinnapi is an independent service, not affiliated with or endorsed by Pinnacle. MIT licensed.