Change feed

FanDuel change feed: every move since a cursor

Every FanDuel line, price and status change after a cursor, oldest first. Pass next_cursor back to stay current for the cost of one small request.

FanDuel API is an independent data service operated by FF API Inc. It is not affiliated with, endorsed by or sponsored by FanDuel.

Keep a local copy of the board current by reading only what changed since your last call.

Five kinds
new, line_move, price_move, status_change and removed, each with the previous and current state.
Cursor paging
since=0 starts at the oldest change kept; next_cursor continues exactly where the last page ended.
Cheap polling
A quiet minute returns an empty page, so a poll every few seconds costs one request each.

What it returns now

Newest changesReal rows, 5 min delay, as of 3:25 PM ET
CursorPlayerKindFromToAt ET
36350Antonio Jordanreceiving yardsline_move34.530.53:24 PM
36311Payton Pritchardpraline_move19.520.53:23 PM
36310Neemias Quetapraline_move18.517.53:23 PM
36306Jayson Tatumpraline_move40.541.53:23 PM
36280Trey Murphy IIIpaline_move17.518.53:22 PM
36255Sam Hauserpointsline_move7.56.53:22 PM

Endpoint and parameters

GET/api/v1/changes

Every line, price and status change after the cursor, oldest first. Pass next_cursor back as since to continue. The cheap way to stay current.

ParameterInDescription
sincequeryCursor from a previous response, or 0 to start.
leaguequeryLeague code as FanDuel lists it, such as NBA.
limitqueryRows per page, 1 to 500. Default 100.

Code

curl
curl "https://fanduelapi.com/api/v1/changes?since=0&limit=100" \
  -H "Authorization: Bearer $FANDUEL_API_KEY"
Python
import os, requests

r = requests.get(
    "https://fanduelapi.com/api/v1/changes",
    params={"since": "0", "limit": "100"},
    headers={"Authorization": f"Bearer {os.environ['FANDUEL_API_KEY']}"},
)
r.raise_for_status()
body = r.json()
print(body["meta"])          # plan, delay_seconds, as_of, source_status
for row in body["data"][:5]:
    print(row)

Keys look like fd_.... Keep one in the FANDUEL_API_KEY environment variable on your server, never in browser code. Every response's meta says which plan answered, how far behind it is and how fresh the collection is.

Which plans include it

  • FreeIncluded, 5 minutes behind
  • DeveloperIncluded, real time
  • ProductionIncluded, real time
  • ScaleIncluded, real time

Read from the plans on the pricing page. Every request counts against the monthly and per-minute allowance; request quotas explains how.

Works well with

Make your first call in a few minutes

Sign up, create a key in the dashboard, and send it as a Bearer token. The free plan needs no card and reads the same data five minutes behind.

Get a free API key