# FanDuel sportsbook markets and futures prices

Read stored FanDuel market selections, native IDs and distinct observation clocks.

Canonical page: https://getoddsapi.com/docs/fanduel-markets

## 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

## Guide


Canonical: https://getoddsapi.com/docs/fanduel-markets
Reviewed: 2026-11-07 UTC

Read stored FanDuel market selections, native IDs and distinct observation clocks.

## Select the available bookmaker

Use a bearer API key with FanDuel source access. PUT /api/v1/bookmakers/selected/select?bookmakers=fanduel enables FanDuel price reads. A multi-source key replaces only the selections it can edit; include bookmakers=draftkings,fanduel to select both. An FD-only key preserves any DK selection. Clearing removes only bookmakers granted to that key. Existing accounts retain the DraftKings default until explicitly changed.

## Read games or futures

GET /api/v1/sportsbook/markets returns stored game markets. GET /api/v1/outrights discovers futures-market metadata; GET /api/v1/outrights/odds includes the stored prices of every listed selection. All three use source=fanduel by default and require that bookmaker selected. Each successful page costs one credit.

Filters are event_id, market_id, league, family and status. Native event IDs may identify a futures board. Native market and selection IDs are preserved; none is a canonical cross-book identity. Futures are identified by the collector’s explicit is_future flag.

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/outrights/odds?source=fanduel&limit=20" -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Page through actual stored records

limit is 1–100, default 50. When has_more is true, repeat with after=next_after and identical filters. IDs are sorted bytewise, not by price-change time. Pages are not a frozen snapshot; changed records can differ between requests. HTTP 413 asks you to reduce limit for selection-rich pages.

Null prices remain null. Suspended, closed and removed market states remain explicit; status=open filters if needed. Fair probabilities and hold are source-collector calculations where available, not independent fair-value predictions.

## Use the correct clock

changed_at is the last stored state change. observed_at is the last persisted market observation; unchanged market observations may be refreshed at five-minute intervals. event_read_at is the separate event or futures-board read and does not prove every market appeared on that read. checked_at is this API request time.

These endpoints expose current stored records, not FanDuel historical delta replay or a FanDuel WebSocket. Capture completeness and cross-book entity matching are not guaranteed. Existing generic threshold feeds keep their separate contract.

## Questions

### Can I calculate arbitrage across books by joining event_id?

No. These IDs are source native; cross-book matching is not supplied.

### Are SDK and MCP wrappers included?

Use these documented HTTP routes. Existing wrappers do not automatically cover the new routes.

### Does a recent API response mean a fresh price?

No. Check observed_at and market status. checked_at records the request, and event_read_at does not prove the market appeared on that board read.

## Sources

- [OpenAPI](https://getoddsapi.com/openapi.json)
- [Bookmaker selection](https://getoddsapi.com/docs/bookmaker-selection)
- [Gateway source scope](https://getoddsapi.com/docs/sportsbook)

Independent product; not affiliated with the operators named. No picks or predicted profits.

---

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