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
| Cursor | Player | Kind | From | To | At ET |
|---|---|---|---|---|---|
| 36350 | Antonio Jordanreceiving yards | line_move | 34.5 | 30.5 | 3:24 PM |
| 36311 | Payton Pritchardpra | line_move | 19.5 | 20.5 | 3:23 PM |
| 36310 | Neemias Quetapra | line_move | 18.5 | 17.5 | 3:23 PM |
| 36306 | Jayson Tatumpra | line_move | 40.5 | 41.5 | 3:23 PM |
| 36280 | Trey Murphy IIIpa | line_move | 17.5 | 18.5 | 3:22 PM |
| 36255 | Sam Hauserpoints | line_move | 7.5 | 6.5 | 3:22 PM |
Endpoint and parameters
/api/v1/changesEvery line, price and status change after the cursor, oldest first. Pass next_cursor back as since to continue. The cheap way to stay current.
| Parameter | In | Description |
|---|---|---|
| since | query | Cursor from a previous response, or 0 to start. |
| league | query | League code as FanDuel lists it, such as NBA. |
| limit | query | Rows per page, 1 to 500. Default 100. |
Code
curl "https://fanduelapi.com/api/v1/changes?since=0&limit=100" \
-H "Authorization: Bearer $FANDUEL_API_KEY"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
- Webhooks and streamStop polling: take each change the moment it is collected, on a connection or at your URL.
/api/v1/stream - Line historyReplay a prop or a game line from the first time it was seen to now, move by move.
/api/v1/props/{id}/history - Props feedRead the whole player prop board in one call, already normalised, with where each line opened.
/api/v1/props
Related
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