Live odds are the prices that move while the game is running. This page is for the developer who needs them programmatically: what live means on a real-time feed, how the two states of the book are labelled, and how fast it moves.
| A live odds screen | A live odds feed | |
|---|---|---|
| Updated when | Someone refreshes it | A collector tick |
| Pre-match markets | A separate page | Same document, same labels |
| Tradeable state | You trust what's drawn | status must be OPEN |
| Freshness | Unknown by design | generated_at, sequence, X-Server-Ms |
Live is a property of the market, not the page. Every row carries an inplay flag: true means priced during play, false means pre-match. On 2026-09-15 the board held 6 live markets against 1,258 pre-match ones — which is why a live feed mostly stays quiet until it doesn't.
Status is a separate axis: a market is tradeable only while its status is OPEN. Books suspend in a hurry — a goal, a review, a late line change — and that flip is the event worth alerting on: the price you cached a second earlier is no longer one anybody could have taken.
Core live markets are moneyline, spread and totals; futures and outrights appear too — Run Line, Spread, Total Runs, 1st Round Leader, World Series 2026 Winner — just on a slower clock.
Prices are American odds as signed integers, and null when a selection is unpriced — an answer, not a gap.
No signup stands in the way. The board is served keyless:
curl https://fanlinewire.com/odds.json
One JSON document, refreshed continuously, carrying generated_at, a sequence counter and the fixtures[] tape — newest ticks, capped at 20 rows, each with sport, fixture, market, status, inplay, updated_at and prices[] (selection_id, american).
Read live.total and prematch.total for the count on either side of the book, live.by_sport and prematch.by_sport for FanDuel's own sport names, and drops[] for moves that went against the bettor, newest first, capped at 12. drops[].pct is in implied-probability terms — not a subtraction of American numbers.
Keep to one fetch per 10 seconds — a politeness floor on a shared endpoint, not a plan quota. Per-key REST limits are separate and listed under pricing.
Freshness here is measurable, not claimed. sequence climbs once per collector tick, generated_at is stamped when the document is built, and the X-Server-Ms header carries build time — so your latency stays separable from the feed's work.
Fetch the snapshot twice a minute apart and diff it: the tape reorders, sequence advances, and live.total moves as games start and finish.
Live prices are where polling degrades fastest: the book can move twice inside one request cycle, and most polls return the number you already had.
The push stream is an AWS AppSync GraphQL WebSocket subscription. Subscribe in chunks of roughly 30 markets and updates arrive as they happen — on the reference run, ticks came in bursts with a median 0.35 s gap inside a burst. The richer runner payload is push-only: marketStatus, selectionId, handicap, runnerStatus and decimalDisplayOdds come off the socket.
Silence on a push socket is not an outage — nothing moved. Judge health by subscription acks and status flips, never by message count. The snapshot is leaner: selection_id and american per price, no decimal, no handicap. The WebSocket guide covers the subscription shape.
| Plan | Live & pre-match prices | Push stream |
|---|---|---|
| Free — 100 req/day, no card | REST | Not included |
| Basic — $29/mo, 1,000 req/day | REST | Not included |
| Full — $149/mo, 30 req/sec | REST | Included |
Free and Basic are REST-only; push access comes with Full and is not metered per message, so a busy live slate cannot change your bill.
FanDuel itself publishes no public odds API, and a consumer search for live odds does not change that. What the wire offers is the book's prices as structured data, both states labelled and the tradeable state explicit. Sibling feeds cover Pinnacle, esports on ODDIN.GG and Betradar.
FanDuel publishes no public odds API of its own. FanLine Wire is an independent real-time odds data service carrying FanDuel Sportsbook prices, live & in-play and pre-match, over REST plus an AWS AppSync GraphQL WebSocket push stream. Not a bookmaker; not affiliated with or endorsed by FanDuel.
Yes. GET https://fanlinewire.com/odds.json is a public keyless snapshot, no signup — one JSON document, refreshed continuously. One fetch per 10 seconds is the politeness floor on a shared endpoint.
inplay marks a market priced during play; false means pre-match. It is separate from status — only OPEN is tradeable. live.total and prematch.total give the count on each side, and live.by_sport and prematch.by_sport break the board down by FanDuel's own sport names.
Faster than a comfortable polling cycle. On the push WebSocket, ticks arrive in bursts — median 0.35 s gap inside a burst on the reference run. On REST, sequence advances with every collector tick so you can measure freshness yourself. Push is Full plan only.
Not from REST. The snapshot carries selection_id and american per price. The richer runner payload — marketStatus, selectionId, handicap, runnerStatus, decimalDisplayOdds — is push-only.