# How do I track DraftKings line movement?

Poll /api/v1/pick6/history with the after cursor to receive each recorded Pick6 line move and multiplier change, or use the resumable stream on Developer and Production. Production adds signed webhooks. For sportsbook prices, read /api/v1/history or the native WebSocket on paid plans. Each change shows when it was captured.

Canonical page: https://draftkingsapi.com/questions/draftkings-line-movement. Markdown: https://draftkingsapi.com/questions/draftkings-line-movement.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

## A polling loop

`line_moved` is true when the target itself changed, and `line_change_type` separates that from a multiplier-only change. Polling every five minutes uses about 8,640 requests in 30 days, so it fits [Developer](/pricing) and needs more than Free.

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

BASE = "https://draftkingsapi.com/api/v1/pick6/history?sport=NFL&limit=100&after="
HEADERS = {"Authorization": "Bearer " + os.environ["DRAFTKINGS_API_KEY"], "X-User-Request": "Track Pick6 line moves for an alert bot"}
after = 0  # save this between runs

while True:
    request = urllib.request.Request(BASE + str(after), headers=HEADERS)
    with urllib.request.urlopen(request, timeout=20) as response:
        page = json.load(response)
    for row in page["data"]:
        if row["line_moved"]:
            before = (row["previous"] or {}).get("target_value")
            print(row["entities"][0]["display_name"], row["stat"], before, "to", row["target_value"], row["observed_at"])
    after = page["pagination"]["next_after"]
    time.sleep(300)
```

## Have changes pushed to you

The Pick6 stream resumes from your last event ID, and each connection lasts up to 55 seconds and costs one request. Webhooks cost no requests and arrive signed. See [which plans include the stream](/questions/stream-access) and [webhooks](/questions/webhooks).

```
curl --fail-with-body "https://draftkingsapi.com/api/v1/stream/snapshot?sport=NFL" \
  -H "X-User-Request: Follow Pick6 line changes for an alert bot" -H "Authorization: Bearer $DRAFTKINGS_API_KEY"
```

## Delivery by dataset

Pick6 changes: Developer and Production include the resumable stream, and Production also includes signed webhooks. Native sportsbook scopes: paid plans can use a server-side WebSocket at `/api/v1/sportsbook/ws`. ESPN-attributed sportsbook rows and DFS rows have no push delivery.

## FAQ

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