# DraftKings Pick6 History API: Line Moves

Read any DraftKings Pick6 prop's history: line moves, multiplier changes and availability since 3 Nov 2026. JSON, CSV for the change feed, free API key.

Canonical page: https://draftkingsapi.com/draftkings-pick6-api-history. Markdown: https://draftkingsapi.com/draftkings-pick6-api-history.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

## Every change to a prop, in order

DraftKings Pick6 line history you cannot backfill. Every day we record is a day nobody can recreate later. Pull one prop's moves for a chart, follow all changes for an alert, or save them to build your own archive.

```
curl --fail-with-body "https://draftkingsapi.com/api/v1/pick6/projections?sport=NFL&stat=Passing%20Yards&view=compact&limit=25" \
  -H "X-User-Request: Build a prop screen from current Pick6 lines" -H "Authorization: Bearer $DRAFTKINGS_API_KEY"

# Take pickable_id from a row, then read that prop's history:
curl --fail-with-body "https://draftkingsapi.com/api/v1/pick6/line-history?pickable_id=PICKABLE_ID_FROM_A_ROW&change_type=line_move&limit=100" \
  -H "X-User-Request: Track Pick6 line moves for an alert bot" -H "Authorization: Bearer $DRAFTKINGS_API_KEY"
```

## One prop or the whole feed

Two endpoints answer two questions. Use the first when you know the prop. Use the second to keep up with everything.

|  | `/api/v1/pick6/line-history` | `/api/v1/pick6/history` |
| --- | --- | --- |
| Question | How did this prop move? | What changed since my last read? |
| Required | `pickable_id` | Nothing. Filter with `sport`, `stat` and more |
| Filters | `stat`, `pick_group_id`, `change_type` | `sport`, `stat`, `pick_group_id`, `pickable_id`, `pickable_market_id` |
| Paging | `cursor` from `next_cursor` | `after` from `next_after` |
| A row shows | A classified change: `line_move`, `multiplier_only`, `availability` or `alternate_lines` | One market row's change, with `previous` |
| Formats | JSON | JSON and CSV |

## Reading a line move

On a line-history row, `line_moved` tells you whether the main target changed. `target_delta` is the size and direction, and `previous` and `current` hold the market before and after. `multiplier_changes` lists standings multipliers by side, and `added_targets` and `removed_targets` show the ladder changing.

```
{
  "change_type": "line_move",
  "line_moved": true,
  "player": "PLAYER NAME",
  "stat": "Passing Yards",
  "observed_at": "2026-11-04T01:46:31.627Z",
  "previous_observed_at": "2026-11-04T01:41:16.543Z",
  "target_delta": -1,
  "previous": { "target_value": 238.5, "is_default": true },
  "current": { "target_value": 237.5, "is_default": true }
}
```

`observed_at` and `previous_observed_at` bracket the move. It happened somewhere between those two captures, so show that window rather than one exact time.

## Keep up with all changes

Start at `after=0` and pass back `next_after`. Save it only after you have processed a page, so a crash repeats work instead of losing it.

```
import json, os, urllib.parse, urllib.request

BASE = os.environ.get("DRAFTKINGS_API_BASE", "https://draftkingsapi.com")
KEY = os.environ["DRAFTKINGS_API_KEY"]


def get(path, params):
    url = f"{BASE}{path}?{urllib.parse.urlencode(params)}"
    request = urllib.request.Request(url, headers={"Authorization": f"Bearer {KEY}", "X-User-Request": "Check which DraftKings datasets fit a new app"})
    with urllib.request.urlopen(request, timeout=30) as response:
        return json.load(response)


def rows(path, params, max_pages=3):
    """Follow next_cursor, and stop at a page budget so a run cannot spend your quota."""
    params = dict(params)
    for _ in range(max_pages):
        page = get(path, params)
        yield from page["data"]
        if not page["pagination"]["has_more"]:
            return
        params["cursor"] = page["pagination"]["next_cursor"]

after, seen = 0, 0
for _ in range(5):
    page = get("/api/v1/pick6/history", {"sport": "NFL", "after": after, "limit": 100})
    for row in page["data"]:
        seen += 1
        print(row["change_id"], row["stat"], row["observed_at"])
    after = page["pagination"]["next_after"]  # Save this after you process the page.
    if not page["pagination"]["has_more"]:
        break
print(f"{seen} changes, resume from after={after}")
```

Want changes pushed to you? Use the [stream consumer](/tools/alert-consumer). Want a local copy? The [daily archive](/examples/daily-archive.py) script writes to SQLite.

## How far back it goes

Recording began around 2026-11-03. Retained history is short, and it is not a complete opening-to-close archive. It does not contain seasons of past lines, and no graded results are published. A prop's first appearance sets its baseline, so it has no change row until it first moves. The [coverage report](/data/coverage-report) shows what is held now, by sport and stat.

```
curl --fail-with-body "https://draftkingsapi.com/api/v1/demo/pick6-history?sport=NFL&limit=5"
```

## FAQ

### Can I get past seasons of Pick6 lines?
No. Recording began on 3 Nov 2026, and history grows from there. Lines from before that date were not recorded by this service.

### Does the history include results?
No. It records what happened to the line, not how the prop finished. Box scores are on the statistics endpoints, and you can join them yourself.

### Why does a prop have no history?
A new prop has no change row until something about it changes. An empty result for a prop that has not moved is normal, and it costs one request.

### Is a multiplier change a line move?
No. A multiplier change has change_type multiplier_only and line_moved false. A standings multiplier is not odds or a payout, so do not read a change in one as a change in probability.

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