Feed live Live 64Prematch 7,596Markets 31,397 Transport WebSocket · RESTAPI v1
Pinnacle odds · one socket · v1

The sharpest odds in sport, streamed to your code.

PinnFeed is a Pinnacle odds API built for developers: one normalized WebSocket with server-side filters and delta updates, REST snapshots, decimal and American prices, no-vig fair odds on every market and a closing-line archive.

From $29/mo · free tier, no card · 13 sports · cancel in one click

LiveOdds tapeWS /v1/stream
SptFixture1X2Fair 1
SOCViktoriya Sumy v Agrobiznes Volochisk● live 1-0 · Ukraine - Persha Liga1.116.1330.591.22
SOCViktoriya Sumy v Agrobiznes Volochisk● live 1-0 · Ukraine - Persha Liga1.116.1330.591.22
BASKyoto Hannaryz v Levanga Hokkaido● live · Japan - B.League Premier3.38—1.293.62
BASIbaraki Robots v Ryukyu Golden Kings● live · Japan - B.League Premier1.22—4.441.27
BASKawasaki Brave Thunders v Altiri Chiba● live · Japan - B.League Premier1.92—1.822.05
BASShimane Susanoo Magic v Toyama Grouses● live · Japan - B.League Premier1.03—12.091.09
BASCheongju KB Stars v Woori Bank Woori Won● live · Korea - WKBL2.24—1.612.39
30 s delayed public sample · decimal11:04:19 UTC
Live events
64
Prematch
7,596
Markets tracked
31,397
Sports
13
From
$29/mo
01 — What ships with a key

Built for the bot, not the browser.

Everything you would otherwise write yourself — reconnection, merge rules, odds conversion, margin removal, kickoff detection — done once on our side and delivered as clean JSON.

F/01Push

One WebSocket, sub-second

Prices are pushed the moment they change. Subscribe once and receive a snapshot followed by delta-only updates — no polling loop, no wasted quota.

F/02Filters

Server-side filters

Subscribe by sport, league, event, market type and live or prematch. You only receive — and only pay bandwidth for — what you asked for.

F/03Schema

A clean, documented schema

Events and markets with stable ids, decimal and American odds, lines, periods, max stake and cut-off time. No raw feed archaeology.

F/04Fair odds

No-vig prices built in

Every market carries its margin plus fair probability and fair decimal price per outcome — the benchmark for +EV and arbitrage work.

F/05History

Closing-line archive

The last prematch price of every market is stored at kickoff. Query closing lines by event or day to measure CLV and backtest models.

F/06Self-serve

Keys for every project

Create, rename and revoke as many keys as you need, see usage per key, upgrade or cancel from the dashboard. Keys are stored hashed.

01Soccer
02Tennis
03Basketball
04Ice hockey
05American football
06Baseball
07Rugby
08MMA
09Boxing
10Volleyball & handball
11Esports
12Golf
13Cricket
02 — Wire up in minutes

Subscribe once. Get deltas forever.

Connect with your key, send one subscribe message and you are streaming. Plain WebSocket — any language works, compression optional.

# pip install websockets
import asyncio, json, os, websockets

async def main():
    url = "wss://pinnfeed.io/v1/stream"
    async with websockets.connect(url, additional_headers={"x-api-key": os.environ["PINNSOCKET_KEY"]}) as ws:
        await ws.send(json.dumps({"type": "subscribe", "sports": ["soccer"], "live": True}))
        async for raw in ws:
            msg = json.loads(raw)
            if msg["type"] == "ping": await ws.send('{"type":"pong"}')
            elif msg["type"] == "delta":
                for c in msg["changes"]:
                    if c["kind"] == "market" and c["op"] == "upsert":
                        m = c["market"]; print(m["key"], [(o["name"], o["decimal"], o["fair"]) for o in m["outcomes"]])

