Skip to main content
The /ws/live channel emits only events that describe game state. No price changes, no market movement, no odds. If you want a scoreboard UI, this is your channel.

Event types on this channel

No price_change events are delivered on this channel.

Real captured sample

This is the exact wire content from wss://books.polynode.dev/ws/live during a live Copa Libertadores match (Estudiantes 2-1 Cusco, 94’ stoppage):
Notice the sequence: welcome → snapshot → deltas. The snapshot gives you the baseline state of all 11 currently-live games, then deltas flow from that point forward. The first game (10035-20332-2026-04-14) is polynode-unmapped (pn_slug: null) — a Nacional @ Tolima fixture whose teams aren’t in polynode’s roster. The second is lib-gar-est-2026-04-14 (Estudiantes vs Cusco FC, currently 2-1).

Why is this channel quiet sometimes?

During calm windows — no goals, no score changes, no clock rollovers, no games going live — this channel emits nothing except welcome and occasional heartbeat pings. That’s correct. It’s a state-change channel, not a heartbeat channel. If you’re building an idle-tolerance UI: show connection status from the TCP/WebSocket state, not from “did we get a message in the last N seconds.” A live /ws/live stream with zero messages for 5 minutes just means no goals were scored.

Filtering

Server-side filtering is not yet implemented in v1. All subscribers to /ws/live receive all live events for all mapped sports and leagues. Filter client-side on pn_league_code, sport_category (via a lookup from pn_league_code), or pn_slug.

Example: Python client

Sample output during an active soccer match:

Example: Node.js client

See also

  • Event Reference — full schema for score_change, status_change, game_final, new_game
  • Odds Channel — for price events alongside live state