On the wire · 04:53:21 UTC Live 550 · Prematch 14,382 · Markets 56,949 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Antwort · Node · Reconnect

Pinnacle-Quoten-WebSocket in Node.js mit Reconnect

Aktualisiert am · PinnFeed · 2 Min. Lesezeit

Antwort: bei close wartest du min(delay*2, 30000) ms plus Jitter, öffnest einen neuen Socket, sendest subscribe erneut und baust den Zustand aus dem neuen snapshot auf (Maps leeren, wenn part === 1). Antworte immer auf den ping des Servers mit {"type":"pong"}, sonst schließt der Server nach etwa 60 s. Builder-Tarif nötig (99 €/Monat). Vollständige Datei: stream.mjs im Python- und Node-Guide.

Reconnect-Muster#

// Example — npm install ws; export PINNFEED_KEY=...
import WebSocket from 'ws';

const WS_URL = process.env.PINNFEED_WS || 'wss://pinnfeed.io/v1/stream';
const KEY = process.env.PINNFEED_KEY;
const events = new Map();
const markets = new Map();

function connect(delay = 1000) {
  const ws = new WebSocket(WS_URL, { headers: { 'x-api-key': KEY } });
  ws.on('open', () => {
    delay = 1000;
    ws.send(JSON.stringify({
      type: 'subscribe',
      sports: ['soccer', 'tennis'],
      markets: ['moneyline'],
      main: true,
      specials: false,
    }));
  });
  ws.on('message', (raw) => {
    const msg = JSON.parse(raw);
    if (msg.type === 'ping') return ws.send('{"type":"pong"}');
    if (msg.type === 'snapshot') {
      if (msg.part === 1) { events.clear(); markets.clear(); }
      msg.events.forEach((e) => events.set(e.id, e));
      msg.markets.forEach((m) => markets.set(m.id, m));
      if (msg.final) console.log(`book ready: ${events.size} events, ${markets.size} markets`);
    }
    // apply deltas the same way as in the full stream.mjs
  });
  ws.on('close', (code) => {
    const wait = Math.min(delay * 2, 30000);
    console.log(`closed (${code}); reconnecting in ${wait / 1000}s`);
    setTimeout(() => connect(wait), wait + Math.random() * 1000);
  });
}
connect();

Close-Code 1001 (server_shutdown) bedeutet ein Deployment: mit Backoff neu verbinden (WebSocket-Doku). Vermeide den Ansturm: Jitter zählt.

Tarife#

Mit Builder starten. Testphase 3 Tage; eine Karte ist nötig und wird nach Tag 3 belastet, wenn du nicht kündigst. Siehe auch: Python-Beispiel.

Bildungsinhalt für Erwachsene (18+). Keine Tipps, kein Gewinnversprechen. In Deutschland nur bei Anbietern auf der GGL-Whitelist wetten.

Häufige Fragen#

Verwende ich dieselbe Map über Reconnects hinweg?#

Leere sie beim ersten Snapshot-Teil (part === 1). Sonst behältst du Märkte, die der neue Snapshot nicht mehr enthält.

Kann Hobby sich mit dem Stream verbinden?#

Hobby hat keinen WebSocket. Du bekommst 403 plan_lacks_ws, bevor irgendeine Reconnect-Logik läuft.

Der WebSocket-Plan: Builder, 99 €/Monat.

Pinnacle-Quoten in Echtzeit über einen einzigen WebSocket: alle 13 Sportarten, alle Märkte, faire Quoten ohne Marge und Schlussquoten. 3 Tage kostenlos, mit einem Klick kündbar.

Form K-1 · Free API key

Get your free API key.

One field. No password, no card: enter your email, click the link we send, and your key is on screen.

By continuing you agree to the Terms and Privacy Policy.

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