# Stream recovery: reconnect, 410 and 409 on the Pick6 feed

Practical stream recovery for the Pick6 feed: planned reconnects, saved event IDs, purged and ahead cursors, and when to take a fresh snapshot. Published 2026-11-11 by DraftKings API.

Canonical page: https://draftkingsapi.com/blog/pick6-stream-recovery. Markdown: https://draftkingsapi.com/blog/pick6-stream-recovery.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/history?sport=NBA&limit=5' \
  -H "X-User-Request: Track Pick6 line moves for an alert bot" \
  -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/history?sport=NBA&limit=5",
    headers={
        "Authorization": "Bearer " + os.environ["DRAFTKINGS_API_KEY"],
        "X-User-Request": "Track Pick6 line moves for an alert bot",
    },
    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

Stream recovery is routine work here, because every connection ends on schedule. A client that saves its position and knows which failures need a new snapshot can treat a drop as ordinary.

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

## Expect the connection to end

Plan the reconnect as the normal path rather than the exceptional one.

Each connection lasts at most 55 seconds and costs one metered request, as does bootstrap. SSE sends pick6.change and checkpoint events with durable IDs.

## Bootstrap with a position

Take the snapshot first so the stream has a baseline to apply to.

A retained snapshot from /api/v1/stream/snapshot is bounded to 10,000 rows or 2 MB, and larger results return 413. Save the string snapshot_cursor, then connect /api/v1/stream with Last-Event-ID or after. Without a cursor, a client must explicitly choose start=latest to receive new changes without a baseline; otherwise 428 is returned.

```
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"
```

## Treat rejected cursors differently

Each status means something different, so route them separately.

Purged cursors return 410; ahead cursors return 409. No automatic deletion or unlimited replay window is promised, and source purge requires a new snapshot for stale cursors.

## Handle events that do not advance

Do not move your saved position past something you did not apply.

An oversized event produces delivery.error without advancing its ID. The stream is not sport-filtered; apply your snapshot's sport filter to incoming changes. Snapshots can include stale retained rows.

## Sources
- [Docs: streams and webhooks](https://draftkingsapi.com/docs#delivery)
- [API documentation](https://draftkingsapi.com/docs)
- [Sources and status](https://draftkingsapi.com/status)
- [OpenAPI contract](https://draftkingsapi.com/api/openapi)

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