asyncio.run(main())
{
  "type": "delta", "seq": 48213, "ts": 1762679412093,
  "changes": [{
    "kind": "market", "op": "upsert",
    "market": {
      "id": "1640278226:s;0;m", "eventId": 1640278226,
      "type": "moneyline", "period": 0, "main": true, "live": true,
      "margin": 0.0357, "maxStake": 1500,
      "outcomes": [
        { "name": "home", "american": -128, "decimal": 1.781, "fair": 1.845, "fairProb": 0.5421 },
        { "name": "draw", "american": 262,  "decimal": 3.62,  "fair": 3.750, "fairProb": 0.2667 },
        { "name": "away", "american": 405,  "decimal": 5.05,  "fair": 5.230, "fairProb": 0.1912 }
      ]
    }
  }]
}
  • Snapshot, then deltas. A chunked snapshot on subscribe, then only the markets that changed, batched per upstream update.
  • Removals are explicit. Suspended or settled markets arrive as op: "remove", so your book never shows stale prices.
  • REST mirrors the socket. The same objects are available from GET /v1/odds for cron jobs and backfills.
03 — Counterparties

Push-first, priced for builders.

Typical public figures as of November 2026. Most odds APIs are REST-only or put streaming behind enterprise pricing.

PinnFeedTypical odds APIEnterprise feeds
DeliveryWebSocket push + RESTREST pollingPush
WebSocket from$29/moAdd-on or 2× plan priceContract
No-vig fair oddsEvery marketRarelySometimes
Closing-line historyBuilder and aboveSeparate productExtra
OnboardingEmail signup, key in secondsSignup + cardSales call
Entry priceFree · $29/mo$30–99/mo$1,000s/mo
04 — Terms

Simple monthly plans.

Start free with delayed data, upgrade when you need real time. All prices in USD, billed monthly by Stripe.

Free

$0

Evaluate the data. REST only, 30-second delay.

  • REST snapshots (30 s delay)
  • 2 sports of your choice
  • Main markets
  • 1,000 requests/day
  • No card
Start free

Hobby

$29 /mo

Real-time push for side projects and personal bots.

  • Real-time WebSocket (1 connection)
  • 3 sports
  • Main markets + no-vig fair odds
  • 2 req/s REST
Most popular

Builder

$79 /mo

Every sport and market for production bots.

  • 3 WebSocket connections
  • All 13 sports
  • All markets, alt lines, props & futures
  • 10 req/s REST
  • Closing-odds history

Pro

$199 /mo

High throughput, raw upstream frames, priority support.

  • 10 WebSocket connections
  • Everything in Builder
  • Raw upstream frames option
  • 30 req/s REST
  • Priority support

Enterprise

$499+ /mo

Closing-line archive exports, SLA and commercial licence.

  • From $499/mo
  • Custom connection & rate limits
  • Bulk closing-odds exports (CSV/Parquet)
  • SLA & commercial licence
Contact us
05 — Questions

Questions developers ask.

Something missing? Email support@pinnfeed.io.

Is there still a public Pinnacle API?

Pinnacle closed its public API to most users in July 2025. PinnFeed is an independent service that streams Pinnacle prices to developers over a normalized WebSocket and REST API. You do not need a Pinnacle account.

How is PinnFeed different from other odds APIs?

Most odds APIs poll on a timer and charge extra for push. PinnFeed is push-first: one WebSocket with server-side filters and delta-only updates, plus REST snapshots, decimal and American prices, no-vig fair odds on every market and stored closing lines.

What is a no-vig (fair) price?

Pinnacle prices include a margin. We remove it with the multiplicative method and return the fair probability and fair decimal price for every outcome, so you can compare any bookmaker against the sharpest line without extra maths.

Which sports and markets are covered?

Thirteen sports: soccer, tennis, basketball, ice hockey, American football, baseball, rugby, MMA, boxing, volleyball and handball, esports, golf and cricket. Moneyline (1X2), spreads/handicaps including quarter lines, totals, team totals, every period, plus props and futures on Builder and above.

Is there a free plan?

Yes. The Free plan gives REST access to two sports with a 30-second delay and 1,000 requests a day, with no card. Paid plans add the real-time WebSocket.

Can I cancel any time?

Yes. Plans are monthly through Stripe and you can cancel or switch plans from the dashboard in one click.

Start streaming in five minutes.

Free key, no card. Not a developer? Pinnacle Terminal gives you live screens and drop alerts without code.