WS LIVE SESSION 00:00:00 UTC SOCKETS 1 FRAMES 0
TRANSPORT WSS / MQTT / SSE RTT 148 MS V1
wss://pinnodds.com/ws/feed — one persistent connection

Pinnacle WebSocket API
real-time odds in milliseconds.

Stop polling. Open one WebSocket and receive Pinnacle's live and prematch odds the instant they change — every sport, with built-in dropping-odds alerts. Pinnacle Odds API streams Pinnacle's own broker feed straight to your code.

No card. No Pinnacle account. Your API key is the socket credential.

Push latency
30–150ms
Connections
1persistent
Compression
~5×
Sports
12
Inbound frames WSS /ws/feed
RTT 148MS · 0 FRAMES ❙❙ Paused

Module 01 — Transport

Why WebSocket beats REST polling

Polling a REST endpoint means you only see a price after your next request — and you burn rate limit doing it. A WebSocket keeps one connection open and pushes every change the moment Pinnacle's broker emits it, so fast-moving lines and drops reach you first.

 REST pollingPinnacle WebSocket API
LatencyUp to your poll intervalSub-second push
Rate limitsEvery poll countsOne persistent connection
Missed movesAnything between pollsEvery frame delivered
Drops detectionDiff it yourselfBuilt in

Module 02 — Handshake

How it works

Connect to wss://pinnodds.com/ws/feed with your API key, subscribe to the sports you care about, and receive a snapshot of current state followed by a live stream of price deltas. A heartbeat keeps the socket alive; reconnect and you get a fresh snapshot. Large baselines (e.g. prematch soccer) arrive as several snapshot frames tagged with seq/final — merge each frame's events by id, exactly as you do the deltas that follow. See the WebSocket documentation for the frame schema.

feed-client.mjs Node · ws
// Node.js — connect, subscribe, receive live Pinnacle odds
import WebSocket from "ws";

// perMessageDeflate: true compresses live frames ~5x — strongly recommended
const ws = new WebSocket("wss://pinnodds.com/ws/feed?key=YOUR_KEY", { perMessageDeflate: true });

ws.on("open", () => {
  // subscribe to soccer (1) and basketball (4), live stream
  ws.send(JSON.stringify({ type: "subscribe", streams: ["live"], sport_ids: [1, 4] }));
});

ws.on("message", (buf) => {
  const msg = JSON.parse(buf);
  if (msg.type === "snapshot") console.log("state:", msg.events.length, "events");
  if (msg.type === "live")     console.log(msg.rec.id, msg.rec.markets); // price update
});
Frame types api.pinnodds.com
WS/ws/feedraw passthrough
FRMsnapshot · seq / finalbaseline state
FRMlive · rec.marketsprice delta
SSE/odds-drop≥5% alerts

Enable compression. Turn on permessage-deflate on your client — live frames are compressed roughly . This is essential for high-volume or geographically distant clients: without it, a burst of updates can exceed a single connection's throughput and queue up, so frames arrive with a delayed timestamp. Browsers negotiate it automatically; in Node's ws pass { perMessageDeflate: true }; Python's websockets and Go's gorilla/websocket support it too. Same URL, same JSON — your client decompresses transparently.

Full, copy-paste clients in Node, Python, Go and PHP — plus the exact frame schema and auth — are in the WebSocket documentation.

Module 03 — Payload

What you get

F/01Latency

Sub-second updates

Pushed straight from Pinnacle's broker as prices change — no interval to wait on.

F/02Wire

Raw passthrough feed

Every Pinnacle broker frame forwarded byte-identical, for teams that want the wire verbatim.

F/03Signal

Dropping-odds alerts

Line drops detected in real time on live and prematch markets — no diffing required.

F/04Transport

SSE fallback

Prefer Server-Sent Events? The same feed is available over SSE with one flag.

F/05Coverage

Every sport, both phases

Soccer, tennis, basketball, MLB, NBA, NHL, MMA and more — live and prematch.

F/06Migration

Drop-in compatible

REST and SSE match common Pinnacle client formats, so migrating is mostly a URL change.

Module 04 — Query log

Frequently asked questions

Does Pinnacle have an official WebSocket API?
Pinnacle does not publish an official public WebSocket API. Pinnacle Odds API streams Pinnacle's own real-time broker feed to you over a standard WebSocket, so you get push updates without polling.
How fast is the Pinnacle WebSocket feed?
Updates are pushed sub-second, straight from Pinnacle's broker as prices change — there is no polling interval to wait on.
Is it drop-in compatible with existing Pinnacle API clients?
Yes. The REST and SSE endpoints are drop-in compatible with common Pinnacle API client formats, and the raw WebSocket passthrough forwards each Pinnacle broker frame byte-identical.
Which sports and markets are covered?
Every sport Pinnacle covers — soccer, tennis, basketball, MLB, NBA, NHL, MMA and more — on both live and prematch markets, including moneyline, spreads, totals, team totals and specials.
How do I get access to the WebSocket feed?
Grab a free trial key, then enable the WebSocket add-on. Full connection details are in the docs.

Start streaming Pinnacle odds

Free 3-day full demo, no card required. Enable the WebSocket add-on and you're live in minutes.

WSS · permessage-deflate · 12 sports · live + prematch · 30–150 ms