Skip to content

PinnOdds API Review 2026

PinnOdds is a Pinnacle-only odds API offering REST snapshots, SSE drop alerts, and a raw WebSocket feed. Plans start at $99/mo, and a free key with no expiry gets you live data with no card required.

PinnOdds at a Glance

PinnOdds Logo
PinnOdds
๐Ÿ’ฒ to ๐Ÿ’ฒ๐Ÿ’ฒ๐Ÿ’ฒ
Free Tier
Pregame Live Bet365 Pinnacle Closing SGP Futures Deeplinks Settlement Stats Schedules Websocket MCP Discord

Streaming from: Stream, $99/mo (SSE drop alerts); raw WebSocket from $198/mo

Green = available ยท amber = unverified or varies by plan ยท crossed out = not available. Pricing: ๐Ÿ’ฒ โ‰ˆ $20/mo up to ๐Ÿ’ฒ๐Ÿ’ฒ๐Ÿ’ฒ๐Ÿ’ฒ๐Ÿ’ฒ = $1,000+/mo. From our directory research.

PinnOdds Coverage

From the provider's docs, checked : 1 book, 14 leagues, 6 markets, +4 other markets.

Global books

Boxing

Boxing
13 more leagues as the provider labels them
Baseball Basketball Cricket Esports Football Golf Handball Hockey MMA Rugby Soccer Tennis Volleyball
Markets by family
Family Markets
Mainlines 4
Game props 2
Other markets 4

Each market counts once, however many leagues carry it. Other markets are the provider's own market labels that we have not matched to our market names yet. The extra league labels come straight from the provider and are not matched to our league names yet. These labels still count in the totals.

Live odds: yes, per the provider's docs.

What PinnOdds Is

PinnOdds is a Pinnacle-sourced odds API that appeared after Pinnacle closed its public API in July 2025. You get live and pre-game prices from one book, delivered through REST endpoints, Server-Sent Events (SSE) for drop alerts, and an optional raw WebSocket feed. No aggregation, no other books, no stats layer.

The distinguishing angle is the SSE drop-detection stream. Most Pinnacle alternatives give you a price snapshot and leave you to diff it yourself. PinnOdds watches for price movements above a threshold (5% by default, configurable down to 1%) and pushes them to your client as they happen. If your strategy reacts to steam moves or line drops, that saves you a polling loop and a comparison layer. For more context on why Pinnacle access matters, see our Pinnacle API guide.

Coverage and Markets

PinnOdds tracks 13 sport categories, all sourced from Pinnacle's board:

  • US majors: NFL, NBA, MLB, NHL, plus college football (NCAAF) under Football and college basketball (NCAAB) under Basketball.
  • Global: soccer, tennis, rugby (union and league), cricket (added July 2026), golf, and volleyball/handball.
  • Combat sports: MMA and boxing as separate categories.
  • Esports: Dota 2, CS2, and League of Legends.

Market types cover moneylines, spreads, totals, team totals, and quarter lines. Player props, exact scores, and futures are available through a include_specials=1 flag on the fixtures endpoint.

A note on the data file: the directory marks PinnOdds as having no futures and no schedules. The docs do expose specials (which include futures) via that flag, but the core feed does not list them by default. If futures matter to your workflow, test the specials endpoint on the free key before you commit.

REST, SSE, and WebSocket

Three delivery modes, each gated by plan tier. REST lives under /kit/v1/ with endpoints for live markets, pre-match fixtures, and single-event detail. Auth accepts an x-portal-apikey header, an x-api-key header, or a ?key= query parameter.

SSE streams push odds-drop alerts for live (/odds-drop) and pre-match (/odds-drop-prematch) markets. The pre-match stream has a ?recheck=N parameter that holds an alert for N seconds to verify the move is stable before firing. One SSE connection per account.

The raw WebSocket feed is a $99/mo add-on that relays Pinnacle's MQTT frames. The site claims that each update leaves PinnOdds about 5 ms after it arrives and that a client in Europe typically has it about 35 ms later, with live REST lag under 200 ms (checked November 2026). Compression is available but adds tail latency (p99 around 1.2 seconds per the docs). One WebSocket connection per account, and you subscribe by sport or event ID after connecting.

Official SDKs exist for Python (pip install pinnodds) and Node.js (npm install pinnodds), which wrap the REST and SSE interfaces.

PinnOdds Pricing and the Free Key

