PinnWire Pinnacle WebSocket API

PinnWire is a Pinnacle-only sports-odds API for current live and prematch markets: REST returns JSON snapshots, SSE pushes detected price drops, and the raw WebSocket — this page — streams every subscribed price change to your code the moment it happens. No polling loop, no 10-second staleness. Independent; not affiliated with Pinnacle.

Verify PinnWire before signing up

The public REST demo key needs no account, email, or card — prove the feed is live right now:

curl "https://pinnwire.com/kit/v1/markets?sport_id=1&key=demo"
# current live soccer odds, decimal, with a generated_at freshness timestamp

Demo limits: 10 requests/min, 50/day, REST only. SSE and the raw WebSocket need the corresponding paid plan or add-on.

How it works

Connect, subscribe, receive. Subscribe by sport (every event in that sport) or by specific event IDs (up to 200 per stream). You get a snapshot of matching events first, then continuous update frames — adds, updates, deletes — only for what you subscribed to.

// connect
wss://pinnwire.com/ws?key=YOUR_KEY        // /ws/feed also works

// subscribe (within 10s of connecting)
{ "type": "subscribe",
  "streams":   ["live", "prematch"],
  "sport_ids": [1, 2],          // all Soccer + Tennis events
  "event_ids": [1631005165] }   // plus one specific match

// server acks each sub, sends a snapshot, then live frames:
{ "type": "live", "topic": "...", "op": "upd", "rec": { /* full record */ } }

Heartbeat every 30s (reply {"type":"pong"}), chunked snapshots for large baselines, per-market version numbers for clean deduping, and permessage-deflate compression if your client wants it. Full protocol in the docs.

What's in the stream

Everything the REST API serves, pushed: moneylines / match winner, spreads and handicaps, totals and team totals, every period, and — when published — props & specials. All 13 sports (soccer, tennis, basketball, hockey, football, baseball, rugby, MMA, boxing, volleyball/handball, esports, golf, cricket), live and prematch, decimal odds.

Built for the same jobs as the rest of PinnWire: dropping-odds / steam detection, arbitrage reference legs, +EV and value-betting screens with no-vig fair prices, and betting-model pipelines.

Reliability details, stated plainly

One WebSocket connection per key (a second connect cleanly evicts the first with close code 1001, so a stuck client never blocks a reconnect). Subscribe acks confirm every request. If your consumer falls too far behind, the server closes with a slow_consumer reason instead of silently dropping frames. Push delivery has no client polling interval; end-to-end latency depends on network path and client region — measure under your own conditions.

For AI agents

The same data is exposed as read-only tools on the PinnWire MCP server (https://pinnwire.com/mcp?key=YOUR_KEY), and the complete plain-text API reference lives at /llms-full.txt.

Not ready for the full stream? Two lighter options

SSE drop alerts — a one-line stream that pings you the instant any price falls 5% or more, live or prematch, with the no-vig fair price attached. On Stream ($89/mo) and up.

REST — ask anytime, get JSON. Works right now with the public demo key:

curl "https://pinnwire.com/kit/v1/markets?sport_id=1&key=demo"
# live soccer odds this second — demo key is public, no signup

Pricing

The raw WebSocket feed is a +$89/mo add-on on Pro, Pro + Drops and Scale. Plans from $89/mo, free trial key with no card. Full pricing · compare with alternatives.

Questions

Does Pinnacle have a WebSocket API?

Not publicly. The public API closed in July 2025; the native push feed is a manual-review B2B contract. PinnWire delivers the same real-time prices over a WebSocket you can have running in minutes.

WebSocket vs polling — does it matter?

Polling APIs refresh on a loop measured in seconds. Push delivers each change as it happens. For live markets and drop detection, that gap is the whole game.

Can AI agents use this?

Yes — REST works instantly with key=demo, and the complete plain-text API reference lives at /llms-full.txt.