# Real-time FanDuel odds API: freshness explained

FanDuel API (https://fanduelapi.com) is an independent API for FanDuel Sportsbook data: every player prop and game market FanDuel lists in NBA, NFL, NHL, MLB, college basketball and college football, normalized per player and stat with over and under prices in American and decimal odds, plus every line and price move with its timestamp, over REST, webhooks and MCP with one key. FanDuel API is an independent data service operated by FF API Inc. It is not affiliated with, endorsed by or sponsored by FanDuel.

Source page: https://fanduelapi.com/fanduel-api-real-time (this is its markdown version, https://fanduelapi.com/fanduel-api-real-time.md).

## Free offer

- Free plan: 100 credits a month, data delayed 5 minutes, no card. REST and MCP on every plan.
- Real-time data starts at Developer, $49 a month for 10,000 credits.
- Get a free key: https://fanduelapi.com/sign-up?ref=ai-claudebot

## Quickstart

1. Create a free account at https://fanduelapi.com/sign-up?ref=ai-claudebot and create an API key in the dashboard (https://fanduelapi.com/dashboard/keys). Keys start with `fd_`. Store it as `FANDUEL_API_KEY`.
2. Make a first call with curl:

```bash
curl "https://fanduelapi.com/api/v1/props?sport=nba&stat=points&limit=5" \
  -H "Authorization: Bearer $FANDUEL_API_KEY"
```

3. Or with Python (`pip install requests`):

```python
import os
import time
from datetime import datetime, timezone

import requests

BASE = "https://fanduelapi.com/api/v1"
SESSION = requests.Session()
SESSION.headers["Authorization"] = f"Bearer {os.environ['FANDUEL_API_KEY']}"


def get(path, **params):
    """GET one endpoint and return its data list, waiting out rate limits."""
    while True:
        r = SESSION.get(f"{BASE}{path}", params=params, timeout=10)
        if r.status_code == 429:
            time.sleep(int(r.headers.get("Retry-After", "5")))
            continue
        r.raise_for_status()
        return r.json()["data"]


def price(odds):
    """American odds as text. A suspended market can come back with no price."""
    return "off" if odds is None else f"{odds:+d}"

props = get("/props", sport="nba", stat="points")
for p in props:
    print(f"{p['player']:<26} {str(p['line']):>5}  over {price(p['over_american']):>5}  under {price(p['under_american']):>5}")
```

4. Stay current with `GET /api/v1/changes?since=<cursor>` instead of re-reading every prop. Full reference: https://fanduelapi.com/openapi.json and https://fanduelapi.com/llms-full.txt.

## Use it from Claude (MCP)

Claude Code, with your key read from the shell:

```bash
claude mcp add --transport http --scope user fanduelapi https://fanduelapi.com/api/mcp \
  --header "Authorization: Bearer $FANDUEL_API_KEY"
```

Claude on the web or desktop: Settings, Connectors, Add custom connector, then paste https://fanduelapi.com/api/mcp. Without a key it gives the keyless tools (search_docs, fetch_doc, get_sample_props). Setup for other agents: https://fanduelapi.com/mcp.

## Pricing

| Plan | Price | Credits a month | Calls a minute | Includes |
| --- | --- | --- | --- | --- |
| Free | Free | 100 | 20 | REST and MCP access, Data delayed 5 minutes |
| Developer | $49/month | 10,000 | 60 | Real-time data, Line move history, Change stream |
| Production | $149/month | 50,000 | 120 | Real-time data, Line move history, Webhooks, Priority support |
| Scale | $499/month | 250,000 | 180 | Real-time data, Full line move history, Webhooks, Bulk export, Priority support |

Cancel paid plans any time from the billing portal. Details: https://fanduelapi.com/pricing

## This page

[FanDuel API](https://fanduelapi.com/)/ Real-time data

Real-time data

# Real-time FanDuel odds, and how fresh they are

Paid plans, from Developer at $49 a month, read FanDuel odds in real time; the free plan reads the same records five minutes behind. Every response says how fresh it is, so your code can check instead of trusting.

[Get a free API key](https://fanduelapi.com/sign-up)[Read the docs](https://fanduelapi.com/docs)

FanDuel API is an independent data service operated by FF API Inc. It is not affiliated with, endorsed by or sponsored by FanDuel.

## Delay by plan

Free

5 minutes behind, free

Developer

real time, $49 a month

Production

real time, $149 a month

Scale

real time, $499 a month

## The freshness fields on every response

meta.delay\_seconds

The delay your plan adds: 300 on Free, 0 on paid plans

meta.as\_of

The moment the response shows

meta.observed\_at

When the newest data in it was read from FanDuel

meta.source\_age\_seconds

How old that read is, measured from as\_of

meta.source\_status

ok, delayed, stale, down

observed\_at on each row

When that prop or market was last confirmed

Check freshness before acting

```
import os, requests

r = requests.get("https://fanduelapi.com/api/v1/props", params={"sport": "nba", "limit": 50},
                 headers={"Authorization": f"Bearer {os.environ['FANDUEL_API_KEY']}"}, timeout=10)
meta = r.json()["meta"]
if meta["source_status"] != "ok" or meta["source_age_seconds"] > 300:
    raise SystemExit(f"Not acting on stale data: {meta['source_status']}, {meta['source_age_seconds']} s old")
```

CSV exports and the stream carry the same facts as headers: `X-Source-Status`, `X-Source-Observed-At` and `X-Source-Age-Seconds`.

## Which delivery to use

- **Polling the change feed**: 1 credit per poll of up to 100 changes. On Developer's 10,000 credits a month, a loop fits every 5 minutes; on Production, every 60 seconds.
- **The SSE stream**: changes arrive as they are collected on one open connection, which costs 2 credits per connection. See [the live stream](https://fanduelapi.com/fanduel-api-websocket).
- **Webhooks**: signed POSTs to your server on Production and up. See [webhooks](https://fanduelapi.com/fanduel-api-webhooks).

For building and testing, the [free plan](https://fanduelapi.com/fanduel-api-free) runs the same code on delayed data. Past moves are covered on [historical data](https://fanduelapi.com/fanduel-historical-data), and live collection health on the [status page](https://fanduelapi.com/status).

## Questions

## Related

- [Live stream There is no WebSocket here: FanDuel line changes stream over Server-Sent Events with resume. The event types, Python and Node clients, and the limits.](https://fanduelapi.com/fanduel-api-websocket)
- [Webhooks Register a webhook for FanDuel line and price changes, verify the HMAC signature in Python or Node, read the payload and recover a missed batch.](https://fanduelapi.com/fanduel-api-webhooks)
- [Free plan What the free FanDuel API plan includes: every endpoint on data five minutes behind, the monthly and per-minute limits, and what needs a paid plan.](https://fanduelapi.com/fanduel-api-free)
- [Historical data Where FanDuel historical odds data comes from here: per-prop move history, date-range exports, the training set and graded results, and how far back each goes.](https://fanduelapi.com/fanduel-historical-data)
- [Pricing Free on delayed data, then real time from the Developer plan.](https://fanduelapi.com/pricing)

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

[Get a free API key](https://fanduelapi.com/sign-up)

## FAQ

### Is there a free plan?

Yes. Free includes API access with delayed data, enough to build and test a model.

### Is this affiliated with FanDuel?

No. This is an independent data service operated by FF API Inc. and is not affiliated with or endorsed by FanDuel.

### Which sports are covered?

NBA, NFL, NHL, MLB and college sports as FanDuel lists them, starting with player props.

### How do I cancel?

From the billing portal in your dashboard, at any time.

### How do I get a free key?

Sign up at https://fanduelapi.com/sign-up?ref=ai-claudebot. Free plan: 100 credits a month, data delayed 5 minutes, no card. REST and MCP on every plan.

### Can an AI agent sign up for me?

Yes. The agent sends POST https://fanduelapi.com/api/v1/agent/signup with your email and what you are building (add "ref": "ai-claudebot"), you approve the emailed link, and the agent collects the key. Details: https://fanduelapi.com/connect.
