INDEPENDENT DEVELOPER REFERENCE
DraftKings API response schema, field by field
Every response field for sportsbook, Pick6, DFS, statistics and context rows, with types, null behavior and how to read each one.
Editorial review: · Not a live coverage report
Sportsbook rows
As of 2026-11-03, native sportsbook scopes cover New York NFL, NHL, college basketball and college football game lines and New York NHL Shots on Goal, points, assists, saves, goalscorers, power-play points and first-period shots. Read snapshots and streamed changes through the sportsbook endpoints. ESPN-attributed DraftKings moneyline, spread and total observations are also available across eight leagues. Current scope inventory is listed at /api/v1/sportsbook/scopes. Events come from /api/v1/events and prices from /api/v1/odds. Join them on event_id.
| Field | Type | Notes |
|---|---|---|
id | string | Offer identity, prefixed with its source. |
event_id | string | For example espn-draftkings:espn:NBA:401909925. The last part is the ESPN event ID. |
source_id | string | espn-draftkings for the current adapter. |
market | string | moneyline, spread or total. |
period | string | game on current rows. |
side | string | home, away, over or under. |
line | string or null | Null on moneyline. Signed on spread. The total on total rows. Parse it. |
american | number | American price, for example -110. |
decimal | string | Decimal price as a numeric string. |
observed_at | timestamp | When we captured the row. |
source_updated_at | null | The venue price clock is unknown. |
provenance | object | url, provider and rights_reference. |
fingerprint | string | Hash of the offer content. |
event_status | string | pre, in, post or unknown. |
age_seconds, stale | number, boolean | Capture age, and true beyond 15 minutes. |
Event rows carry id, source_id, sport, home, away, starts_at, observed_at, provenance, event_status, age_seconds and stale. History rows from /api/v1/history carry seq, offer_id, observed_at, age_seconds, stale and the offer under data. Inside data, line and decimal are numbers.
Pick6 rows
Pick6 rows carry standings multipliers such as 1.5x. A standings multiplier is not decimal odds, a probability or an established entry payout. The tuple pick_group_id, pickable_id and pickable_market_id identifies one market row.
| Field | Type | Notes |
|---|---|---|
sport, stat | string | For example NHL, Shots on Goal. |
stat_abbreviation | string | Source short form, such as SOG or RecYds. |
target_value | number | The line, such as 34.5. |
period | string or null | Null means unknown, not full game. |
is_live, is_paused | boolean | Paused rows must not be treated as selectable. |
selections | array | One entry per explicit side. |
selections[].side | string | More, Less or Yes in current captures. |
selections[].standings_multiplier | number | For example 8.2. Not decimal odds. |
selections[].formatted_standings_multiplier | string | Source display form, for example 8.2x. |
selections[].selection_id | string | Source identity for that selection. |
entities | array | Athletes, each with entity_id, full_name, display_name and events. |
entities[].events[] | array | event_id, name, team_name, opponent_name, start_time. |
live_stat_value, live_stat_updated_at | number, string, or null | The live stat and its own clock, which is not the offer clock. |
promo_class, promo_type_id | string or null | Source promotion labels. Missing labels stay unknown. |
market_id, product, raw_source_status | various | Source context. |
source_url, capture_hash | string | Capture evidence. |
observed_at, source_updated_at | timestamp, null | Capture clock, and the unknown source clock. |
age_seconds, stale | number, boolean | Capture age, and true beyond 15 minutes. |
Pick6 history rows add change_id and previous, which holds the prior version of the same row.
DFS rows
DFS rows wrap the source record: id, sport, slate_id, observed_at, source_updated_at, received_at, http_date, payload_sha256, adapter_version, rights_status, source_url, caveats and data. The nested data shape depends on the resource, and it can vary by sport.
| Resource | Identity | Useful nested fields |
|---|---|---|
dfs/sports | sportId | fullName, isEnabled, hasPublicContests, regionAbbreviatedSportName |
dfs/slates | DraftGroupId | Sport, GameCount, StartDate, DraftGroupTag, ContestStartTimeSuffix |
dfs/contests | id | n (name), dg (draft group), sdstring (start), gameType, attr |
dfs/players | draftableId | salary, rosterSlotId, playerId, playerDkId, displayName, position, teamAbbreviation, competition, draftStatAttributes |
The source's own short names, such as n and dg, are preserved, not translated. Salary is a DFS roster cost, not a line or a price.
Statistics rows
/api/v1/stats/* returns dataset: espn-independent-stats, kind, sport, season, available and rows shaped {"data":..., "game":...}. 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.
| Object | Fields |
|---|---|
| Game | event_id, sport, season, season_type, starts_at, state, completed, status, period, display_clock, source_updated_at, teams, evidence |
| Player game | athlete_id, name, team_id, opponent_id, category, starter, did_not_play, stats |
| Team game | team_id, opponent_id, stats |
| Stat | key, label, display, numeric, scope |
| Evidence | url, observed_at, http_date, last_modified, sha256 |
numeric is a scalar or null. Values like 1-3 and 13:10 stay display-only. scope is game or season-to-date, and season-to-date stats must not be used as single-game results.
Context rows
/api/v1/context/games, player-stats and team-stats return dataset: espn-context with rows holding kind, sport, event_id, entity_id, observed_at, source_url, payload_sha256, data, age_seconds and stale. Context statistics store a string value for each stat, unlike the numeric field on statistics rows.
Rules for all datasets
Treat missing and null as unknown. Store source identifiers as strings, because large IDs and leading characters do not survive conversion. Ignore fields you do not recognize, so that added fields cannot break your parser.
- Never fill in a missing side, a null period or a null clock with a guess.
- ESPN IDs and DraftKings IDs are separate identity systems. See matching players across datasets.
- Do not compare a multiplier, a price and a salary as one unit. See the comparison guide.
Try it
curl --fail-with-body "https://draftkingsapi.com/api/v1/pick6/projections?sport=NBA&limit=1" \
-H "Authorization: Bearer $DRAFTKINGS_API_KEY"
curl --fail-with-body "https://draftkingsapi.com/api/v1/odds?sport=NBA&limit=1" \
-H "Authorization: Bearer $DRAFTKINGS_API_KEY"Endpoint docs
Working assets
Questions
Why is source_updated_at null on every row?
The source does not give us a venue update clock for these rows, so the honest value is null. Use observed_at for capture time, and do not describe it as the time the price changed.
Why are line and decimal strings on odds rows?
Current odds rows return these database numerics as strings, and moneyline rows have a null line. Parse them with your language's decimal or float conversion. Nested history payloads hold numbers.
Is there a machine-readable schema?
Yes. The public OpenAPI document at /api/openapi lists endpoints and parameters. Nested source records vary by sport, so inspect real responses too.
Related resources
How to read observed_at, source_updated_at, age_seconds and stale, what worker targets mean, and how to label data honestly.
DraftKings API pagination: offset, after and cursorsThree pagination styles with working loops: offset lists, the Pick6 next_after sequence and statistics cursors, plus their limits.
Odds vs Pick6 multipliers vs DFS salariesThree DraftKings numbers with three different meanings: American prices, standings multipliers and DFS salaries, and what each can support.
How do ESPN IDs relate to DraftKings IDs here?ESPN-attributed rows use ESPN event numbers. Native sportsbook and Pick6 retain their DraftKings source IDs.
Independent service operated by DD Inc., not affiliated with or endorsed by DraftKings. Technical access is not a redistribution license. No wagering: this service does not place, recommend or settle entries or bets. Check sources and status for actual capture context.