# FanDuel odds API: native game markets, futures and in-play observations

GetOdds stores FanDuel's native New Jersey sportsbook markets and serves them through /api/v1/sportsbook/markets for games and /api/v1/outrights/odds for futures, with FanDuel's own market and selection IDs, statuses and change times. Leagues include the NFL, NBA, NHL, NCAAF and NCAAB. GetOdds is independent and not affiliated with FanDuel.

Canonical page: https://getoddsapi.com/fanduel-odds-api

**Price.** Free development allowance: 1,000 requests per UTC day and 60 per minute per account, with no payment step. Paid: the Developer Bundle at $149 per month, with 10,000 monthly requests or credits on each of four sources.

## Free API key

Get a free GetOdds API key: **1,000 requests per UTC day and 60 per minute, no card**. One key covers REST and the hosted MCP server.

Sign up: https://getoddsapi.com/sign-up?ref=ai-claudebot

## Quickstart

1. Create an account at https://getoddsapi.com/sign-up?ref=ai-claudebot, open https://getoddsapi.com/dashboard and issue a key with the sources you need (draftkings, fanduel, betrivers, prizepicks or underdog). Keep it in a server environment variable named GETODDS_API_KEY.
2. Read current DraftKings NBA spreads with curl:

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/odds?sport=NBA&market=spread&fresh_only=true&limit=50" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

3. The same request in Python (standard library only):

```python
import json, os, urllib.request

req = urllib.request.Request(
    "https://getoddsapi.com/api/v1/odds?sport=NBA&market=spread&fresh_only=true&limit=50",
    headers={"Authorization": "Bearer " + os.environ["GETODDS_API_KEY"]},
)
with urllib.request.urlopen(req) as res:
    rows = json.load(res)["data"]
for row in rows:
    print(row["away"], "at", row["home"], row["side"], row["line"], row["american"], row["observed_at"])
```

4. Check `observed_at`, `age_seconds` and `stale` on every row before using a price. Full reference: https://getoddsapi.com/docs

## Use with Claude (MCP)

```bash
claude mcp add --transport http getodds https://getoddsapi.com/api/mcp \
  --header "Authorization: Bearer $GETODDS_API_KEY"
```

The MCP tools follow the key's source grants and share its allowance. Setup guide: https://getoddsapi.com/use-with-claude

## Pricing

| Plan | Allowance | Price |
| --- | --- | --- |
| Free key | 1,000 requests a day, 60 a minute | $0, no card |
| Developer Bundle | 10,000 requests or credits a month on each of four sources | $149 a month |

Free development allowance: 1,000 requests per UTC day and 60 per minute per account, with no payment step. Paid: the Developer Bundle at $149 per month, with 10,000 monthly requests or credits on each of four sources.
Details: https://getoddsapi.com/bundle

## Facts

- **Source:** FanDuel native feed, New Jersey
- **Views:** Game markets, futures, live events
- **Page size:** Up to 100 markets
- **IDs:** FanDuel-native

## Select FanDuel, then read its markets

Create an account at /sign-up, open /dashboard and issue a key with the source grants you need (draftkings, fanduel, betrivers, prizepicks or underdog). Keep the key in a server environment variable named GETODDS_API_KEY and send it as a bearer token. Never put it in a URL or in browser code.

Create the key with the fanduel grant, then select FanDuel on the account once. Accounts default to DraftKings only, so skipping this step returns 403 BOOKMAKER_NOT_SELECTED.

```bash
curl --fail-with-body -X PUT \
  "https://getoddsapi.com/api/v1/bookmakers/selected/select?bookmakers=draftkings,fanduel" \
  -H "Authorization: Bearer $GETODDS_API_KEY"

curl --fail-with-body "https://getoddsapi.com/api/v1/sportsbook/markets?league=NBA&family=moneyline&status=open&limit=50" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

## How FanDuel markets are shaped

FanDuel rows are markets, not single prices. Each market has a family, FanDuel's native type, a period, an in_play flag, a status (open, suspended, closed or removed) and a selections array with American and decimal prices. Suspended and closed markets are returned, not hidden; add status=open when you only want live prices. Filters are case sensitive. Paginate with after=next_after; IDs sort bytewise, not by time.

| Field | Meaning |
| --- | --- |
| changed_at | Last time the stored market state changed |
| observed_at | Last persisted observation; unchanged markets refresh about every five minutes |
| event_read_at | Last read of the event or futures board; does not prove every market was on it |
| checked_at (meta) | When your API request ran |

## Read FanDuel futures prices

Futures are markets with is_future=true. /api/v1/outrights lists them with a selection_count and no prices, which is cheap for discovery. /api/v1/outrights/odds returns the full selection prices.

```python
import json, os
from urllib.request import Request, urlopen

H = {"Authorization": "Bearer " + os.environ["GETODDS_API_KEY"]}
url = "https://getoddsapi.com/api/v1/outrights/odds?league=NFL&status=open&limit=20"
with urlopen(Request(url, headers=H), timeout=20) as r:
    body = json.load(r)

for market in body["data"]:
    priced = [s for s in market["selections"] if s["decimal"] is not None]
    favorites = sorted(priced, key=lambda s: s["decimal"])[:5]  # shortest prices first
    print(market["name"], [(s["name"], s["american"]) for s in favorites])
print("more pages:", body["pagination"]["has_more"], body["pagination"]["next_after"])
```

## FanDuel player lines without odds

FanDuel open pregame player props are also available as threshold rows from /api/v1/markets?source=fanduel. These rows carry the player, stat and line but no price, which suits projection and pick'em comparisons. For priced FanDuel markets use the sportsbook endpoints above.

## FAQ

### Does FanDuel have a public odds API?

FanDuel does not publish a public developer odds API. GetOdds stores FanDuel's New Jersey market data and serves it with native IDs and timestamps.

### Can I compare FanDuel and DraftKings prices on the same game?

Yes, but not by joining event IDs, which are native to each book. Use /api/v1/mappings, or /api/v1/arbitrage-bets and /api/v1/value-bets, which match events conservatively.

### Are FanDuel in-play prices available?

Markets carry an in_play flag, and /api/v1/events/live lists games with an in-play market observed in the last 15 minutes. It is not a sub-second in-play feed.

### Which state are FanDuel prices from?

New Jersey. Prices in other states can differ.

---

GetOdds is an independent developer product and is not affiliated with any sportsbook or pick’em operator. Prices describe data, not betting advice.
