# FanDuel API schema glossary: every response field

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/docs/schema-glossary (this is its markdown version, https://fanduelapi.com/docs/schema-glossary.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/)/[Docs](https://fanduelapi.com/docs) / Schema glossary

Docs

# FanDuel API schema glossary

Every field the API returns, grouped by the record it belongs to, with its type and what it means. Times are ISO 8601 in UTC; prices are in both American and decimal odds; a value that is not known is null, never guessed.

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

## Prop

From /api/v1/props, and prop in /props/{id}/history.

| Field                              | Type                     | Meaning                                                                                           |
| ---------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------- |
| id                                 | string                   | The prop's id. Stable for the life of the prop; use it for history and joins.                     |
| sport, league                      | string                   | sport is basketball, football, hockey or baseball; league is NBA, NFL, NHL, MLB, NCAAB or NCAAF.  |
| event\_id, event\_name, starts\_at | string, string, ISO time | The game the prop belongs to, from /api/v1/events.                                                |
| player, team                       | string, string or null   | As FanDuel lists them.                                                                            |
| stat                               | string                   | points, rebounds, passing\_yards, shots\_on\_goal, strikeouts and the rest; see the league pages. |
| period                             | string                   | game, or one of q1, q2, q3, q4, h1, h2, p1, p2, p3, i1, f5\. Only game is graded.                 |
| line                               | number or null           | The current line.                                                                                 |
| over\_american, under\_american    | number or null           | Prices in American odds. Null while a market is suspended without a price.                        |
| over\_decimal, under\_decimal      | number or null           | The same prices in decimal odds.                                                                  |
| market\_status                     | string                   | open, suspended, closed or removed.                                                               |
| changed\_at                        | ISO time                 | When the line, a price or the status last changed.                                                |
| observed\_at                       | ISO time                 | When the collector last read this prop.                                                           |

## Move summary

From move on each prop, and on /props/{id}/history.

| Field                                  | Type             | Meaning                                                                                                                 |
| -------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------- |
| open, current                          | object           | line, over\_american, under\_american, fair\_over (no-vig over probability) and at, for the first and the latest state. |
| line\_move                             | number or null   | current line minus open line, in the stat's units.                                                                      |
| line\_direction                        | string           | up, down or flat.                                                                                                       |
| fair\_over\_move\_pp                   | number or null   | Change in no-vig over probability, in percentage points, so -110 to +100 reads as the shift it is.                      |
| price\_direction                       | string           | toward\_over, toward\_under or flat.                                                                                    |
| line\_moves, price\_moves              | number           | How many line changes, and how many price-only changes, between open and now.                                           |
| last\_moved\_at, last\_line\_moved\_at | ISO time or null | The latest move of any kind, and the latest line move.                                                                  |
| status, observations                   | string, number   | The latest market status, and how many states are recorded.                                                             |

## History point

From history in /props/{id}/history, and kind=history exports.

| Field                                                                                | Type         | Meaning                                                                         |
| ------------------------------------------------------------------------------------ | ------------ | ------------------------------------------------------------------------------- |
| kind                                                                                 | string       | What this state changed: new, line\_move, price\_move, status\_change, removed. |
| observed\_at                                                                         | ISO time     | When this state was read. Never interpolated.                                   |
| line, over\_american, under\_american, over\_decimal, under\_decimal, market\_status | as on a prop | The prop's state at that moment.                                                |

## Change

From /api/v1/changes, stream change events, webhook data.

| Field                                             | Type     | Meaning                                                                                          |
| ------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
| cursor                                            | string   | A number that only grows. Pass the last one back as since.                                       |
| kind                                              | string   | new, line\_move, price\_move, status\_change, removed                                            |
| prop\_id, event\_id, league, player, stat, period | string   | Which prop changed.                                                                              |
| previous, current                                 | object   | line, both prices in both formats and market\_status before and after. previous is null for new. |
| at                                                | ISO time | When the change was recorded.                                                                    |

## Market and selection

From /api/v1/markets, /games/{id}/odds, /futures.

| Field                            | Type           | Meaning                                                                                                                                                                                                            |
| -------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| market\_type                     | string         | The family: moneyline, spread, total, team\_total, three\_way, alt\_spread, alt\_total, player\_prop, player\_alt, ladder, first\_scorer, anytime\_scorer, race\_to, margin, odd\_even, yes\_no, special, futures. |
| fanduel\_type, name              | string         | FanDuel's own market type and display name.                                                                                                                                                                        |
| live                             | boolean        | Whether the game is in play.                                                                                                                                                                                       |
| hold                             | number or null | The bookmaker's margin: the sum of implied probabilities minus one.                                                                                                                                                |
| selections\[\].side              | string or null | over, under, home, away, yes, no, draw, odd, even, or null when the outcome is a player or team.                                                                                                                   |
| selections\[\].american, decimal | number or null | The selection's price.                                                                                                                                                                                             |
| selections\[\].fair              | number or null | No-vig probability, where the outcomes exclude each other and every price is present.                                                                                                                              |
| selections\[\].status            | string         | active or suspended.                                                                                                                                                                                               |

## Graded result and hit rate

From /api/v1/results, /api/v1/hit-rates.

| Field                                        | Type           | Meaning                                                                                                                                                                                                                       |
| -------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| closing                                      | object or null | The closing line and prices: the last open or suspended state before the game started, and its time.                                                                                                                          |
| actual                                       | number or null | The box score value of the stat.                                                                                                                                                                                              |
| result                                       | string         | over, under, push or void.                                                                                                                                                                                                    |
| void\_reason                                 | string or null | Why a prop was voided: game\_not\_played, game\_unmatched, box\_unavailable, no\_pregame\_line, period\_not\_graded, stat\_unsupported, player\_unconfirmed, player\_not\_in\_box\_score, player\_conflict or did\_not\_play. |
| games, over, under, push                     | number         | Counted over the last N graded games: games defaults to 10, up to 50.                                                                                                                                                         |
| hit\_rate                                    | number or null | Overs as a share of decided games, pushes left out. Read it with games beside it.                                                                                                                                             |
| avg\_actual, avg\_closing\_line, avg\_margin | number or null | Averages over the same games; margin is actual minus closing line.                                                                                                                                                            |

## DFS slate and player

From /api/v1/dfs/slates, /dfs/slates/{id}/players.

| Field                           | Type                   | Meaning                                                                 |
| ------------------------------- | ---------------------- | ----------------------------------------------------------------------- |
| salary\_cap, games              | number or null, number | The slate's cap and its game count.                                     |
| started, final                  | boolean                | Whether the slate has locked, and whether it has finished.              |
| salary, fppg                    | number or null         | The player's salary and fantasy points per game as FanDuel shows them.  |
| position, positions             | string, string\[\]     | The listed position and every eligible one.                             |
| injury\_status, injury\_details | string or null         | out, questionable, doubtful, probable and the other codes, spelled out. |

## meta

From every data response.

| Field                              | Type                             | Meaning                                                    |
| ---------------------------------- | -------------------------------- | ---------------------------------------------------------- |
| plan                               | string                           | The plan that answered.                                    |
| delay\_seconds                     | number                           | 300 on Free, 0 on paid plans.                              |
| as\_of                             | ISO time                         | The moment the response shows.                             |
| observed\_at, source\_age\_seconds | ISO time or null, number or null | When the newest data shown was read, and how old that is.  |
| source\_status                     | string                           | ok, delayed, stale, down; with source\_reason when not ok. |
| remaining                          | number                           | Requests left this month.                                  |
| limit, offset, has\_more           | number, number, boolean          | Paging on list endpoints.                                  |
| next\_cursor, start                | string, object                   | Paging on the change feed, and how its start was chosen.   |

## Questions

## Related

- [First call Your first FanDuel API request step by step: the key, the header, one props call, reading the response and meta, and the three calls to make next.](https://fanduelapi.com/docs/first-call)
- [CSV export Export FanDuel props or line history for a date range as CSV or NDJSON: the columns, the curl call, loading it in pandas and resuming by cursor.](https://fanduelapi.com/fanduel-api-csv-export)
- [Line movement Where a FanDuel player prop opened, every line and price move since, and when it last moved, from the history endpoint, with a sample move tape.](https://fanduelapi.com/fanduel-line-movement)
- [Pagination How FanDuel API responses page: limit and offset with has\_more on lists, next\_cursor on the change feed and exports, and the limits per endpoint.](https://fanduelapi.com/fanduel-api-pagination)

## 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 and reads the same data five minutes behind.

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