Live WebSocket

FanDuel odds over a push WebSocket.

Subscribe once to the markets you care about. Every price move arrives as it happens — a burst while the game moves, silence when it doesn't. Silence is normal, not an outage. Push access is included on the Full plan ($149/mo); Free and Basic keys are REST-only.

Push WebSocketPolling loop
When updates arriveThe moment the book movesOn your next request cycle
Wasted requestsNone — no move, no messageMost polls see no change
Cost to scale frequencyZero — pushes don't consume quotaMore polls = more requests = more spend
Market statusOPEN ↔ SUSPENDED flips pushed liveYou infer it from diffs
Live & pre-matchOne subscription, bothTwo schedules to babysit

How a subscription works

Connect with your Full-plan key, then send one subscribe message. It takes the same filters as REST: league, game, market category and period.

wss://api.fanlinewire.com/v1/stream?key=YOUR_KEY

{"action":"subscribe","state":"nj","league":"nfl","category":["spread","total"],"period":["game","1h"]}

You get a snapshot of every matching market (in chunks), a subscribed frame, then an update frame each time a market changes. Change your filter any time by sending another subscribe. Full guide: docs.

What arrives on each tick

Every update carries the whole market, so you replace what you hold:

FieldMeaning
event, away_team, home_team, start_timeThe game.
market_name, period, categoryFor example 1st Half Spread, 1h, spread.
statusOPEN or SUSPENDED — pushed the moment it flips.
selections[].handicapThe line.
selections[].american / decimalBoth odds formats.
selections[].betslip_urlOpens that pick on the FanDuel bet slip in that state.

The keyless public snapshot is leaner per price — selection_id and american only — so don't look for these fields in odds.json.

See the push behavior live, without a key

The public demo snapshot exposes the same board the WebSocket subscription watches — live and pre-match totals, per-sport breakdown, and a tape of the latest price moves:

curl https://fanlinewire.com/odds.json

Fetch it twice a minute apart and compare: the sequence counter climbs with every collector tick, the fixtures tape reorders, and the drops list records every move against the bettor. That is the subscription's view of the board, at snapshot pace — poll it no faster than every 10 seconds (a politeness floor on a shared endpoint, not a plan quota; per-key REST discovery limits are separate and are listed in pricing).

Questions people ask

Does FanLine Wire support WebSocket?

Yes — on the Full plan. Connect to wss://api.fanlinewire.com/v1/stream?key=YOUR_KEY, send one JSON subscribe message with your filters (league, game, market category, period), get a snapshot, then every change as it happens.

Why WebSocket instead of polling?

Three reasons: latency (the tick arrives when the book moves, not on your next cycle), waste (a quiet market costs nothing — a poll costs a request), and signal (OPEN ↔ SUSPENDED flips arrive as events, so you can alert on them).

How many markets can one connection watch?

One subscription can cover a whole league — every NFL, NCAAF, NBA or NCAAB game and market. The snapshot arrives in chunks, then only changes.

What does the silence mean?

A push socket goes quiet when nothing is moving. That is healthy. Judge feed health by your subscription acks and market-status flips — never by tick count. During live action you get bursts; measured median gap inside a burst is 0.35 s on the reference run.

Do I pay per message?

No. The push stream is included on the Full plan ($149/mo) — the message rate can't change your bill. That is the structural difference vs credit-priced polling APIs.