Confirm the base plan and add-on
Pinnacle data documents raw WebSocket as a separately charged add-on for REST snapshots, REST + SSE and High-volume REST. The SSE drop alerts plan and trial plans are not eligible base plans for that add-on. Raw streaming does not automatically supply the processed SSE alert product. Check the current account entitlements before opening the connection. The pricing page calculates eligible combinations from the published price schedule. Checked against the current documentation, September 26, 2026.
The documented endpoint is a wss: feed URL, with the key in its connection query string. Keep this connection on a trusted server and redact the entire URL from logs. This site never asks you for a key or opens a connection in your browser.
Subscribe, establish a baseline, then consume
The service requires a subscription message soon after the socket opens; the documentation specifies five seconds. Send the requested streams and supported filters immediately. Use the documented sport IDs: for example, 1 is soccer, 2 tennis, 3 basketball and 4 hockey. A label copied from a marketing snippet is not a schema contract. Checked against the current documentation, September 26, 2026.
Start with one live sport. Collect snapshot chunks using their seq and final markers before exposing a complete baseline, and answer each application ping with the documented pong. Add an idle watchdog, a snapshot deadline, a connection-attempt limit and a total run budget, so a silent or repeatedly failing connection cannot run forever.
Do not show a feed as ready merely because the TCP connection is open. Your application needs both the transport and a usable baseline. The excerpt above leaves your application-specific frame handling undefined on purpose.
A reconnect invalidates old assumptions
On a disconnect, mark the local baseline invalid. Close the old socket, reconnect within a bounded budget, resubscribe and wait for the new snapshot to complete. Do not continue presenting stale state as current while that happens. If you cannot confirm the old socket closed, stop reconnecting rather than open a second one: the service allows one WebSocket connection per account, and a new connection evicts the old.
This is recovery by rebuilding a baseline. It is not guaranteed replay of frames missed during the outage. We found no basis for promising durable replay or exactly-once delivery. Record gaps in your own system and decide whether downstream work should pause.
Forwarding raw frames is not reconstructing a market
The feed’s live records use rec.id; this differs from REST’s event_id. Market updates can be partial and include their own keys and versions. A consumer must interpret update and deletion semantics, merge at the appropriate market boundary, and avoid replacing an entire event with one partial update. Some channel descriptions in the documentation conflict; clarify them with the service before treating the stream as a trading book. Checked against the current documentation, September 26, 2026.
Forwarding validated raw envelopes after the baseline gate is only the first layer. A complete market-state engine, prematch reconstruction, backpressure handling and live performance measurement remain your work. Set the client’s maximum message size deliberately: the documentation recommends 8 MB, and native Node WebSocket has no configurable frame-size ceiling, so bound messages after receipt there.
Test the failures you intend to survive
Before live use, exercise an incomplete snapshot, duplicate chunk, dropped connection, stalled socket, invalid message and account-eviction response. Confirm that shutdown stops new retries. Then run owner-authorized live validation against the actual account. If those responsibilities exceed your needs, REST snapshots or SSE alerts may be a simpler starting point.