Four tiers, with the WebSocket feed as a separate add-on:

  • Trial (free, no expiry): 20 requests per minute, 100 per day, live and pre-match REST. No card required, and the site calls it "free forever to test." Enough to explore the endpoints and validate data quality, but the daily cap runs out fast if you poll aggressively. A 3-day full demo with SSE, WebSocket and 10 requests/second is available on request.
  • Stream, $99/mo: REST plus SSE drops. The REST rate limit is 20 requests per minute, 100 an hour and 100 a day, the same as the free key, which is thin for production use. This tier is really for monitoring drops rather than building a polling-based application.
  • Pro, $99/mo: REST with 10 requests per second and unlimited daily volume, but no SSE drops.
  • Pro + SSE, $149/mo: Pro rate limits plus SSE drop streams. The middle ground.
  • Scale, $229/mo: 30 requests per second plus SSE drops.
  • Raw WebSocket Feed, +$99/mo: Add-on for Pro, Pro + SSE, or Scale. Raw Pinnacle frames.

Quarterly billing saves roughly 16%, semi-annual roughly 24%. The plan structure is flexible but harder to parse than a single flat tier. Stream and Pro cost the same but serve different use cases (drops vs throughput), so read the rate limits before you pick.

SportsMeld: The Entity Matching Service

PinnOdds bundles a separate service called SportsMeld for entity resolution. It matches team and player names across bookmakers and clusters identical fixtures, which is the kind of unglamorous plumbing work that eats days when you build it yourself. SportsMeld runs on a separate base URL (sportsmeld.arbitragex.pro) with its own API key and a free 30-day trial for all PinnOdds users.

If you are cross-referencing Pinnacle lines against a soft-book feed from another provider, consistent entity names save you a mapping table. If you are only consuming PinnOdds data in isolation, you probably do not need it.

Getting an API Key

