On the wire · 04:34:23 UTC Live 547 · Prematch 14,368 · Markets 56,913 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Respuesta · Node.js · WebSocket

Aplicar snapshot y deltas de Pinnacle en un Map de Node

Actualizado el · PinnFeed · 1 min de lectura

Respuesta: tras subscribe, aplica las partes del snapshot en un Map indexado por id de mercado (eventId:key), luego cada changes[] de los deltas (upsert / remove). Cliente completo: guía Python/Node. Requiere Builder (€99/mes).

Lógica de fusión#

import WebSocket from "ws";

const markets = new Map(); // id -> market object
const KEY = process.env.PINNFEED_KEY;

function applyChange(ch) {
  if (ch.op === "upsert" || ch.type === "upsert") {
    const m = ch.market || ch.value;
    markets.set(m.id, m);
  } else if (ch.op === "remove" || ch.type === "remove") {
    markets.delete(ch.id || ch.marketId);
  }
}

const ws = new WebSocket("wss://pinnfeed.io/v1/stream", {
  headers: { "x-api-key": KEY },
  perMessageDeflate: true,
});

ws.on("open", () => {
  ws.send(JSON.stringify({
    type: "subscribe",
    sports: ["soccer"],
    markets: ["moneyline"],
    main: true,
  }));
});

ws.on("message", (buf) => {
  const msg = JSON.parse(buf.toString());
  if (msg.type === "ping") return ws.send(JSON.stringify({ type: "pong" }));
  if (msg.type === "snapshot" || msg.part != null) {
    for (const m of msg.markets || []) markets.set(m.id, m);
  }
  if (msg.type === "delta" && Array.isArray(msg.changes)) {
    for (const ch of msg.changes) applyChange(ch);
  }
});

Los nombres de campo siguen la doc WebSocket. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra tras el día 3 salvo que canceles.

Ver también: snapshot y delta · reconexión Node · frames raw (Pro).

Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.

Preguntas frecuentes#

¿Los eventos se fusionan igual?#

Sí — guarda un segundo Map para eventos si necesitas metadatos home/away; snapshot y delta pueden llevar ambos.

¿Por qué Builder?#

Las claves Free/Hobby reciben 403 plan_lacks_ws en el WebSocket. El polling REST funciona en Free; el push necesita Builder o Pro.

El plan WebSocket: Builder, 99 €/mes.

Cuotas de Pinnacle en tiempo real por un único WebSocket: los 13 deportes, todos los mercados, cuotas justas sin margen y cuotas de cierre. 3 días gratis y cancelas con 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.