Props feed
FanDuel player props feed
Every FanDuel Sportsbook player prop as one JSON record: player, stat, line, both prices, fair price and a move summary, filterable by league, game and stat.
FanDuel API is an independent data service operated by FF API Inc. It is not affiliated with, endorsed by or sponsored by FanDuel.
Read the whole player prop board in one call, already normalised, with where each line opened.
- One shape
- Points, rebounds, passing yards and shots on goal share one record: player, team, stat, period, line, over and under in American and decimal odds.
- Move summary
- Each prop carries its opening line and price, the current one, and how many line and price moves sit between them.
- Filters
- League, sport, game, player, stat and status, with updated_since for incremental reads and paging by limit and offset.
What it returns now
| Player | Stat | Open | Line | Over | Under | Fair over |
|---|---|---|---|---|---|---|
| Austin Hooperreceiving yards | receiving yards | 6.5 | 6.5 | -114 | -114 | 50.0% |
| Bijan Robinsonreceiving yards | receiving yards | 0.5 | 0.5 | +100 | -132 | 46.8% |
| Chase Brownreceiving yards | receiving yards | 2.5 | 2.5 | -118 | -114 | 50.4% |
| Dohnte Meyersreceiving yards | receiving yards | 17.5 | 17.5 | -114 | -114 | 50.0% |
| Drake Londonreceiving yards | receiving yards | 78.5 | 78.5 | -114 | -114 | 50.0% |
| Drew Samplereceiving yards | receiving yards | 3.5 | 3.5 | -114 | -114 | 50.0% |
| Ja'Marr Chasereceiving yards | receiving yards | 78.5 | 78.5 | -114 | -114 | 50.0% |
| Jahan Dotsonreceiving yards | receiving yards | 0.5 | 0.5 | +168 | -230 | 34.9% |
One prop per player here; the API returns every one. The full NFL board is on the props page.
Endpoint and parameters
/api/v1/propsEvery FanDuel Sportsbook player prop on the board, one record per player, stat and period, with line, over and under prices in American and decimal odds, and a move summary: where it opened, where it is now and how many times it moved.
| Parameter | In | Description |
|---|---|---|
| sport | query | nba, nfl, nhl, mlb, ncaab or ncaaf. |
| league | query | League code as FanDuel lists it, such as NBA. |
| event_id | query | One game, from /api/v1/events. |
| player | query | Player name, matched case-blind on any part. |
| stat | query | points, rebounds, assists, threes, pra and the other stats FanDuel lists. |
| status | query | Market status. Default: everything except removed. One of open, suspended, closed, removed, any. |
| updated_since | query | Only props that changed after this ISO 8601 time. |
| limit | query | Rows per page, 1 to 200. Default 50. |
| offset | query | Rows to skip, for paging. |
Code
curl "https://fanduelapi.com/api/v1/props?league=NBA&stat=points&limit=5" \
-H "Authorization: Bearer $FANDUEL_API_KEY"import os, requests
r = requests.get(
"https://fanduelapi.com/api/v1/props",
params={"league": "NBA", "stat": "points", "limit": "5"},
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
- 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 - Change feedKeep a local copy of the board current by reading only what changed since your last call.
/api/v1/changes - Players and resultsJoin each FanDuel line to what actually happened, and train on graded outcomes instead of guesses.
/api/v1/players
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