On the wire · 04:54:55 UTC Live 549 · Prematch 14,380 · Markets 56,930 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Réponse · Node · Reconnexion

WebSocket des cotes Pinnacle en Node.js : reconnexion

Mis à jour le · PinnFeed · 2 min de lecture

Réponse : sur close, attendez min(delay*2, 30000) + jitter ms, ouvrez un nouveau socket, renvoyez subscribe et reconstruisez l'état depuis le nouveau snapshot (videz les maps quand part === 1). Répondez toujours au ping du serveur par {"type":"pong"}, sinon le serveur vous déconnecte au bout d'environ 60 s. Offre Builder requise (99 €/mois). Fichier de référence : stream.mjs dans le guide Python et Node.

Schéma de reconnexion#

// 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();

Le code de fermeture 1001 (server_shutdown) signale un déploiement : reconnectez-vous avec backoff (docs WebSocket). Évitez la ruée : le jitter compte.

Offres#

Builder : Essai de 3 jours ; carte requise, débitée après le jour 3 sauf résiliation. Voir aussi : exemple Python et snapshot et delta.

Contenu éducatif pour adultes (18+) : ni pronostics ni promesse de gain. En France, seuls les opérateurs agréés par l'ANJ peuvent proposer des paris en ligne.

Questions fréquentes#

Faut-il réutiliser la même Map entre les reconnexions ?#

Videz-la sur la première partie du snapshot (part === 1). Sinon vous gardez des marchés que le nouveau snapshot ne mentionne plus.

Hobby peut-il se reconnecter au flux ?#

Hobby n'a pas de WebSocket : vous recevez 403 plan_lacks_ws avant toute logique de reconnexion.

Le plan WebSocket : Builder, 99 €/mois.

Les cotes Pinnacle en temps réel sur un seul WebSocket : les 13 sports, tous les marchés, cotes justes sans marge et cotes de clôture. 3 jours gratuits, résiliable en un clic.

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.