On the wire · 05:03:29 UTC Live 584 · Prematch 14,345 · Markets 57,025 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Answer · WebSocket · CLI

Test the Pinnacle odds WebSocket with wscat

Updated · PinnFeed · 2 min read

Answer: run npx wscat -c "wss://pinnfeed.io/v1/stream?key=ps_live_your_key&sports=soccer&main=true". Because the URL carries sports, the server subscribes you straight away and sends welcome, subscribed, the snapshot parts and then delta frames. Without query filters, paste a JSON subscribe within 30 seconds or the server closes with 4002 no_subscription. Needs a Builder or Pro key.

Option A: filters in the URL#

npx wscat -c "wss://pinnfeed.io/v1/stream?key=ps_live_your_key&sports=tennis&markets=moneyline&main=true"

URL filters accept the same names as the JSON message (sports, events, leagues, markets, live, main), comma-separated. Auto-subscribe triggers when sports or events is present.

Option B: header + JSON#

npx wscat -c wss://pinnfeed.io/v1/stream -H "x-api-key: ps_live_your_key"
> {"type":"subscribe","sports":["basketball"],"markets":["spread","total"],"main":true}

websocat works the same way: websocat -H "x-api-key: ps_live_your_key" wss://pinnfeed.io/v1/stream.

Keep it alive#

The server sends {"type":"ping"} every 20 s and closes the socket after 60 s without a pong. wscat does not answer JSON pings by itself, so for longer sessions type {"type":"pong"} or switch to a script: ping/pong, Python client.

Common answers on connect#

You seeMeaning
401 missing_key / invalid_keyNo key, or an unknown or revoked key
403 plan_lacks_wsFree/Hobby key: WebSocket starts at Builder
429 connection_limitAlready 3 (Builder) or 10 (Pro) open connections
close 4002 no_subscriptionNo subscribe within 30 s

Plans#

Builder (€99/mo, 3 connections) or Pro (10). 3-day trial; a card is required and it is charged after day 3 unless you cancel. Docs.

Educational content for adults (18+).

Related: curl OpenAPI recipes.

Questions people ask#

Is the key in the URL safe?#

It works, but URLs end up in shell history and logs. Prefer the header outside quick tests, and rotate the key if it leaked.

Why is the first message so big?#

The snapshot holds every event and market matching your filters, split into parts; narrow the filters for a lighter test.

Can I enable compression?#

wscat does not negotiate permessage-deflate by default; libraries can: compression.

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.