Sign up on the PinnOdds home page. You enter an email address, click the verification link, and the key arrives in your inbox. There is no card and no Pinnacle account, and the key doubles as your dashboard login. A new key starts on the free tier, which does not expire (from the provider's llms.txt, checked November 2026).

Send the key in the x-portal-apikey header. A request without one gets a 401 with {"error":"missing_key"}, and a wrong key gets invalid_key. If you want to test SSE and the WebSocket before you pay, ask for the 3-day full demo on Telegram at @ArbitrageXpro. It lifts the REST limit to 10 requests a second.

A First Request in Python

This sample pulls the live soccer board from /kit/v1/markets, where sport 1 is soccer. It comes from the docs, checked November 2026.

import os
import requests

resp = requests.get(
    "https://pinnodds.com/kit/v1/markets",
    params={"sport_id": 1},
    headers={"x-portal-apikey": os.environ["PINNODDS_API_KEY"]},
    timeout=15,
)
resp.raise_for_status()
board = resp.json()

print(board["sport_name"], len(board["events"]), "live events")
for event in board["events"][:3]:
    line = event.get("periods", {}).get("num_0", {}).get("money_line")
    print(event["league_name"], event["home"], "v", event["away"], line)

The response is a JSON object with sport_name, a last cursor and an events list. Each event carries league_name, home, away and a periods object, where num_0 is the full match and holds money_line in decimal odds. Pass last back as since to get only what changed. The list is empty when no match is in play.

Rate Limits, Docs and SDKs

Past a limit, the API returns a 429 with a Retry-After header and a JSON body that names the window and the cap, such as {"error":"rate_limited","window":"minute","limit":20,"retry_after_ms":41052}. The free key's daily cap resets at UTC midnight. SSE and the WebSocket each allow one connection per account, and a second connection evicts the first.

The official clients are Python (PyPI, built on requests) and Node (npm, no dependencies). Both live in one GitHub repo. The docs sit beside an OpenAPI file at /openapi.json, a Postman collection and /llms-full.txt. There is no public status page: /ping needs no key, and /health reports feed age. Support runs on Telegram and at info@pinnodds.com. The docs also describe a remote MCP server with 8 tools.

Who PinnOdds Is For

The SSE drop-detection layer is the clearest differentiator from other Pinnacle feeds. That shapes the audience:

  • Steam chasers who want to react to Pinnacle line moves without building their own diff engine.
  • Alerting systems that push drop notifications to Telegram, Discord, or a dashboard.
  • +EV scanners using Pinnacle as the fair-value anchor, pairing PinnOdds with a soft-book aggregator.

Skip it if you need multi-book coverage, closing lines, or historical data. PinnOdds covers one book and does not archive prices. If drop detection is not part of your workflow, a simpler Pinnacle feed at the same price point may be a better fit. Browse the odds API directory for broader options.

Verdict

PinnOdds is a capable Pinnacle feed with a useful SSE layer that most competitors lack. The drop-detection streams and the SportsMeld entity matching add genuine tooling on top of raw price data. Cricket coverage (added July 2026) and official SDKs in Python and Node round out the package.

The pricing structure takes some reading. Stream and Pro are both $99 but give you different things, and the WebSocket add-on pushes total cost to $198 or higher if you want raw frames. The permanent free key is enough to validate the feed against your own requirements. Grab a free key and test the latency and coverage before you lock in a plan.

Last updated: ยท How providers get listed

Frequently Asked Questions

Yes. PinnOdds gives a free key with no card and no expiry; the site calls it "free forever to test." It allows 20 requests per minute and 100 per day on the live and pre-match REST endpoints, so you can validate data quality and latency before paying.
Plans start at $99/mo. Stream ($99) gives REST plus SSE drops with limited rate limits. Pro ($99) gives 10 requests per second with no SSE. Pro + SSE ($149) combines both. Scale ($229) bumps throughput to 30 requests per second. A raw WebSocket add-on costs an extra $99/mo. Quarterly and semi-annual billing discounts are available.
PinnOdds covers 13 sport categories sourced from Pinnacle: soccer, tennis, basketball, hockey, football, baseball, rugby, MMA, boxing, volleyball/handball, esports (Dota 2, CS2, LoL), golf, and cricket (added July 2026). Markets include moneylines, spreads, totals, team totals, and player props.
Yes, as a $99/mo add-on to the Pro, Pro + SSE, or Scale plans. The raw WebSocket feed relays Pinnacle's MQTT frames, and the site claims a client in Europe typically gets each update about 35 ms after PinnOdds forwards it. PinnOdds also offers SSE (Server-Sent Events) streams for drop alerts on certain plans, which push price movements rather than full snapshots.
PinnOdds watches Pinnacle prices for movements above a configurable threshold (5% by default, down to 1%) and pushes alerts via SSE streams. Separate streams cover live and pre-match markets. The pre-match stream can hold alerts for a recheck period to filter out noise. Drop detection is included on Stream, Pro + SSE, and Scale plans.
For live and pre-game Pinnacle pricing with drop alerts, yes. PinnOdds re-serves Pinnacle's lines through REST, SSE, and WebSocket after Pinnacle closed its public API in July 2025. It does not replicate betting functionality, historical data, or closing lines. Read the full Pinnacle API guide for more alternatives.
Enter your email address on the PinnOdds home page, then click the verification link. The key arrives by email. It needs no card and no Pinnacle account, and it doubles as your dashboard login. Send it in the x-portal-apikey header. The free tier does not expire, and a 3-day full demo with SSE and the WebSocket feed is available on request.
The free key and the Stream plan allow 20 requests a minute and 100 a day. Pro and Pro + SSE allow 10 requests a second, and Scale allows 30, all with unlimited daily volume. Past a limit the API returns a 429 with a Retry-After header. SSE and the WebSocket each allow one connection per account.

PinnOdds Alternatives

Similar providers from the directory worth shortlisting alongside PinnOdds.

Want to test Pinnacle odds?

Grab a free key with no card and no expiry, pull live Pinnacle markets, and compare the latency against your current source before you commit.

Are You the Team Behind PinnOdds?

Show developers you're independently listed on SportsAPIs.dev. Copy this badge onto your site. It links straight back to this profile.

Each of these works best on a reviews or "As cited on SportsAPIs.dev" page that your homepage links to, or in a testimonial strip on the homepage.

Badge

PinnOdds is listed on SportsAPIs.dev
<a href="https://sportsapis.dev/apis/pinnodds" title="PinnOdds on SportsAPIs.dev">
  <img src="https://sportsapis.dev/assets/images/badges/listed-on-sportsapis.svg"
       alt="PinnOdds is listed on SportsAPIs.dev" width="220" height="48">
</a>

Text link

<a href="https://sportsapis.dev/apis/pinnodds">Read the PinnOdds review on SportsAPIs.dev</a>

Review quote

<blockquote>
  Pinnacle odds via REST, SSE, and WebSocket with drop alerts.
</blockquote>
<p><a href="https://sportsapis.dev/apis/pinnodds">SportsAPIs.dev review</a></p>

Want a Featured Partner spot or to update your listing? Partner with us โ†’