Odds API · live + prematch

Pinnacle prices in your code, without the scraping.

PinnRadar serves Pinnacle's in-play and pre-game markets to your application through REST, Server-Sent Events and a raw WebSocket, and it flags falling prices for you on the server.

Email only · no Pinnacle account · independent, not affiliated with Pinnacle

Phases
Live + prematch
Sports
13
Transports
REST · SSE · WS
Free key
$0, email only

01 · Ways in

Pull it, stream it, or ask for it.

Since the official API went dark in July 2025, the same market data has to come from somewhere. Here it comes over four doors, all opened by a single API key. Moving an old integration over? See the Pinnacle API alternative page for a call-by-call map.

  1. REST

    Snapshots on demand

    /kit/v1/markets returns everything in play right now; /kit/v1/prematch/markets does the same for upcoming fixtures. Add sport_id to narrow it and since to fetch only what changed.

    pull
  2. SSE

    Drop alerts as they fire

    /odds-drop (in-play) and /odds-drop-prematch push each detected fall with the old price, the new one and the no-vig fair price, nvp. The polling twin is /api/drops, which adds drop_pct. Thresholds and fields are on the dropping odds API page.

    push · alerts
  3. WSS

    The raw upstream stream

    /ws/feed relays every frame untouched, for systems that hold a full copy of the book. It is a paid add-on; the WebSocket page covers it in depth.

    push · raw
  4. MCP

    Questions from an AI assistant

    Claude, Cursor, VS Code or Codex can query the same data through the hosted MCP server, billed to your normal plan.

    tools

02 · First call

One GET, the whole board.

Put your key in the x-portal-apikey header (or x-api-key, or ?key= for a quick browser test) and request the markets. The reply lists every event with its periods, and each period carries its moneyline, spread and total ladders.

The /kit/v1 layout follows the shape most third-party Pinnacle clients already parse, so moving an existing integration over is usually a matter of swapping the base URL and the key.

There is nothing to install: any HTTP client will do. The documentation has copy-and-run examples for Node, Python, Go and PHP.

Need props or futures? Pass include_specials=1. Prematch soccer grows from around 1,500 rows to around 12,400 once specials are on; each one points back to its match through parent_id.

shelllive basketball
# in-play basketball (sport 3), key read from the environment
curl -sG https://pinnradar.com/kit/v1/markets \
  -H "x-portal-apikey: $PINNRADAR_KEY" \
  -d sport_id=3 -d event_type=live
replyone event, shortened
{ "sport_id": 3, "last": 1794213960,
  "events": [{
    "event_id": 1632907731, "event_type": "live",
    "league_name": "Spain - ACB",
    "home": "Valencia", "away": "Unicaja",
    "periods": { "num_0": {
      "money_line": { "home": 1.719, "away": 2.18 },
      "spreads": { "-3.5": { "hdp": -3.5, "home": 1.934, "away": 1.925 } },
      "totals": { "161.5": { "points": 161.5, "over": 1.892, "under": 1.97 } }
    } }
  }]
}

03 · In every response

Same depth on every plan.

Tiers change how often you may call and whether you get push. They never trim the markets.

Lines

Quarter lines included

Asian handicaps and totals at .25 and .75 steps (2.25, 2.75 and so on) ship on the free key as much as on Scale.

Drops

Fair price attached

Every alert carries from_price, to_price and nvp, so measuring edge is one division: to / nvp - 1.

Specials

Props on request

Player and team props, correct scores and outrights stay out of the payload until you ask for them.

Phases

In-play and pre-game

Moneyline, spreads, totals and team totals across 13 sports, soccer, tennis, basketball and esports among them.

Integration

Plain HTTP

One header and a GET for REST, curl -N or EventSource for SSE. No package to install or keep updated.

Live state

Score with the drop

In-play drop alerts end with a live object: score, minute or clock, cards and corners at the moment the price fell.

04 · Options

Getting Pinnacle odds in 2026.

There are really three routes. One of them is closed.

Official APIYour own scraperpinnradar
StatusWithdrawn July 2025Breaks when the site changesRunning and maintained
Freshnessn/aLimited by your poll loopPushed as it happens
Upkeepn/aYours, at any hourHandled for you
Drop detectionNot offeredWrite the diffing yourselfServer-side, with nvp
Helpn/aNobodyEmail

PinnRadar covers one bookmaker on purpose: Pinnacle as the sharp reference price. It is not a multi-book comparison grid and keeps no history. Arbitrage against soft books or long back-tests need a second source alongside it.

05 · Built on it

What customers run on the feed.

Value

+EV scanners

Compare a soft book's price against Pinnacle's margin-free number and bet only where the gap is real.

Alerts

Steam bots

Listen on the SSE stream and forward the moves that clear your own threshold to wherever your team works.

Grading

Closing-line checks

Store the last price before kick-off and grade every bet you placed against it.

06 · Questions

Before you integrate.

Anything else goes to @PinnRadarSupport on Telegram or info@pinnradar.com, answered by the people who run the feed.

Is there still an official public Pinnacle API?

No. Pinnacle shut its public API in July 2025 and now deals only with selected business partners. PinnRadar is one independent way to get those live and prematch prices into code today, through a self-serve key that works on REST, SSE and WebSocket.

Does PinnRadar have any link to Pinnacle?

None. PinnRadar is an independent data service. It is not affiliated with, endorsed by or connected to Pinnacle, and you never need a Pinnacle account to use it.

How quickly do price changes arrive?

On the WebSocket feed each change is pushed as it happens, and the SSE streams emit a drop the moment the engine detects it. REST is on demand: a call to /kit/v1 returns the state at that instant.

What does access cost?

A Free key costs nothing, with just an email. REST at 10 requests a second is $99 a month, REST plus the SSE drop streams is $149, and Scale is $229. The raw WebSocket is a $99 monthly add-on on any plan with REST. Longer billing terms cut up to about 24%. Full breakdown on the pricing page.

Can I get historical odds?

Not from PinnRadar. It is a real-time service with no archive of past prices. Teams that want history record the /ws/feed stream themselves and keep their own store.

Which sports and markets are included?

13 sports, soccer, basketball and tennis among them, in both live and prematch. You get moneyline, spreads, totals and team totals with quarter lines on every plan. Props, exact scores and futures come back when you add include_specials=1.

Can I look at current prices before signing up?

Yes. The public live odds board shows moneyline, spread and total by sport and refreshes every minute from the feed behind the API. Large moves are listed on the odds drops page.

Make your first call today.

The Free key costs nothing and never expires. Every new account also starts with a three-day full demo of the push streams, so you can try them before paying.