On the wire · 14:57:17 UTC Live 119 · Prematch 8,510 · Markets 34,189 Vol. I · No. 1 · Monday 9 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Answer · Steam · Drops

Detect steam moves on Pinnacle via API

Updated · PinnFeed · 2 min read

Answer: stream the book on Builder, keep a rolling high per outcome, and alert when decimal shortens by ≥5% inside ~2 minutes with maxStake high enough (e.g. ≥500). Or poll GET /v1/drops?sport=soccer&live=true&minutes=10&min_pct=5. Full detector: steam guide.

Practical definition#

  • Price drop ≥ 5% from the window high (tune with MIN_DROP).
  • Window ≈ 2 minutes (tune with WINDOW_S).
  • Prefer markets with meaningful max stake so thin lines do not spam.
  • Alert once per outcome per window.

This is a statistical signal used by sharp monitors — not a tip and not a guarantee of +EV.

WebSocket outline (Builder)#

Reuse the shared client from the Python guide (on_market callback):

# Example outline — full steam.py is in the steam guide
from collections import defaultdict, deque
import time

WINDOW_S, MIN_DROP, MIN_STAKE = 120, 0.05, 500
hist = defaultdict(deque)  # key -> deque[(ts, decimal)]

def on_market(old, new, event):
    if not event or (new.get("maxStake") or 0) < MIN_STAKE:
        return
    now = time.time()
    for o in new["outcomes"]:
        if o["name"] not in {"home", "away", "draw", "over", "under"}:
            continue
        k = (new["id"], o["name"])
        q = hist[k]
        q.append((now, o["decimal"]))
        while q and now - q[0][0] > WINDOW_S:
            q.popleft()
        peak = max(p for _, p in q)
        drop = (peak - o["decimal"]) / peak
        if drop >= MIN_DROP:
            print(f"STEAM {event['home']} v {event['away']} {new['type']} {o['name']}: "
                  f"{peak:.3f} -> {o['decimal']:.3f} ({drop:.1%}) max {new.get('maxStake')}")
            q.clear()  # one alert per window

REST shortcut#

curl -sS -H "x-api-key: $PINNFEED_KEY" \
  "https://pinnfeed.io/v1/drops?sport=soccer&live=true&minutes=10&min_pct=5"

Trial CTA#

Live steam needs the WebSocket → Builder pricing. 3-day trial; card required, charged after day 3 unless cancelled. Also: CLV tracking.

Questions people ask#

Does Free include /v1/drops?#

REST drops follow your plan's delay and sports limits. Free is delayed 30 s and capped at 2 sports; Hobby polls /v1/drops in real time. Streaming detection over the WebSocket needs Builder.

What is a steam move?#

A fast, sharp price shorten at a market-making book like Pinnacle, often followed later by soft books. Educational definition only.

Is this educational content for adults?#

Yes (18+). No guaranteed profit, no sure bets.

The WebSocket plan: Builder, €99/mo.

Real-time Pinnacle odds pushed over one WebSocket, all 13 sports, every market, no-vig fair odds and closing lines. 3 days free, cancel in one click.

Form K-1 · Free API key

Get your free API key.

No password. We email you a link; click it and your key is on screen.

One free key per email. Link valid for 20 minutes.