Quarter lines, every plan
Quarter-ball totals (1.75/2.25/2.75/3.25) and handicaps are included on every tier. Plans differ by rate limit and push access, not line depth.
Pinnacle closed its own public API in July 2025. pinnodds is the independent, real-time replacement — the same live and prematch Pinnacle prices over REST, WebSocket and SSE, with dropping-odds detection built in.
No card. No Pinnacle account. One API key for REST + streams.
Module 01 — Overview
pinnodds is an independent service that carries Pinnacle's live and prematch market data
and hands it to your code three ways. REST under /kit/v1/...
returns the current markets on demand. A raw WebSocket passthrough at
/ws/feed pushes every price change the instant Pinnacle's broker emits it.
Server-Sent Events at /odds-drop (live) and
/odds-drop-prematch (prematch) stream dropping-odds alerts as they fire.
Everything runs on one API key — send x-api-key: YOUR_KEY on
REST calls and ?key=YOUR_KEY on the streams. Drop detection is first-class, not
a bolt-on: alerts carry the no-vig fair price and Pinnacle's max stake, and the enriched
/api/drops endpoint adds a precomputed drop percentage. See the
API reference for the full schema, or the dedicated
Pinnacle WebSocket API page if you only want the stream.
Module 02 — Surface
Add ?sport_id=1 to scope a REST call to one sport, and
include_specials=1 to pull props, exact scores and futures — soccer prematch
alone jumps from roughly 1,500 to 12,400 events with specials on. Each special is its own
event row with special, special_category,
special_markets and parent_id.
Module 03 — Quickstart
Send your key as x-api-key and hit /kit/v1/markets. You get the
current live state — every event, every market, every price — in one JSON response. Swap in
/kit/v1/prematch/markets for pre-game.
# Live soccer markets — one authenticated GET
curl -H "x-api-key: YOUR_KEY" \
"https://pinnodds.com/kit/v1/markets?sport_id=1"
// Node.js — fetch current live Pinnacle markets
const res = await fetch(
"https://pinnodds.com/kit/v1/markets?sport_id=1",
{ headers: { "x-api-key": "YOUR_KEY" } }
);
const { events } = await res.json();
for (const ev of events) {
console.log(ev.id, ev.markets); // moneyline, spreads, totals…
}
Prefer not to write the HTTP layer yourself? The official SDKs wrap REST + SSE with one
line of install: npm install pinnodds or pip install pinnodds.
Full clients in Node, Python, Go and PHP — plus auth and the frame schema — are in the
documentation.
Module 04 — Payload
Quarter-ball totals (1.75/2.25/2.75/3.25) and handicaps are included on every tier. Plans differ by rate limit and push access, not line depth.
SSE alerts carry from_price, to_price, no-vig fair price and Pinnacle's max stake. REST /api/drops adds a precomputed drop_pct.
Pass include_specials=1 for props, exact scores and futures — soccer prematch expands from ~1,500 to ~12,400 events.
npm install pinnodds and pip install pinnodds — low/zero-dependency clients that wrap REST and SSE.
Both phases across 10+ sports — soccer, tennis, basketball and more — moneyline, spreads, totals and team totals.
The response shape follows the familiar Pinnacle client format, so moving over is mostly a base-URL and key change.
Module 05 — Trade-offs
The official API is gone. That leaves scraping Pinnacle yourself — and owning every breakage — or a maintained feed. Here is the honest comparison.
| Official Pinnacle API | Scrape it yourself | pinnodds | |
|---|---|---|---|
| Availability | Closed July 2025 | Breaks on every site change | Live now, maintained |
| Latency | — | Poll interval + parsing | 30–150 ms pushed |
| Maintenance | N/A | You own the breakage | Zero — we track Pinnacle |
| Drops | Never offered | Diff it yourself | Built in: nvp + limit |
| Support | None | You, at 3am | Telegram + email |
pinnodds is Pinnacle-only by design — the sharp truth layer, not an odds-comparison grid. If you need many books, arbitrage against a soft book, or a historical archive, pair it with an aggregator; more on that in the blog.
Module 06 — Query log
/kit/v1 return the current live or prematch state on demand./ws/feed WebSocket stream yourself and store it.include_specials=1.Free key, no card required, and a 3-day full demo on request. One key for REST, WebSocket and SSE — you're live in minutes.