# DraftKings Player Game Logs: Stats, IDs and Capture Times

Use /api/v1/stats/player-games with sport and season to read retained ESPN player game logs. Filter athlete_id for one player and pass pagination.next as after for more rows. These are independent statistics, not DraftKings results. Match exact identities before joining props, and check observed_at before using a row in a historical model.

Canonical page: https://draftkingsapi.com/guides/player-game-logs. Markdown: https://draftkingsapi.com/guides/player-game-logs.md. Site index for agents: https://draftkingsapi.com/llms.txt.

## Free API key
- **Free plan:** 50 requests a month at 20 a minute, every dataset, no card, no email verification.
- **Sign up:** https://draftkingsapi.com/auth/sign-up?ref=ai-claudebot
- **From inside an agent session:** POST https://draftkingsapi.com/api/v1/agent/signup with JSON `{"data_wanted": "...", "use_case": "...", "ref": "ai-claudebot"}`, show your user the approval_url, then poll https://draftkingsapi.com/api/v1/agent/token with device_code. The key is returned once.
- **No key yet:** `curl --fail-with-body "https://draftkingsapi.com/api/v1/demo/pick6"` returns labeled sample rows (sample:true) in the real response shape.

## Quickstart

1. Create a free key at https://draftkingsapi.com/auth/sign-up?ref=ai-claudebot (no card) and export it: `export DRAFTKINGS_API_KEY=...`

2. Call the API with curl:

```bash
curl --max-time 30 --fail-with-body 'https://draftkingsapi.com/api/v1/pick6/projections?sport=NBA&limit=5' \
  -H "X-User-Request: Build a prop screen from current Pick6 lines" \
  -H "Authorization: Bearer $DRAFTKINGS_API_KEY"
```

3. Or call it from Python:

```python
import os, requests

response = requests.get(
    "https://draftkingsapi.com/api/v1/pick6/projections?sport=NBA&limit=5",
    headers={
        "Authorization": "Bearer " + os.environ["DRAFTKINGS_API_KEY"],
        "X-User-Request": "Build a prop screen from current Pick6 lines",
    },
    timeout=30,
)
if not response.ok:
    raise RuntimeError(f"API {response.status_code}: {response.text}")
print(response.json())
```

4. Full walkthrough: https://draftkingsapi.com/quickstart. OpenAPI: https://draftkingsapi.com/openapi.json. Every route accepts format=csv on list endpoints.

## Use it from Claude (MCP)

MCP server: https://draftkingsapi.com/api/mcp (Streamable HTTP). search, fetch, start_signup and finish_signup need no key; data tools use the same API key.

```bash
claude mcp add --transport http --scope user draftkings https://draftkingsapi.com/api/mcp --header "Authorization: Bearer $DRAFTKINGS_API_KEY"
```

Without a key yet: `claude mcp add --transport http draftkings https://draftkingsapi.com/api/mcp`, then call start_signup. Setup for other clients: https://draftkingsapi.com/agents.md.

## Pricing

| Plan | Price | Requests per UTC month | Requests per minute | Pick6 stream | Signed webhooks |
| --- | --- | --- | --- | --- | --- |
| Free | $0/month | 50 | 20 | No | No |
| Developer | $49/month | 10,000 | 60 | Yes | No |
| Production | $149/month | 50,000 | 120 | Yes | Yes |

- **Free:** Build and test against every dataset.
- **Developer:** Keep your app running with more requests and push delivery.
- **Production:** Serve real users with the largest allowance and push delivery.

Plans and checkout: https://draftkingsapi.com/pricing

## Fetch a season and inspect the actual coverage

Independent ESPN statistics cover NBA, NFL and NHL as limited retained game samples, not full seasons. As of 2026-11-03 those samples were captured after the games were played, so they do not show what was known at game time.

```
curl --fail-with-body "https://draftkingsapi.com/api/v1/stats/player-games?sport=NBA&season=2027&limit=25" \
  -H "X-User-Request: Join box scores to lines for a research notebook" -H "Authorization: Bearer $DRAFTKINGS_API_KEY"
```

An empty page means no matching retained rows. It does not prove the player did not play. Check [history coverage](/history-coverage) and [current coverage](/data/coverage-report) before choosing a training window.

## One player, multiple categories

A player can have more than one row per event because passing, rushing and receiving are distinct stat categories. Keep sport, event_id, athlete_id and category together as your row key. A category count is not a count of unique games.

| Field | Use | Avoid |
| --- | --- | --- |
| athlete_id | Filter an ESPN athlete | Treating a Pick6 entity_id as an ESPN ID |
| event_id | Join the same sport and event | Joining on a display name or date alone |
| category | Keep distinct stat groups | Counting category rows as games |
| stats | Keep numeric and display values | Turning 6-13 into a decimal |
| observed_at | When this API captured the source | Assuming it was available at game time |

## Handle pagination without losing evidence

Follow next_cursor until it is absent. Save the original response for each page and do not combine extractions from different times without recording that difference. Keep null and missing statistics distinct from a numeric zero.

## Choose the correct season convention

NBA, NHL and college basketball use the ending year. NFL and college football use the starting year. MLB and WNBA use the calendar year. Supported filters do not imply a complete season is stored. Read the returned game season and the coverage report.

## Build a reproducible join

Resolve athlete and game identities with evidence, retain unmatched rows separately and join only supported mappings. Restrict completed games for final-stat research. A box score alone does not establish the rules or settlement of a Pick6 entry.

1. Save the exact query, cursor and extraction time.
2. Keep the source URL, observed_at and game start with each row.
3. Join using verified cross-source IDs and an equivalent stat and period.
4. Exclude ambiguous identities and post-cutoff captures from an as-of dataset.

## FAQ

### Which identifiers should I retain?
Keep the sport, event_id, athlete_id and category together, plus source and capture time. IDs from different providers are not interchangeable without a verified mapping.

### Are these official DraftKings player results?
No. They are independently sourced ESPN statistics. A matched stat line is not an official DraftKings settlement.

### Can game logs backfill historical Pick6 lines?
No. Historical game statistics cannot reconstruct lines that were never captured. Use the recorded line history and its actual start date.

### Is there a free DraftKings API?
Yes. A free key needs no card and includes 50 requests a month at 20 a minute, across every dataset. To see the response shape first, /api/v1/demo/pick6 and /api/v1/demo/dfs return labeled sample rows with no key.

### Is this an official DraftKings API?
Independent service operated by DD Inc., not affiliated with or endorsed by DraftKings. No wagering: this service does not place, recommend or settle entries or bets.

### Can I use it from an AI agent?
Yes. Connect the MCP server at https://draftkingsapi.com/api/mcp, or call REST with a Bearer key. An agent can get a key for its user with start_signup.

### How do I reach support?
Email support@draftkingsapi.com.

Independent service operated by DD Inc., not affiliated with or endorsed by DraftKings. No wagering: this service does not place, recommend or settle entries or bets.
