On the wire · 04:19:26 UTC Live 535 · Prematch 14,359 · Markets 56,610 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Answer · WebSocket · Pro

Raw Pinnacle frames over the WebSocket (Pro)

Updated · PinnFeed · 2 min read

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":[]}}
FieldMeaning
typeAlways raw.
seqIncreasing counter of raw frames on this server.
tsWhen PinnFeed sent the frame (ms since epoch).
sportId, sportPinnacle sport id and PinnFeed sport name.
channellive or prematch.
kindmatchup (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).
actionupsert, remove (data is just {"id":…}) or replace (the list replaces what you hold for that event or sport).
eventIdThe event the frame is about (matchup and markets).
part, finalOnly on large markets lists sent in parts: apply the list once the part with final: true arrives.
dataPinnacle's record(s), un-normalized: American prices, Pinnacle field names.

Normalized or raw?#

Normalized (all WS plans)Raw (Pro, Enterprise)
SchemaDocumented PinnFeed v1 (schema)PinnFeed envelope + Pinnacle's own records (record fields follow Pinnacle)
Filterssports, leagues, events, markets, live, main, specialssports only
Snapshot on subscribeYes (opt-out snapshot:false)No
Fair odds and marginIncludedNot added
Typical useApps, bots, dashboardsOwn 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.

The WebSocket plan: Builder, €99/mo.

Real-time Pinnacle odds pushed over one WebSocket, all 13 sports, every market, no-vig fair odds and closing lines. 3 days free, cancel in one click.

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.