Raw Pinnacle frames over the WebSocket (Pro)
Answer: on Pro (and Enterprise), add "format":"raw" to your subscribe. Instead of normalized snapshot/delta frames, PinnFeed then sends raw frames: Pinnacle's own matchup and market records, as Pinnacle publishes them, inside a small PinnFeed envelope. Raw frames are filtered by sport only: league, event, market and main filters do not apply, there is no snapshot on subscribe, and no fair, fairProb or margin is added. On Builder the same request returns an error frame with code plan_lacks_raw.
Subscribe#
{"type":"subscribe","sports":["soccer","tennis"],"format":"raw"}
The server answers subscribed with "format":"raw". Keep answering {"type":"ping"} with {"type":"pong"} every 20 s as usual; the 60 s pong timeout and the 4008 slow_consumer close (buffer over 16 MB) still apply, and raw is usually heavier than normalized.
Frame shape#
{"type":"raw","seq":1842,"ts":1794217196688,"sportId":29,"sport":"soccer","channel":"live","kind":"matchup","action":"upsert","eventId":1640275337,"data":{"id":1640275337,"league":{},"participants":[],"markets":[]}}
| Field | Meaning |
|---|---|
type | Always raw. |
seq | Increasing counter of raw frames on this server. |
ts | When PinnFeed sent the frame (ms since epoch). |
sportId, sport | Pinnacle sport id and PinnFeed sport name. |
channel | live or prematch. |
kind | matchup (one event record), matchups (a list of event records), markets (all markets of one event) or snapshot (a full list of event records with markets, sent when the feed (re)starts). |
action | upsert, remove (data is just {"id":…}) or replace (the list replaces what you hold for that event or sport). |
eventId | The event the frame is about (matchup and markets). |
part, final | Only on large markets lists sent in parts: apply the list once the part with final: true arrives. |
data | Pinnacle's record(s), un-normalized: American prices, Pinnacle field names. |
Normalized or raw?#
| Normalized (all WS plans) | Raw (Pro, Enterprise) | |
|---|---|---|
| Schema | Documented PinnFeed v1 (schema) | PinnFeed envelope + Pinnacle's own records (record fields follow Pinnacle) |
| Filters | sports, leagues, events, markets, live, main, specials | sports only |
| Snapshot on subscribe | Yes (opt-out snapshot:false) | No |
| Fair odds and margin | Included | Not added |
| Typical use | Apps, bots, dashboards | Own normalizer, archiving, debugging |
Most projects should stay on normalized frames. Choose raw only if you want to build your own normalizer on Pinnacle's record format or archive the records.
Plans#
Pro is €199/mo with 10 WebSocket connections and 30 req/s REST; Builder (€99/mo) has normalized frames with 3 connections. 3-day trial; a card is required and it is charged after day 3 unless you cancel. Pricing · WebSocket docs.
Educational content for adults (18+).
Questions people ask#
Can one connection mix raw and normalized?#
No. The format is per connection; open a second connection for the other format.
Is raw faster?#
It skips normalization, but PinnFeed does not publish a latency figure for either format. Measure on your side: latency honesty.
Are raw frames documented?#
The envelope above is part of the PinnFeed v1 protocol. The records inside data follow Pinnacle's own format, which PinnFeed does not version; if you need a stable schema, use normalized frames.