# DraftKings sportsbook data with a GetOdds key

Read stored events, odds and retained changes through GetOdds. Choose a DraftKings key scope, keep capture age visible and paginate bounded reads.

Canonical page: https://getoddsapi.com/docs/sportsbook

## Free API key

Get a free GetOdds API key: **1,000 requests per UTC day and 60 per minute, no card**. One key covers REST and the hosted MCP server.

Sign up: https://getoddsapi.com/sign-up?ref=ai-claudebot

## Quickstart

1. Create an account at https://getoddsapi.com/sign-up?ref=ai-claudebot, open https://getoddsapi.com/dashboard and issue a key with the sources you need (draftkings, fanduel, betrivers, prizepicks or underdog). Keep it in a server environment variable named GETODDS_API_KEY.
2. Read current DraftKings NBA spreads with curl:

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/odds?sport=NBA&market=spread&fresh_only=true&limit=50" \
  -H "Authorization: Bearer $GETODDS_API_KEY"
```

3. The same request in Python (standard library only):

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

req = urllib.request.Request(
    "https://getoddsapi.com/api/v1/odds?sport=NBA&market=spread&fresh_only=true&limit=50",
    headers={"Authorization": "Bearer " + os.environ["GETODDS_API_KEY"]},
)
with urllib.request.urlopen(req) as res:
    rows = json.load(res)["data"]
for row in rows:
    print(row["away"], "at", row["home"], row["side"], row["line"], row["american"], row["observed_at"])
```

4. Check `observed_at`, `age_seconds` and `stale` on every row before using a price. Full reference: https://getoddsapi.com/docs

## Use with Claude (MCP)

```bash
claude mcp add --transport http getodds https://getoddsapi.com/api/mcp \
  --header "Authorization: Bearer $GETODDS_API_KEY"
```

The MCP tools follow the key's source grants and share its allowance. Setup guide: https://getoddsapi.com/use-with-claude

## Pricing

| Plan | Allowance | Price |
| --- | --- | --- |
| Free key | 1,000 requests a day, 60 a minute | $0, no card |
| Developer Bundle | 10,000 requests or credits a month on each of four sources | $149 a month |

Free development allowance: 1,000 requests per UTC day and 60 per minute per account, with no payment step. Paid: the Developer Bundle at $149 per month, with 10,000 monthly requests or credits on each of four sources.
Details: https://getoddsapi.com/bundle

## Guide


Canonical: https://getoddsapi.com/docs/sportsbook
Reviewed: 2026-11-07 UTC

Read stored events, odds and retained changes through GetOdds. Choose a DraftKings key scope, keep capture age visible and paginate bounded reads.

## Choose the source when creating your key

In the GetOdds dashboard, create a key and select DraftKings Pick6 + stored sportsbook odds. Select any additional sources needed for player thresholds. Existing keys retain their existing permissions: create a new scoped key instead of assuming old credentials gained access.

This dataset is DraftKings observations captured through ESPN. It is one bookmaker, not a direct native DraftKings stream or multi-book feed. No new upstream collection is performed by these API requests.

## Make a bounded request

Send your GetOdds key in the Authorization header. This example returns up to five NBA offers captured within 15 minutes of the request check. A valid empty page is different from a source error.

```bash
curl --fail-with-body "https://getoddsapi.com/api/v1/odds?source=draftkings&sport=NBA&fresh_only=true&limit=5" -H "Authorization: Bearer $GETODDS_API_KEY"
```

## Six resources, one account allowance

All six resources require a key with the draftkings source grant. Limits and credits are shared across the customer’s keys and both source families. Successful reads record one credit; admitted failures record zero credits but still count against request limits.

| Endpoint | Meaning | Additional filters |
| --- | --- | --- |
| /api/v1/events | Retained source event identities | sport, event_id |
| /api/v1/odds | Stored moneyline, spread and total prices | sport, event_id, market, fresh_only |
| /api/v1/history | Retained changes in the last seven days | offer_id or event_id required; sport, market optional |
| /api/v1/sports | Source sport codes present in stored events | None |
| /api/v1/bookmakers | Bookmaker represented by the stored offers | None |
| /api/v1/market-types | Market and period combinations present in stored offers | None |

## Pagination and identity

Use limit from 1 to 200 and offset from 0 to 10,000. Follow pagination.next_offset when provided. has_more can remain true at the maximum offset; narrow your sport or event filter instead of treating the reached bound as a complete export. Reads are not a frozen snapshot, so rows can change between pages.

Keep the returned source IDs. These are not cross-book canonical IDs. /api/v1/markets is the separate source-selectable player-threshold endpoint; /api/v1/market-types describes stored sportsbook markets. Do not join threshold and priced-market data by player name.

## History and freshness

History requires an event or offer ID and returns at most the last seven days of retained change records, newest first. An unchanged quote need not produce a new history row; an empty history does not establish that a price never moved. No longer archive or closing-line designation is claimed.

odds and event rows include observed_at, age_seconds and stale. stale means a capture older than 900 seconds; source_updated_at can be null. checked_at describes the API read. Event rows may include ended events: inspect starts_at and the source observation before displaying a live board.

## Errors and source grants

401 rejects invalid or revoked keys. 403 rejects a missing source grant. 400 rejects unknown, duplicate or invalid filters. 429 enforces shared customer allowances. Source/database failures return a sanitized 503 and no fabricated rows. Never put keys in URLs or client-side bundles.

## Metadata, retained replay and FanDuel reads

Version 0.4.0 adds eight read routes. Keep replay after and through as decimal strings; the clients reject numeric cursors that could lose precision. FanDuel filters are case sensitive, its pages cap at 100, and metadata routes do not accept pagination. Clients never select bookmakers or broaden key grants automatically.

These are bounded reads, not automatic WebSocket consumers. Native event IDs are not cross-book matches, recent in-play observations do not establish completed results, and future prices are not verified settlement.

| Resource | Node | Python |
| --- | --- | --- |
| events/{id}/state | eventState(id) | event_state(event_id) |
| participants | participants({event_id}) | participants(event_id=...) |
| participants/{id} | participant(id,{event_id}) | participant(id,event_id=...) |
| odds/replay | replay({after:"0"}) | replay(after="0") |
| sportsbook/markets | fanduelMarkets(options) | fanduel_markets(**options) |
| outrights | outrights(options) | outrights(**options) |
| outrights/odds | outrightOdds(options) | outright_odds(**options) |
| events/live | liveEvents(options) | live_events(**options) |

## Questions

### Do old keys automatically gain DraftKings access?

No. Their source grants stay unchanged. Create a new key and explicitly select DraftKings.

### Is this the native sportsbook WebSocket?

No. These are retained DraftKings-via-ESPN database reads. They do not connect to a native sportsbook stream.

### Do the 0.2.0 client downloads support these methods?

Yes. Version 0.2.0 adds events, odds, history, sports, bookmakers and market-types. Existing 0.1.0 downloads remain PrizePicks-only.

## Sources

- [GetOdds dashboard](https://getoddsapi.com/dashboard)
- [OpenAPI specification](https://getoddsapi.com/openapi.json)
- [Source capabilities](https://getoddsapi.com/capabilities.json)

Independent product; not affiliated with the operators named. No picks or predicted profits.

---

GetOdds is an independent developer product and is not affiliated with any sportsbook or pick’em operator. Prices describe data, not betting advice.
