Does FanDuel Have an API? How to Get FanDuel Odds
FanDuel has no public odds API. The SmartStake Odds API serves FanDuel odds, props, closing lines and state bet links in one schema, in real time.

FanDuel does not have a public odds API. There is no developer portal, no API key and no documentation for its sportsbook prices, and its Terms of Use bar the scrapers people build instead.
The SmartStake Odds API is the cleanest way to get FanDuel odds as of November 2026: main lines, alternate lines and player props, under the book key fanduel, in one schema with 85+ sportsbooks, exchanges and prediction markets, with bet links that open FanDuel's site in your user's state or its app.
Here is what one request returns. Pick a market, a state and a platform, and change either price.
FanDuel odds and bet links from one request
curl --compressed \ -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \ "https://api.server.smartstake.ca/v1/odds?event_id=evt_01KZCTK5WDFG6R6TWYDZV61GV2&book=fanduel&book=draftkings&market=football_points_handicap&state=NJ&platform=mobile"
{
"data": [
{
"quote_id": "m~evt_01KZCTK5WDFG6R6TWYDZV61GV2~football_points_handicap~none~none~-2.5~hometeam~fanduel",
"book": "fanduel",
"market_key": "football_points_handicap",
"label": "Tampa Bay Buccaneers -2.5",
"side": "hometeam",
"line": -2.5,
"odds": -108
},
{
"quote_id": "m~evt_01KZCTK5WDFG6R6TWYDZV61GV2~football_points_handicap~none~none~-2.5~hometeam~draftkings",
"book": "draftkings",
"market_key": "football_points_handicap",
"label": "Tampa Bay Buccaneers -2.5",
"side": "hometeam",
"line": -2.5,
"odds": -112
}
]
}Illustrative, not a live quote. The request is the documented /v1/odds call, and the response is abridged to a few fields of the documented quote object, with each bet_url left out. Removing the last two segments of a quote_id (side and book) gives the id every book shares for the same line.
One call returns FanDuel next to DraftKings on the same line, and the shared line id tells you which quotes to compare. At −108 against −112, FanDuel pays more on the Buccaneers. The same call hands back a link that opens the bet in the FanDuel app, which is the other half of most FanDuel API searches.
Does FanDuel Have an API?
No, not for odds. As of November 2026, FanDuel publishes no public API for its sportsbook, its daily fantasy contests or FanDuel Predicts, its event contract app on CME Group's exchange. No FanDuel page issues a developer key or documents a price feed.
What does exist is the plumbing behind FanDuel's own apps.
The sportsbook loads its prices from internal JSON endpoints, and that is what every "FanDuel API" tutorial on GitHub and Reddit points you at. Those endpoints are not an API in any useful sense:
- Undocumented. No contract fixes the paths, parameters or response shape. When FanDuel changes its site, your parser breaks without warning.
- Against the terms. FanDuel's Terms of Use prohibit using "any robot, spider, scraper, sniping software or other automated means to access the Service for any purpose" without its express written permission.1
- Split by state. FanDuel runs its sportsbook state by state, and geolocation decides what a request sees. A scraper on a server outside a legal state often sees nothing at all.
- One book. A FanDuel scraper gives you FanDuel. A price only means something next to other books, so you end up maintaining a scraper per book.
Three Ways to Get FanDuel Odds
| Route | What you get | The catch |
|---|---|---|
| Scrape the site | FanDuel only, in FanDuel's own shape | Breaks the terms, breaks on site changes, blocked by geolocation |
| Scraper marketplaces | A hosted scraper's output, often on a schedule | Same source and same terms problem, plus polling delay |
| An odds API | FanDuel with every other book, one schema | A monthly plan |
For anything you plan to keep running, an odds API is the only route with a contract behind it. The rest of this guide uses the SmartStake Odds API.
Pulling FanDuel Odds with SmartStake
Every request needs your key as a bearer token and Accept-Encoding: gzip, which curl sends with --compressed. The API docs cover every endpoint and parameter.
1. Confirm FanDuel is on your key
curl --compressed -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \
"https://api.server.smartstake.ca/v1/books"
FanDuel is fanduel. The list is exactly what your key can see, so check it before you hard-code any other FanDuel product.
2. Find the event
curl --compressed -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \
"https://api.server.smartstake.ca/v1/events?league=nfl"
Each event has an id, starts_at, home, away and live. The same event_id holds every book's prices for that game.
3. Pull FanDuel next to DraftKings
curl --compressed -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \
"https://api.server.smartstake.ca/v1/odds?event_id=evt_01KZCTK5WDFG6R6TWYDZV61GV2&book=fanduel&book=draftkings&market=football_points_handicap"
Drop market to get every line FanDuel has posted for the game, props included. Add alternate=false for main lines only, live=true for in-play prices only, and format=decimal for decimal odds. A request takes up to 5 events and 5 books, so add book=pinnacle when you want a sharp reference line next to the two.
Comparing FanDuel to the market in Python
This script pulls every main line FanDuel and three other books post on the next NFL game, groups them by line, and prints where FanDuel has the best price and where it trails. It uses only the Python standard library.
import gzip, json, os, urllib.parse, urllib.request
API = "https://api.server.smartstake.ca"
HEADERS = {
"Authorization": f"Bearer {os.environ['SMARTSTAKE_API_KEY']}",
"Accept-Encoding": "gzip",
}
BOOKS = ["fanduel", "draftkings", "pinnacle", "betmgm"]
def get(path, params):
url = f"{API}{path}?{urllib.parse.urlencode(params)}"
with urllib.request.urlopen(urllib.request.Request(url, headers=HEADERS), timeout=30) as response:
body = response.read()
if response.headers.get("Content-Encoding") == "gzip":
body = gzip.decompress(body)
return json.loads(body)["data"]
event = get("/v1/events", {"league": "nfl"})[0]
quotes = get("/v1/odds", [("event_id", event["id"]), ("alternate", "false"), ("format", "decimal")] + [("book", book) for book in BOOKS])
lines = {}
for quote in quotes:
line_id = quote["quote_id"].rsplit("~", 2)[0]
lines.setdefault((line_id, quote["side"]), []).append(quote)
for prices in lines.values():
fanduel = next((quote for quote in prices if quote["book"] == "fanduel"), None)
if fanduel is None or len(prices) < 2:
continue
best = max(prices, key=lambda quote: float(quote["odds"]))
gap = float(fanduel["odds"]) - float(best["odds"])
verdict = "best" if gap == 0 else f'{gap:+.3f} vs {best["book"]}'
print(f'{fanduel["label"]:<36} {float(fanduel["odds"]):.3f} {verdict}')
The line id is the quote_id without its last two segments, side and book, so every book's quote on the same line shares it. That one string replaces the team, player and market name matching a scraper leaves you to write.
Keeping FanDuel prices live
A REST call is a snapshot. To hold a current FanDuel board, open the stream first, then pull, then apply each change by quote_id:
curl -N --compressed -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \
"https://api.server.smartstake.ca/v1/stream/football?league=nfl&book=fanduel&book=draftkings"
Changes arrive over Server-Sent Events in 250 ms batches.
FanDuel is real-time pregame and live: a price change reaches the stream in under a second, as listed on the update frequency page. A scraper polling every 60 seconds waits 30 seconds on average to see the same change.
FanDuel closing lines
Closing odds are each book's last pregame price before the start. They are what you grade a model or a bet against, as the closing line value guide explains.
curl --compressed -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \
"https://api.server.smartstake.ca/v1/closing-odds?event_id=evt_01M0EAWVYT4JS0R7FVXMK3CT9D&book=fanduel&market=football_points_handicap&alternate=false"
They cover every event that started on or after August 7, 2026, for every market and line, player props included, and usually arrive within an hour of the start.
Keep the quotes with on_board_at_start: true when you measure against the close, since a book sometimes pulls a prop before kickoff.
Links to FanDuel in your user's state
FanDuel runs a separate site in each state it operates in, which is where FanDuel differs from DraftKings for a developer. Each quote can carry a bet_url that opens the selection, and two parameters point it at the right place:
curl --compressed -H "Authorization: Bearer $SMARTSTAKE_API_KEY" \
"https://api.server.smartstake.ca/v1/odds?event_id=evt_01KZCTK5WDFG6R6TWYDZV61GV2&book=fanduel&state=NJ&platform=mobile"
statetakes a two-letter code such asNJ, and FanDuel'sbet_urlpoints at its site for that state.platform=mobilereturns the FanDuel app link instead.
Both work on /v1/odds and on streams. Where FanDuel has no site in the state you pass, bet_url comes back unchanged, and an unrecognised value returns 400. A link opens the selection; whether the user can bet there is still up to FanDuel.
When Scraping FanDuel Still Comes Up
An odds API does not replace every scraper. Three jobs sit outside it:
- Your own account. Bet history, balances and open bets belong to the account holder's session, not to any odds feed. SmartStake reads prices; it does not place bets.
- FanDuel daily fantasy. Contest lobbies, salaries and lineups are a different product from the sportsbook, and the feed covers sportsbook prices, not salary contests.
- Prices before August 7, 2026. Closing odds start there. For older history, you need another source.
If the job is FanDuel prices, next to the market, kept current, one key beats a scraper you rebuild every season.
The same answer holds for FanDuel's biggest rival, as the DraftKings API guide shows. For prediction markets, the prediction market odds API guide covers Kalshi and Polymarket, and the PrizePicks API guide covers pick'em lines. For what to do with the prices once you have them, see how to build a sports betting model and why line shopping across books matters.
FAQ
Does FanDuel have an API?
No. FanDuel does not have a public odds API: there is no developer portal, no API key and no documentation for its sportsbook prices. The SmartStake Odds API serves FanDuel odds under the book key fanduel, in the same schema as 85+ other books.
Is there a free FanDuel odds API?
No official one exists, free or paid. Scraping the sportsbook site costs nothing up front but breaks FanDuel's terms and breaks your code whenever the site changes. The SmartStake Odds API is a paid monthly plan, from $399 a month.
Can I scrape FanDuel odds?
FanDuel's Terms of Use prohibit using any robot, spider, scraper or other automated means to access its service without written permission. The endpoints the sportsbook loads its odds from are undocumented and differ by state, so a scraper also needs constant repair.
Does the SmartStake API include FanDuel player props?
Yes. FanDuel player props, alternate lines and main lines all come through /v1/odds and the stream under their market keys, such as football_player_receptions, the same keys every other book uses.
Can I get FanDuel closing lines?
Yes. /v1/closing-odds returns FanDuel's last pregame price on every market and line for events that started on or after August 7, 2026, usually within an hour of the start. Closing odds come with the Pregame + Live and Full Stream plans.
Can I link users to FanDuel in their state?
Yes. Pass state with a two-letter code, such as NJ, and each FanDuel bet_url points at FanDuel's site for that state. Pass platform=mobile and it comes back as a FanDuel app link instead.
Can I show FanDuel odds to users of my product?
The monthly plans are for personal and internal use. Showing prices to the members of your product needs an Enterprise licence, so write to SmartStake with what you are building.
Get an API Key
The SmartStake Odds API has monthly plans from $399: Pregame and Pregame + Live cover five leagues you pick, and Full Stream covers every league. Closing odds come with Pregame + Live and Full Stream.
Choose a plan, and your key appears under API keys in SmartStake as soon as payment goes through.
Footnotes
-
FanDuel Terms of Use, section 6, Conduct, last updated July 16, 2026, read November 8, 2026. ↩
Get the next guide in your inbox
Practical betting guides, new tools, and product updates from the SmartStake team. Unsubscribe in one click, any time.
By providing your email, you are consenting to receive communications from SmartStake. Visit our Privacy Policy for more info


