# FanDuel API key: create, store, test and revoke

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-key (this is its markdown version, https://fanduelapi.com/fanduel-api-key.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/)/ API key

API key

# Get a FanDuel API key

Create a free account, open Keys in the dashboard and create one. It starts with fd\_, is shown once, and goes in an Authorization header on every request. The whole thing takes about a minute and needs no card.

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

## 1\. Create the key

1. [Sign up](https://fanduelapi.com/sign-up) with an email and confirm it.
2. Open `/dashboard/keys` and create a key. Name it after the app that will use it.
3. Copy it from the reveal dialog. It is not shown again.

## 2\. Keep it out of your code

Store the key in an environment variable named `FANDUEL_API_KEY`, a secrets manager, or your host's encrypted settings. Never commit it, and never put it in browser code: anyone who opens the page could read it and spend your quota.

Shell

```
export FANDUEL_API_KEY="fd_..."
```

.env (add .env to .gitignore)

```
FANDUEL_API_KEY=fd_...
```

## 3\. Check that it works

One cheap request confirms the key and shows which plan it is on. `meta.plan` names the plan, `meta.remaining` the requests left this month, and `meta.delay_seconds` how far behind your data is.

Request

```
curl -s "https://fanduelapi.com/api/v1/events?limit=3" \
  -H "Authorization: Bearer $FANDUEL_API_KEY" | jq .meta
```

A wrong or revoked key

```
HTTP/1.1 401 Unauthorized
{"error":{"code":"INVALID_API_KEY","message":"..."}}
```

A 401 means the header is missing, the key was mistyped, or it was revoked. The other codes are on [errors and limits](https://fanduelapi.com/fanduel-api-errors).

## 4\. Rotate and revoke

To rotate, create a second key, deploy it, then revoke the first. A revoked key stops working on its next request. If a key leaks, revoke it first and create the replacement after.

The same key works for the MCP server at `https://fanduelapi.com/api/mcp`, so an agent and your scripts can share it, or each get their own. Next: the [Python example](https://fanduelapi.com/fanduel-api-python) or what the [free plan](https://fanduelapi.com/fanduel-api-free) includes.

## Questions

## Related

- [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)
- [Errors and limits Every FanDuel API error code with what it means and what to do, the 429 body and Retry-After header, and a retry loop that respects both limits.](https://fanduelapi.com/fanduel-api-errors)
- [Python example Working Python code for FanDuel Sportsbook player props: authenticate with a key, list props, read a prop's move history and poll for changes.](https://fanduelapi.com/fanduel-api-python)
- [Node.js worker A Node.js worker that loads the FanDuel props board once, then applies the change feed with a saved cursor, so a local copy stays current cheaply.](https://fanduelapi.com/fanduel-api-node)
- [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.
