Skip to content
View pinnapi's full-sized avatar
  • Joined Jun 11, 2026

Block or report pinnapi

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
pinnapi/README.md

pinnapi SDK — real-time Pinnacle odds API for Python & JavaScript

PyPI npm CI License: MIT

Official client libraries for pinnapi.com — real-time Pinnacle odds, dropping-odds alerts, and steam-move detection over REST, Server-Sent Events, and WebSocket. Live and prematch, across 10+ sports, with ~15–40 ms frame-to-client latency.

Does Pinnacle still have a public API? No. Pinnacle closed its public API on July 23, 2025 — only bespoke commercial/academic access remains. pinnapi is an independent drop-in alternative to the Pinnacle API: the same familiar response shape, served from its own real-time feed. Swap the base URL and API key in existing Pinnacle-style client code; no Pinnacle account needed.

Get a free trial key in seconds at pinnapi.com — no card, no email verification; the key is your login.


Install

pip install pinnapi        # Python 3.8+  (requests only)
npm install pinnapi        # Node 18+     (zero dependencies, TypeScript types included)

Quickstart — Python

from pinnapi import Client, SPORTS

api = Client("YOUR_KEY")

# Live soccer markets — moneyline, spreads, totals, team totals, every period
events = api.markets(sport_id=SPORTS["soccer"])

# Prematch fixtures
fixtures = api.prematch_fixtures(sport_id=SPORTS["tennis"])

# Real-time odds-drop alerts (SSE) — fires the instant a price falls past your threshold
for drop in api.stream_drops(min_drop=5):
    print(f'{drop["home"]} v {drop["away"]} · {drop["market"]} '
          f'{drop["from"]}{drop["to"]} (▼{drop["drop_pct"]}%)')

Quickstart — JavaScript / TypeScript

import { Client, SPORTS } from "pinnapi";

const api = new Client("YOUR_KEY");

const events = await api.markets({ sportId: SPORTS.soccer });

for await (const drop of api.streamDrops({ minDrop: 5 })) {
  console.log(`${drop.home} v ${drop.away} · ${drop.market}`,
              drop.from, "→", drop.to, `▼${drop.drop_pct}%`);
}

More runnable code in examples/.

Why Pinnacle odds?

Pinnacle is the market's reference price — a low-margin, high-limit book that moves its line instead of banning winners. That makes its odds the closest thing to a consensus "true" probability, which is why closing-line value (CLV) is measured against it. When Pinnacle's line breaks, the soft books take seconds to follow; everything in between is the window for arbitrage, +EV betting, and steam chasing. This feed is push, not poll — you hear about the move when it happens, not on your next request.

What's in the box

Surface Endpoint Use it for
REST markets GET /kit/v1/markets Live or prematch snapshots for a sport
REST event GET /kit/v1/details One live event, full structure
REST prematch GET /kit/v1/prematch/{fixtures,markets,lines} Pre-game boards
Drops buffer GET /api/drops "What just dropped" without an open connection
SSE streams /odds-drop, /odds-drop-prematch Real-time drop alerts (the point of the product)
WebSocket /ws/feed (add-on) Every raw Pinnacle frame, byte-identical

Sports: soccer, tennis, basketball, hockey, football, baseball, rugby, MMA, boxing, volleyball/handball, esports, golf. No-vig fair prices included.

FAQ

Is this an alternative to the closed Pinnacle API? Yes — drop-in compatible response shapes; migrate by swapping base URL + key.

How fast is it? ~15–40 ms from Pinnacle frame to your client over SSE/WebSocket. Polled aggregators are typically seconds stale.

Is there a free tier? A free trial key (no card) covers all REST endpoints at 100 requests/day. SSE drop streams are on paid plans, from $99/mo.

Historical odds? No — this is a real-time feed. Buffer the stream yourself, or query /api/drops for recent drops.

Docs? Human docs at pinnapi.com/docs · LLM-friendly single-file reference at pinnapi.com/llms-full.txt · guides on the blog.

Repository layout

python/       pip install pinnapi   — source, tests (unittest)
javascript/   npm install pinnapi   — source, types, tests (node --test)
examples/     runnable drop-alert bots in both languages

Contributing & support

Issues and PRs welcome — see CONTRIBUTING.md. Commercial support: info@pinnapi.com.

pinnapi is an independent service, not affiliated with or endorsed by Pinnacle. MIT licensed.

Popular repositories Loading

  1. pinnapi pinnapi Public

    Official Python & JavaScript SDKs for pinnapi.com — real-time Pinnacle odds, dropping-odds alerts & steam-move detection API. The drop-in alternative to the closed Pinnacle API.

    Python

  2. public-apis public-apis Public

    Forked from public-apis/public-apis

    A collective list of free APIs

    Python