DFS contests API
contests
dfs.contestsA DFS contest run on a slate — its entry fee, prize pool, entry caps, type flags and lock time. One slate hosts many contests. Fill history lives in contest_snapshots; the payout ladder in contest_payouts.
GET/api/v1/dfs/contestsList contests for DFS
Requires one of:
slate_id or operator_slate_id — requests satisfying none of these return 400.Parameters
slate_idquerybigintoptionalFilter to all contests run on a single slate.
operator_slate_idquerybigintoptionalOperator-side slate identifier (DraftKings contest group ID, FanDuel fixtureListId). Resolves to slate_id.
operator_idquerybigintoptionalFilter to one operator: by numeric id (1 DraftKings, 2 FanDuel, 3 Yahoo) or name (draftkings, fanduel).
operatorquerystringoptionalFilter to one operator: draftkings, fanduel, yahoo (or numeric operator id).
statusquerystringoptionalFilter contests by parent slate status: Upcoming, Live, Completed (case-insensitive). Values: Upcoming, Live, Completed, upcoming, live, completed.
slate_statusquerystringoptionalFilter contests by parent slate status: Upcoming, Live, Completed (case-insensitive). Values: Upcoming, Live, Completed, upcoming, live, completed.
lineups_statusquerystringoptionalFilter by lineup file status: available (the final lineups are loaded), live (a DraftKings contest whose games still run, with lineups from a live file), pending, unavailable, none. Values: available, live, pending, unavailable, none.
has_lineupsquerystringoptionalFilter contests by whether their lineups are loaded. true returns the contests with lineups_status available or live (the final file, or a live file while the games run). false returns every other contest (lineups_status pending, unavailable or none). Values: true, false.
partial_lineups_countqueryintegeroptionalFilter by how many stored lineups hold some of their seats but not all. partial_lineups_count=0 returns the contests whose stored lineups are all complete; partial_lineups_count__lte=N allows up to N such lineups. Range syntax: partial_lineups_count__lte=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests?slate_id=676551'Responses
200contests rows matching the declared filter set, wrapped in { contests, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(27 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | bigint | — | Operator contest id, numeric. FanDuel: the tail of its composite id. e.g. 188369206 |
game_type_id | integernullable | — | Operator game type: DraftKings gameTypeId (1 Classic, 96 Showdown Captain, …). e.g. 70 |
operator_external_id | stringnullable | — | The operator id exactly as served. FanDuel: "{fixtureListId}-{contestId}", which the API needs back verbatim. DraftKings: same as external_id. e.g. 188369206 |
operator_id | bigint | FK to the operator. Denormalized from slates: 5,160 slate external_ids are shared between DraftKings and FanDuel, so every operator filter was a two-hop join. e.g. 1 | |
slate_id | bigint | FK to the slate this contest runs on. e.g. 32347 | |
attributes | jsonbnullable | — | The operator's raw flag set, kept whole: IsStarred, IsWinnerTakeAll, Multiplier, IsBeginner, IsCasual, IsPrivate, League, … e.g. {"lobby_captured_at":"2026-03-02T21:33:29.278Z","restricted… |
↳IsStarred attributes.IsStarred | stringnullable | — | Whether contest is starred/featured in lobby. |
↳IsQualifier attributes.IsQualifier | stringnullable | — | Whether contest awards tickets/qualifier seats. |
↳IsGuaranteed attributes.IsGuaranteed | stringnullable | — | Whether contest prize pool is guaranteed. |
↳IsWinnerTakeAll attributes.IsWinnerTakeAll | stringnullable | — | Winner-take-all payout format. |
↳Multiplier attributes.Multiplier | stringnullable | — | Contest payout multiplier flag. |
↳IsPrivate attributes.IsPrivate | stringnullable | — | Private contest restriction. |
↳League attributes.League | stringnullable | — | Contest league code. |
↳IsDoubleUp attributes.IsDoubleUp | stringnullable | — | Whether contest is a double-up format. |
↳IsFiftyfifty attributes.IsFiftyfifty | stringnullable | — | Whether contest is a 50/50 format. |
↳Is FiftyFifty attributes.Is FiftyFifty | stringnullable | — | Operator flag for 50/50 format (spaced key). |
↳Is Starred attributes.Is Starred | stringnullable | — | Operator flag for starred/featured contest (spaced key). |
↳IsGuranteed attributes.IsGuranteed | stringnullable | — | Operator flag for guaranteed prize pool (raw key spelling). |
↳contest_state_detail attributes.contest_state_detail | stringnullable | — | Detailed contest state or lifecycle detail. |
↳was_resized attributes.was_resized | booleannullable | — | Whether contest entry limit was adjusted or resized. |
↳live_telemetry attributes.live_telemetry | jsonbnullable | — | Live contest telemetry and pacing payload. |
↳hybrid_sampling attributes.hybrid_sampling | jsonbnullable | — | Hybrid sampling simulation configuration. |
↳lineup_capsule_uri attributes.lineup_capsule_uri | stringnullable | — | URI pointer to compressed contest lineup capsule. |
↳fill_pct attributes.lineup_capsule_uri.fill_pct | decimalnullable | — | Current percentage of entries filled. |
↳minutes_to_lock attributes.lineup_capsule_uri.minutes_to_lock | decimalnullable | — | Minutes remaining until contest lock. |
↳velocity_per_min attributes.lineup_capsule_uri.velocity_per_min | decimalnullable | — | Entry velocity rate per minute. |
↳projected_final_entries attributes.lineup_capsule_uri.projected_final_entries | bigintnullable | — | Projected final entry count at lock. |
↳projected_overlay_cents attributes.lineup_capsule_uri.projected_overlay_cents | bigintnullable | — | Projected operator overlay in integer cents. |
contest_state | stringnullable | — | Latest observed state: Upcoming, Live, Completed, Cancelled. DraftKings cs / contestState. Values:CompletedCancelled |
contest_type | integer | — | Contest structure code (0 = Tournament / GPP, 1 = Cash game / 50-50 / Double-up / head-to-head, 2 = League: a small public operator contest, e.g. a FanDuel 3-player league). e.g. 0 |
entry_count | integer | — | Latest observed entries. The history is in contest_snapshots. e.g. 0 |
entry_fee | integer | — | Entry fee in cents (e.g. 500 = $5.00, 2000 = $20.00). 0 for free contests. e.g. 100 |
first_seen_at | timestamptznullable | — | First lobby observation. e.g. — (all-null in sample) |
game_count | integer | — | Number of games in the pool of the contest's slate (distinct games in dfs.slate_games). 0 when the slate has no linked games. e.g. — (all-null in sample) |
guaranteed | boolean | — | Whether the prize pool is guaranteed regardless of entries filled. Values:truefalse |
last_seen_at | timestamptznullable | — | Last lobby observation. A contest absent from the lobby after this is cancelled or locked. e.g. 2026-10-02T03:09:20.810Z |
max_entries | integer | — | Maximum total entries the contest accepts. Latest observed. e.g. 100 |
max_entries_per_user | integer | — | Maximum lineups a single entrant may submit. e.g. 1 |
name | string | — | Operator-facing contest name (e.g. "$5 NBA Mini-MAX"). e.g. 50/50 Contest ($1 - Top 50% Win) |
paid_places | integernullable | — | Number of paying positions. FanDuel serves it in the lobby (prizes.count); DraftKings derives it from the ladder. e.g. 1 |
payout_type | integernullable | — | DraftKings pt. 1 on all paid contests; 2 marked the two $0 promo contests. e.g. 1 |
player_count | integer | — | Number of rows in the pool of the contest's slate (dfs.slate_players). On showdown and single-game slates a CPT or MVP row counts separately, so the number can be twice the players. e.g. — (all-null in sample) |
prize_pool | integer | — | Total prize pool in cents (e.g. 10000000 = $100,000.00). On qualifiers, includes ticket face value. e.g. 2500 |
qualifier | boolean | — | Satellite or qualifier — pays tickets or seats, not (only) cash. Excluded from field-size statistics. Values:falsetrue |
slate_status | stringnullable | — | Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates. e.g. — (all-null in sample) |
start_time | timestamptznullable | — | The contest's own lock time. A late-swap contest locks later than its slate. e.g. 2026-03-03T00:00:00.000Z |
state | string | — | Lifecycle state of the contest in the Prelock / Started / Completed vocabulary, derived by the API on every read (browse.rs derive_dfs_lifecycle_state) from the parent slate status: Upcoming → Prelock, Live → Started, Completed → Completed. `status` is the authoritative field; this one repeats it in the older vocabulary. e.g. — (all-null in sample) |
status | stringnullable | — | Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates. e.g. — (all-null in sample) |
GET/api/v1/dfs/contests/{id}Get a single contest by id
Parameters
idpathbigintrequiredPrimary key (id) of the contest row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests/37021368'Responses
200Single contest row.application/jsonshow example ▸
404Row not found.
Response Schema(27 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
external_id | bigint | — | Operator contest id, numeric. FanDuel: the tail of its composite id. e.g. 188369206 |
game_type_id | integernullable | — | Operator game type: DraftKings gameTypeId (1 Classic, 96 Showdown Captain, …). e.g. 70 |
operator_external_id | stringnullable | — | The operator id exactly as served. FanDuel: "{fixtureListId}-{contestId}", which the API needs back verbatim. DraftKings: same as external_id. e.g. 188369206 |
operator_id | bigint | FK to the operator. Denormalized from slates: 5,160 slate external_ids are shared between DraftKings and FanDuel, so every operator filter was a two-hop join. e.g. 1 | |
slate_id | bigint | FK to the slate this contest runs on. e.g. 32347 | |
attributes | jsonbnullable | — | The operator's raw flag set, kept whole: IsStarred, IsWinnerTakeAll, Multiplier, IsBeginner, IsCasual, IsPrivate, League, … e.g. {"lobby_captured_at":"2026-03-02T21:33:29.278Z","restricted… |
↳IsStarred attributes.IsStarred | stringnullable | — | Whether contest is starred/featured in lobby. |
↳IsQualifier attributes.IsQualifier | stringnullable | — | Whether contest awards tickets/qualifier seats. |
↳IsGuaranteed attributes.IsGuaranteed | stringnullable | — | Whether contest prize pool is guaranteed. |
↳IsWinnerTakeAll attributes.IsWinnerTakeAll | stringnullable | — | Winner-take-all payout format. |
↳Multiplier attributes.Multiplier | stringnullable | — | Contest payout multiplier flag. |
↳IsPrivate attributes.IsPrivate | stringnullable | — | Private contest restriction. |
↳League attributes.League | stringnullable | — | Contest league code. |
↳IsDoubleUp attributes.IsDoubleUp | stringnullable | — | Whether contest is a double-up format. |
↳IsFiftyfifty attributes.IsFiftyfifty | stringnullable | — | Whether contest is a 50/50 format. |
↳Is FiftyFifty attributes.Is FiftyFifty | stringnullable | — | Operator flag for 50/50 format (spaced key). |
↳Is Starred attributes.Is Starred | stringnullable | — | Operator flag for starred/featured contest (spaced key). |
↳IsGuranteed attributes.IsGuranteed | stringnullable | — | Operator flag for guaranteed prize pool (raw key spelling). |
↳contest_state_detail attributes.contest_state_detail | stringnullable | — | Detailed contest state or lifecycle detail. |
↳was_resized attributes.was_resized | booleannullable | — | Whether contest entry limit was adjusted or resized. |
↳live_telemetry attributes.live_telemetry | jsonbnullable | — | Live contest telemetry and pacing payload. |
↳hybrid_sampling attributes.hybrid_sampling | jsonbnullable | — | Hybrid sampling simulation configuration. |
↳lineup_capsule_uri attributes.lineup_capsule_uri | stringnullable | — | URI pointer to compressed contest lineup capsule. |
↳fill_pct attributes.lineup_capsule_uri.fill_pct | decimalnullable | — | Current percentage of entries filled. |
↳minutes_to_lock attributes.lineup_capsule_uri.minutes_to_lock | decimalnullable | — | Minutes remaining until contest lock. |
↳velocity_per_min attributes.lineup_capsule_uri.velocity_per_min | decimalnullable | — | Entry velocity rate per minute. |
↳projected_final_entries attributes.lineup_capsule_uri.projected_final_entries | bigintnullable | — | Projected final entry count at lock. |
↳projected_overlay_cents attributes.lineup_capsule_uri.projected_overlay_cents | bigintnullable | — | Projected operator overlay in integer cents. |
contest_state | stringnullable | — | Latest observed state: Upcoming, Live, Completed, Cancelled. DraftKings cs / contestState. Values:CompletedCancelled |
contest_type | integer | — | Contest structure code (0 = Tournament / GPP, 1 = Cash game / 50-50 / Double-up / head-to-head, 2 = League: a small public operator contest, e.g. a FanDuel 3-player league). e.g. 0 |
entry_count | integer | — | Latest observed entries. The history is in contest_snapshots. e.g. 0 |
entry_fee | integer | — | Entry fee in cents (e.g. 500 = $5.00, 2000 = $20.00). 0 for free contests. e.g. 100 |
first_seen_at | timestamptznullable | — | First lobby observation. e.g. — (all-null in sample) |
game_count | integer | — | Number of games in the pool of the contest's slate (distinct games in dfs.slate_games). 0 when the slate has no linked games. e.g. — (all-null in sample) |
guaranteed | boolean | — | Whether the prize pool is guaranteed regardless of entries filled. Values:truefalse |
last_seen_at | timestamptznullable | — | Last lobby observation. A contest absent from the lobby after this is cancelled or locked. e.g. 2026-10-02T03:09:20.810Z |
max_entries | integer | — | Maximum total entries the contest accepts. Latest observed. e.g. 100 |
max_entries_per_user | integer | — | Maximum lineups a single entrant may submit. e.g. 1 |
name | string | — | Operator-facing contest name (e.g. "$5 NBA Mini-MAX"). e.g. 50/50 Contest ($1 - Top 50% Win) |
paid_places | integernullable | — | Number of paying positions. FanDuel serves it in the lobby (prizes.count); DraftKings derives it from the ladder. e.g. 1 |
payout_type | integernullable | — | DraftKings pt. 1 on all paid contests; 2 marked the two $0 promo contests. e.g. 1 |
player_count | integer | — | Number of rows in the pool of the contest's slate (dfs.slate_players). On showdown and single-game slates a CPT or MVP row counts separately, so the number can be twice the players. e.g. — (all-null in sample) |
prize_pool | integer | — | Total prize pool in cents (e.g. 10000000 = $100,000.00). On qualifiers, includes ticket face value. e.g. 2500 |
qualifier | boolean | — | Satellite or qualifier — pays tickets or seats, not (only) cash. Excluded from field-size statistics. Values:falsetrue |
slate_status | stringnullable | — | Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates. e.g. — (all-null in sample) |
start_time | timestamptznullable | — | The contest's own lock time. A late-swap contest locks later than its slate. e.g. 2026-03-03T00:00:00.000Z |
state | string | — | Lifecycle state of the contest in the Prelock / Started / Completed vocabulary, derived by the API on every read (browse.rs derive_dfs_lifecycle_state) from the parent slate status: Upcoming → Prelock, Live → Started, Completed → Completed. `status` is the authoritative field; this one repeats it in the older vocabulary. e.g. — (all-null in sample) |
status | stringnullable | — | Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates. e.g. — (all-null in sample) |
GET/api/v1/dfs/contests/{contest_id}/downloadDownload full contest lineups (CSV or JSON)
Parameters
contest_idpathbigintrequiredInternal database contest ID or operator external_id.
formatquerystringoptionaldefault jsonOutput format (csv or json).
enrichquerystringoptionalDeclarative cross-entity enrichment tags (e.g. dfs.player_stats, nfl.games, nfl.teams). When format=csv, dfs.player_stats embeds non-zero boxscore statistics into each slot cell.
sampled_onlyquerybooleanoptionalWhen true on sampled contests, excludes unpopulated standings rows (0 in JSON, None in CSV), returning only clean populated lineups.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests/37021368/download?format=csv'Responses
200Download full contest lineups (CSV or JSON)application/jsonshow example ▸
400Invalid contest ID format
404Contest or full contest lineup not found, or the loader does not collect lineups for this contest (lineups_not_collected: a caller with a paid plan on a DraftKings contest that has started, see the description)
410DraftKings no longer serves the lineup file of this contest (lineups_file_gone)
503The loader gave up on the lineup file and support is informed (lineups_not_loaded, Retry-After 3600), or the request to load it could not be queued (lineups_request_failed, Retry-After 60)
Response Schema(3 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
contest | object | — | Contest metadata. |
↳id contest.id | bigint | — | Contest ID. |
↳name contest.name | string | — | Contest name. |
↳sport contest.sport | string | — | League or sport code. |
↳operator contest.operator | string | — | DFS operator name (DraftKings, FanDuel). |
↳season contest.season | integer | — | Season year. |
↳date contest.date | string | — | Slate date (YYYY-MM-DD). |
↳slate_id contest.slate_id | bigint | — | DFS slate ID. |
↳operator_slate_id contest.operator_slate_id | bigint | — | Operator slate ID (DraftKings contestGroupId, FanDuel fixtureListId). |
↳slate_name contest.slate_name | string | — | Name of the slate (e.g. Main, Sunday Main). |
↳game_type contest.game_type | string | — | Contest format (classic, showdown). |
↳total_entries contest.total_entries | bigint | — | Total entrants. |
↳paid_places contest.paid_places | bigint | — | Total paying positions. |
↳entry_fee_cents contest.entry_fee_cents | bigint | — | Entry fee in cents. |
↳prize_pool_cents contest.prize_pool_cents | bigint | — | Prize pool in cents. |
↳slots contest.slots | list<S> | — | Ordered roster position slots. |
↳live contest.live | objectnullable | — | Present only while the lineups come from a live file: a DraftKings contest whose games still run, read at each game start, every minute for the next 30 minutes, then every 15 minutes until its final file is loaded at Completed. The seats of players whose games have not started are hidden, and no player points, payouts or ownership are served. Absent for a final file. |
↳read_at contest.live.read_at | string | — | When the live file was read from DraftKings (UTC, RFC 3339). Ranks and entry points are as of this time. |
↳kickoff_at contest.live.kickoff_at | string | — | The latest game start of the contest's slate that the live file covers (UTC, RFC 3339). Seats of games that start later are hidden. |
player_pool | list | — | The contest's player pool, one row per player per roster slot (hub decision D1). On a single-game contest (DraftKings showdown, FanDuel single game) each player has two rows with the same id: the multiplied slot (CPT on DraftKings, MVP on FanDuel) and FLEX (UTIL on NBA formats). On a contest with several multiplied slots (FanDuel NBA MVP 2x, STAR 1.5x, PRO 1.2x; FanDuel MLB MVP 2x, STAR 1.5x, shown as All-Star in the operator's file) each player has one row per multiplied slot and one for the plain slot (UTIL): the points of a row are the player's points times the multiplier of its slot. On a classic contest each player has one row, and its slot is his roster position. A lineup seat reads the row with its player id and its slot: the first seat of a single-game lineup is the CPT/MVP seat. Unique on (id, slot). Box-score stats come as an object per row with enrich=dfs.player_stats. |
↳id player_pool[].id | bigint | — | The operator's player id (dfs.slate_players.external_id). lineups[].slots hold these ids. A single-game player's CPT/MVP row and FLEX row share it. A removed-player seat (is_removed) has a negative id local to the contest instead: the operator's file names him without an id. The same holds for a shared-name seat (is_shared_name). |
↳slot player_pool[].slot | stringnullable | — | The roster slot this row prices and scores. On a single-game contest: CPT (DraftKings) or MVP (FanDuel) for the multiplied slot, and FLEX for the other slot (UTIL on NBA formats, as the contest names it). On a contest with several multiplied slots: MVP, STAR and PRO (MLB has MVP and STAR) for the multiplied slots, and UTIL for the plain slot. On a classic contest: the player's roster position. Null only for an unresolved player on a classic contest, whose position is unknown. |
↳canonical_player_id player_pool[].canonical_player_id | bigintnullable | — | Our player ID in the league player tables. Null while the player is parked (DraftKings lists him, his identity is not resolved yet) or matched only by name; the player is still served with the operator's own name, team, position, salary and points. On a removed-player seat (is_removed) it is the player our player finder names for the operator's name. On a shared-name seat (is_shared_name) it is always null: two players of the operator's pool carry the name, and no rule picks one. |
↳name player_pool[].name | stringnullable | — | The player's name, from the operator's contest data or the slate's player pool. Null when neither holds it (is_unresolved is then true); never a placeholder such as "Player 123". |
↳team player_pool[].team | stringnullable | — | Team abbreviation. Null for a player without a team (a golfer) and for an unresolved player. |
↳position player_pool[].position | stringnullable | — | The player's real position (QB, RB, WR, TE, K, DST on DraftKings, D on FanDuel ...), the same on his CPT/MVP row and his FLEX row; never a slot such as CPT or MVP. Null only for an unresolved player. |
↳salary player_pool[].salary | integernullable | — | The salary of this slot in dollars, as the operator prices it: the CPT/MVP row carries the multiplied price (1.5x on DraftKings). Null only when the price is unknown (an unresolved player). |
↳fantasy_points player_pool[].fantasy_points | decimalnullable | — | The fantasy points this slot scores: the CPT/MVP row carries the multiplied points (1.5x). Null when nothing measured them: a contest with no lineup file before our stats hold the game (the points appear once they do), or a player the operator's contest data gave no points for and our stats do not hold. Never a 0 placeholder. |
↳ownership player_pool[].ownership | object | — | Contest field ownership of the player (not of the row's slot): his CPT/MVP row and his FLEX row carry the same values. Every share is null when the contest has no stored lineup (no lineup file yet, or a file with standings only): nothing measured it, and it is never shown as 0. |
↳field_pct player_pool[].ownership.field_pct | decimalnullable | — | Share of the field's lineups that hold the player in any slot, in percent. Null when the contest has no stored lineup. |
↳cash_pct player_pool[].ownership.cash_pct | decimalnullable | — | Share of the cashing lineups that hold the player, in percent. Null unless the contest's lineup file stored it (older version-1 files, when a stored lineup cashed); current files do not store it, so it is null on them. |
↳top1_pct player_pool[].ownership.top1_pct | decimalnullable | — | Share of the top-1% lineups that hold the player, in percent. Null unless the contest's lineup file stored it (older version-1 files, when a stored lineup ranked in the top 1%); current files do not store it, so it is null on them. |
↳cpt_field_pct player_pool[].ownership.cpt_field_pct | decimalnullable | — | Share of the field's lineups that hold the player at CPT/MVP, in percent. On a contest with several multiplied slots, the share that hold him in the slot of the row (null on the UTIL row). Null on a classic contest and when the contest has no stored lineup. |
↳flex_field_pct player_pool[].ownership.flex_field_pct | decimalnullable | — | Share of the field's lineups that hold the player at FLEX, in percent. On a contest with several multiplied slots, the share that hold him in a UTIL seat. Null on a classic contest and when the contest has no stored lineup. |
↳is_unresolved player_pool[].is_unresolved | boolean | — | True when the player matches no row of the slate's player pool and the operator's contest data holds no name for him. The values the data does not hold are then null. |
↳export_id player_pool[].export_id | stringnullable | — | The id the operator's lineup upload file uses for the player in this slot: the DraftKings draftable id, which differs between a player's CPT row and his FLEX row; the FanDuel "<fixture list id>-<player id>" id, the same on both rows. Null when unknown. |
↳is_removed player_pool[].is_removed | booleannullable | — | Present, and true, only on a removed-player seat: the operator took the player off the slate after users drafted him (a trade, a cut), and its contest file still lists his seat with the points its own player table holds for him (0 when the table says 0). The row carries the operator's name and position, our player id (canonical_player_id), those fantasy points, and no salary, team or upload id. The key is absent on every other row. |
↳is_shared_name player_pool[].is_shared_name | booleannullable | — | Present, and true, only on a shared-name seat: the operator's own player pool gives the name to two players of one position, and its contest file names a seat by name and position only, so the seat belongs to neither. The row carries the operator's name and position and the points of its player table (the same whichever player is meant), and no player id of any kind (canonical_player_id is null), salary, team or upload id. The key is absent on every other row. |
lineups | list | — | Entrant lineups with rank, user, points, payout, and seat selections. |
↳rank lineups[].rank | integer | — | Final standing rank. |
↳username lineups[].username | string | — | Contest entrant username. |
↳points lineups[].points | decimal | — | Total lineup fantasy points. |
↳payout_cents lineups[].payout_cents | decimalnullable | — | Payout in cents. Null while the contest is live (contest.live). |
↳slots lineups[].slots | list<L> | — | Selected player IDs matching contest slots. 0 is a seat without a player; while the contest is live, a hidden seat (hidden_slots). |
↳hidden_slots lineups[].hidden_slots | list<S>nullable | — | Present only while the contest is live (contest.live), on a lineup with hidden seats. The slots whose player's game has not started (DraftKings shows them as LOCKED). |
GET/api/v1/dfs/marqueeThe marquee contests of an NFL week or of a range of NBA nights, by operator
Parameters
leaguequerystringrequirednfl or nba.
seasonqueryintegeroptionalNFL only. Season start year (e.g. 2026). Without week, the current week of that season, else week 1.
weekqueryintegeroptionalNFL only. Regular-season week, 1-18. Without season, the current season.
fromquerystringoptionalNBA only. First night (US Eastern, YYYY-MM-DD). Alone, 7 nights from it.
toquerystringoptionalNBA only. Last night (US Eastern, YYYY-MM-DD), at most 13 days after from. Alone, the 7 nights up to it.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/marquee?league=nfl&season=2026&week=3'Responses
200The marquee contests of an NFL week or of a range of NBA nights, by operatorapplication/jsonshow example ▸
400league is not nfl or nba, week is outside 1-18, a date is not YYYY-MM-DD, to is before from, more than 14 nights, or a parameter of the other league
404No such NFL regular-season week
Response Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
league | string | — | The league described. |
today | string | — | Today in US Eastern time (YYYY-MM-DD). |
season | integernullable | — | The NFL season described. Null for NBA. |
week | integernullable | — | The NFL week described. Null for NBA. |
from | string | — | The first day described (US Eastern, YYYY-MM-DD). For NFL the start of the week window. |
to | string | — | The last day described (US Eastern, YYYY-MM-DD), included. |
free_rows | integer | — | Standings entries of a marquee contest that are open to everyone (100). |
marquee | list | — | The marquee contests, by date, DraftKings before FanDuel. |
↳league marquee[].league | string | — | The contest's league. |
↳operator marquee[].operator | string | — | The operator. |
↳occasion marquee[].occasion | string | — | sunday_main (an NFL week's main slate), tnf or mnf (an NFL primetime night), night (an NBA night). |
↳date marquee[].date | string | — | The slate's day (US Eastern, YYYY-MM-DD). |
↳slate_id marquee[].slate_id | bigint | — | Internal slate ID. |
↳contest_id marquee[].contest_id | bigint | — | Internal contest ID (references dfs.contests.id). |
↳name marquee[].name | string | — | Contest name. |
↳entries marquee[].entries | bigint | — | Entries that the operator lists for the contest. |
↳entry_fee_cents marquee[].entry_fee_cents | bigint | — | Entry fee in cents. |
↳prize_pool_cents marquee[].prize_pool_cents | bigint | — | Prize pool in cents. |
↳lock marquee[].lock | stringnullable | — | The contest's start, the lock (ISO 8601, UTC). |
↳status marquee[].status | stringnullable | — | The operator's contest state (Upcoming, Live, Completed). |
↳free marquee[].free | boolean | — | The contest is in a free season (NFL from 2026, NBA from 2026-10-20). |
↳free_rows marquee[].free_rows | integer | — | Standings entries open to everyone once results_open (100), 0 when not free. |
↳results_open marquee[].results_open | boolean | — | The lineup file exists and the contest is free, so its first free_rows entries are open now. |
GET/api/v1/dfs/contests/{contest_id}/ownershipActual player ownership of one contest, one row per player and roster slot
Parameters
contest_idpathbigintrequiredInternal DFS contest ID (references dfs.contests.id).
formatquerystringoptionaldefault json'json' (default) or 'csv' (the same rows and columns).
slotquerystringoptionalRoster slot filter: CPT, MVP or FLEX.
positionquerystringoptionalNatural position filter (QB, RB, WR, TE, K, DST).
min_ownershipquerydecimaloptionalSmallest actual_ownership to return, as a ratio from 0 to 1.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests/37021368/ownership'Responses
200Actual player ownership of one contest, one row per player and roster slotapplication/jsonshow example ▸
400An unknown format or slot, a min_ownership outside 0 to 1, or an operator external contest ID in the path
404Contest not found
Response Schema(4 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
contest | object | — | The contest. |
↳contest_id contest.contest_id | bigint | — | Internal contest ID. |
↳external_id contest.external_id | bigint | — | Operator contest ID. |
↳slate_id contest.slate_id | bigint | — | Internal slate ID. |
↳operator contest.operator | string | — | DraftKings or FanDuel. |
↳name contest.name | string | — | Contest name. |
↳game_type contest.game_type | string | — | CLASSIC, SHOWDOWN or SINGLE_GAME. |
ownership | list | — | One row per player and roster slot, the highest actual_ownership first. |
↳contest_id ownership[].contest_id | bigint | — | The contest that the row comes from. Always the contest in the path. |
↳slate_player_id ownership[].slate_player_id | bigint | — | dfs.slate_players id of the seat row. |
↳operator_player_id ownership[].operator_player_id | stringnullable | — | The operator's player ID (DraftKings or FanDuel). |
↳player_id ownership[].player_id | bigintnullable | — | Our player ID. Null when the player is not resolved. |
↳name ownership[].name | stringnullable | — | Player name. |
↳team ownership[].team | stringnullable | — | Team abbreviation. |
↳position ownership[].position | stringnullable | — | Natural position of the player (for example WR), also on a CPT or MVP row. |
↳slot ownership[].slot | stringnullable | — | Roster slot of the row. Null on a classic contest. |
↳salary ownership[].salary | integernullable | — | Salary of the slot. |
↳lineups ownership[].lineups | integer | — | Lineups that hold the player in this slot. |
↳lineups_used ownership[].lineups_used | integer | — | Lineups that the ownership of this contest was computed from. |
↳entry_count ownership[].entry_count | integernullable | — | Entries that the operator lists for the contest. |
↳actual_ownership ownership[].actual_ownership | decimal | — | lineups / lineups_used, a ratio from 0 to 1 with 4 decimals. |
↳total_ownership ownership[].total_ownership | decimal | — | Ownership of the player in any slot. Equals actual_ownership on a classic contest. |
reason | stringnullable | — | Why the answer holds no rows. Null when it holds rows. |
_metadata | objectnullable | — | The preview notice, sent only when the answer is cut to 5 rows: a caller without a paid plan on a contest that is not a free flagship. Absent otherwise. |
↳required_tier _metadata.required_tier | string | — | The plan that opens the whole table (pro). |
↳message _metadata.message | string | — | What the plan opens, with the pricing link. |
↳total_actual_records _metadata.total_actual_records | bigint | — | The rows of the answer before the cut. |
GET/api/v1/dfs/contests/{contest_id}/projectionsContest-calibrated player projections, payout profile, and ownership
Parameters
contest_idpathbigintrequiredInternal DFS contest ID (references dfs.contests.id).
positionquerystringoptionalRoster position filter (e.g. QB, RB, WR, TE, DST, K).
formatquerystringoptionaldefault jsonRow format: 'json' (default) sends the nested rows in `projections`; 'flat' sends the flat rows in `player_stats`; 'csv' returns the flat rows as text/csv, one column per `player_stats` field, then one per `enrich` tag.
enrichquerystringoptionalComma-separated tags that join related data onto each player row, the same tags as on /dfs/slate_players: dfs.player_stats, nfl.games, nfl.teams, nfl.projected_player_snaps (or dfs.*, nfl.*, *; a sub-path picks one field). Each tag adds one key (one CSV column) named by its table. NFL contests only: an NBA contest answers 400 with this parameter.
projection_idquerybigintoptionalNBA contests only: a version of our NBA engine (main.projections id). Default: its active version. An NFL contest answers 400 with this parameter.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests/37021368/projections'Responses
200Contest-calibrated player projections, payout profile, and ownershipapplication/jsonshow example ▸
400Invalid contest ID format or an unknown format
404Contest not found, or its slate's format has no projection source (in-game formats answer 200 with projection_status none_by_design, a slate with no player pool 200 with no_player_pool)
Response Schema(10 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
projection_status | string | — | Whether the slate's format has projections. `available`: the format has a projection source, and the arrays hold its rows (a player without a projection has null values). `none_by_design`: the format has no projections by decision (the in-game formats: DraftKings In-Game Showdown H2 and Q4, FanDuel single game 2nd half and 4th quarter); `source` is null and the arrays are empty. `no_player_pool`: the slate has no player pool yet, so there is nothing to project; `source` is null and the arrays are empty. `not_projected_yet` (NBA): no player of the slate has a projection of our NBA engine yet. A game's first projection appears on game day, once its betting line and roster are in, and preseason games are never projected; the arrays are empty. `not_projected` (NBA): every game of the slate tipped with no projection of our NBA engine (the games before the engine ran), so none will come; the arrays are empty. `league_not_projected`: our engines do not project the slate's league (MLB, NHL, golf); the arrays are empty. |
contest | object | — | Contest metadata summary. |
↳contest_id contest.contest_id | bigint | — | Internal contest ID. |
↳external_id contest.external_id | bigint | — | Operator external contest ID. |
↳slate_id contest.slate_id | bigint | — | Underlying slate ID. |
↳name contest.name | string | — | Contest name. |
↳operator contest.operator | string | — | Operator name. |
↳game_type contest.game_type | string | — | Game format from the slate setting's game type (the dfs.slates `game_type`, upper case): CLASSIC, SHOWDOWN (DraftKings Showdown Captain Mode), SINGLE_GAME (FanDuel single game, MVP) or TIERS. |
↳entry_fee_dollars contest.entry_fee_dollars | decimal | — | Entry fee in dollars. |
↳total_entries contest.total_entries | bigint | — | Total entries allowed or enrolled. |
↳max_entries_per_user contest.max_entries_per_user | bigint | — | Maximum entries allowed per user. |
↳prize_pool_dollars contest.prize_pool_dollars | decimal | — | Total prize pool in dollars. |
↳top_1_payout_dollars contest.top_1_payout_dollars | decimalnullable | — | Top 1 first place payout in dollars. |
↳cash_places contest.cash_places | bigintnullable | — | Total paid cash places. |
↳state contest.state | stringnullable | — | Slate or contest state. |
↳contest_state contest.contest_state | stringnullable | — | Authoritative contest state (Upcoming, Live, Completed). |
↳archetype contest.archetype | string | — | The contest archetype of the learned ownership model: the stored `contest_archetype` of the contest's STAT_API_LATEST rows, else the same rule. cash (contest type 1 or a cash word such as Double Up, 50/50, H2H in the name), then gpp_single_entry (1 entry per user), gpp_small_field (fee $100 or more, or at most 500 entries), gpp_mme (20 or more entries per user), else baseline. |
contest_profile | objectnullable | — | Contest calibration profile and crowd mixture. Null for a contest that is not on an NFL slate (the NFL crowd model is not computed for another league; NBA ownership comes per contest segment, in each row's `ownership`). |
↳payout_convexity_omega contest_profile.payout_convexity_omega | decimal | — | Payout convexity parameter omega. |
↳choice_temperature_tau contest_profile.choice_temperature_tau | decimal | — | Choice temperature parameter tau. |
↳ceiling_weight_alpha contest_profile.ceiling_weight_alpha | decimal | — | Ceiling weight parameter alpha. |
↳crowd_mixture contest_profile.crowd_mixture | object | — | Crowd mixture breakdown. |
↳whale_mme_pct contest_profile.crowd_mixture.whale_mme_pct | decimal | — | MME whale crowd proportion (0.0 to 1.0). |
↳consensus_sharp_pct contest_profile.crowd_mixture.consensus_sharp_pct | decimal | — | Consensus sharp crowd proportion (0.0 to 1.0). |
↳casual_fish_pct contest_profile.crowd_mixture.casual_fish_pct | decimal | — | Casual fish crowd proportion (0.0 to 1.0). |
slate | object | — | Contest slate summary. |
↳id slate.id | bigint | — | Slate ID. |
↳external_id slate.external_id | string | — | Operator-specific contest slate identifier. |
↳operator slate.operator | string | — | DFS operator name (DraftKings, FanDuel, Yahoo). |
↳actual_ownership_contest_id slate.actual_ownership_contest_id | bigintnullable | — | The one contest (dfs.contests id) whose actual_ownership the player rows of this slate carry: the contest with actuals and the biggest prize pool, then the most entries, then the lowest id. Absent when no contest of the slate has actuals. The contest answer never uses this value. |
↳league slate.league | stringnullable | — | The slate's league (nfl, nba, mlb, nhl, golf). It decides which row fields the answer carries: the fields marked NBA only come on NBA rows, every other row field on NFL rows. |
source | objectnullable | — | Projection source metadata. Null when projection_status is none_by_design or no_player_pool, and on every NBA answer (our NBA engine has no stored source row; `_metadata.served_source` names it, STAT_API_NBA). |
↳id source.id | bigint | — | Source ID. |
↳slate_setting_id source.slate_setting_id | bigint | — | Slate setting ID. |
↳name source.name | string | — | Projection model name. |
↳source_type source.source_type | integer | — | Source type code. |
↳updated_at source.updated_at | string | — | Timestamp of projection generation. |
player_stats | list | — | The contest-calibrated player projections as flat rows, one per slate player. Sent with format=flat. format=csv returns these rows as CSV: one column per field, in this order, then one column per `enrich` tag. |
↳id player_stats[].id | bigint | — | Slate player ID (dfs.slate_players.id). |
↳slate_player_id player_stats[].slate_player_id | bigint | — | Slate player ID (dfs.slate_players.id), the same value as id. |
↳league_id player_stats[].league_id | bigint | — | League ID. |
↳slate_id player_stats[].slate_id | bigint | — | Slate ID. |
↳operator_id player_stats[].operator_id | bigint | — | Operator ID (1 DraftKings, 2 FanDuel, 3 Yahoo). |
↳scoring_format player_stats[].scoring_format | string | — | The slate's scoring format: showdown when the pool has captain (CPT/MVP) rows, else classic. |
↳player_id player_stats[].player_id | bigintnullable | — | Canonical player ID (nfl.players.id). |
↳operator_player_id player_stats[].operator_player_id | stringnullable | — | Operator athlete ID (dfs.slate_players.external_id). |
↳operator_player_export_id player_stats[].operator_player_export_id | stringnullable | — | Operator export / draftable ID for lineup CSV uploads (dfs.slate_players.export_id). |
↳slate_game_id player_stats[].slate_game_id | bigintnullable | — | Slate game ID (dfs.slate_games.id). |
↳game_id player_stats[].game_id | bigintnullable | — | Canonical game ID (nfl.games.id). |
↳team_id player_stats[].team_id | bigintnullable | — | Team ID (nfl.teams.id). |
↳slate_date player_stats[].slate_date | stringnullable | — | Slate date (YYYY-MM-DD). |
↳salary player_stats[].salary | integernullable | — | Contest player salary in currency units. |
↳position player_stats[].position | stringnullable | — | Contest roster position (e.g. QB, RB, WR, TE, DST, K, CPT). |
↳name player_stats[].name | stringnullable | — | Player name. |
↳team player_stats[].team | stringnullable | — | Team abbreviation. |
↳opponent player_stats[].opponent | stringnullable | — | Opponent team abbreviation. |
↳gsis player_stats[].gsis | stringnullable | — | NFL GSIS player ID. |
↳fantasy_pts player_stats[].fantasy_pts | decimalnullable | — | Projected fantasy points under the slate's scoring rules. Null when the player has no projection. |
↳floor player_stats[].floor | decimalnullable | — | Projected 10th percentile fantasy point outcome. |
↳ceiling player_stats[].ceiling | decimalnullable | — | Projected 90th percentile fantasy point outcome. |
↳std_dev player_stats[].std_dev | decimalnullable | — | Standard deviation of the projected fantasy point distribution. |
↳value player_stats[].value | decimalnullable | — | Projected fantasy points per $1k of salary. |
↳quantiles player_stats[].quantiles | objectnullable | — | Quantile outcomes of the simulated fantasy point distribution (p05 to p95). |
↳passing_yds_fpts player_stats[].passing_yds_fpts | decimalnullable | — | Fantasy points from projected passing yards. |
↳passing_td_fpts player_stats[].passing_td_fpts | decimalnullable | — | Fantasy points from projected passing touchdowns. |
↳interception_fpts player_stats[].interception_fpts | decimalnullable | — | Fantasy points lost to projected interceptions. |
↳passing_2pt_conversion_fpts player_stats[].passing_2pt_conversion_fpts | decimalnullable | — | Fantasy points from 2-point passing conversions (0 when the player has a projection; the model projects none). |
↳passing_bonus_fpts player_stats[].passing_bonus_fpts | decimalnullable | — | Fantasy bonus points for milestone passing (DraftKings 300+ yards). |
↳rushing_yds_fpts player_stats[].rushing_yds_fpts | decimalnullable | — | Fantasy points from projected rushing yards. |
↳rushing_td_fpts player_stats[].rushing_td_fpts | decimalnullable | — | Fantasy points from projected rushing touchdowns. |
↳fumble_lost_fpts player_stats[].fumble_lost_fpts | decimalnullable | — | Fantasy points lost to projected lost fumbles. |
↳rushing_2pt_conversion_fpts player_stats[].rushing_2pt_conversion_fpts | decimalnullable | — | Fantasy points from 2-point rushing conversions (0 when the player has a projection; the model projects none). |
↳rushing_bonus_fpts player_stats[].rushing_bonus_fpts | decimalnullable | — | Fantasy bonus points for milestone rushing (DraftKings 100+ yards). |
↳receiving_yds_fpts player_stats[].receiving_yds_fpts | decimalnullable | — | Fantasy points from projected receiving yards. |
↳reception_fpts player_stats[].reception_fpts | decimalnullable | — | Fantasy points from projected receptions (DraftKings full PPR, FanDuel half PPR). |
↳receiving_td_fpts player_stats[].receiving_td_fpts | decimalnullable | — | Fantasy points from projected receiving touchdowns. |
↳receiving_2pt_conversion_fpts player_stats[].receiving_2pt_conversion_fpts | decimalnullable | — | Fantasy points from 2-point receiving conversions (0 when the player has a projection; the model projects none). |
↳receiving_bonus_fpts player_stats[].receiving_bonus_fpts | decimalnullable | — | Fantasy bonus points for milestone receiving (DraftKings 100+ yards). |
↳passing_yds player_stats[].passing_yds | decimalnullable | — | Projected passing yards (QB, or a player with 1+ projected pass attempt). |
↳passing_tds player_stats[].passing_tds | decimalnullable | — | Projected passing touchdowns. |
↳interceptions_thrown player_stats[].interceptions_thrown | decimalnullable | — | Projected interceptions thrown. |
↳rushing_yds player_stats[].rushing_yds | decimalnullable | — | Projected rushing yards. |
↳rushing_tds player_stats[].rushing_tds | decimalnullable | — | Projected rushing touchdowns. |
↳rushing_fumbles_lost player_stats[].rushing_fumbles_lost | decimalnullable | — | Projected lost fumbles (0 when the player has a projection and the model gives none). |
↳receptions player_stats[].receptions | decimalnullable | — | Projected receptions. |
↳receiving_yds player_stats[].receiving_yds | decimalnullable | — | Projected receiving yards. |
↳receiving_tds player_stats[].receiving_tds | decimalnullable | — | Projected receiving touchdowns. |
↳carries player_stats[].carries | decimalnullable | — | Projected rushing attempts. |
↳targets player_stats[].targets | decimalnullable | — | Projected receiving targets. |
↳catch_rate player_stats[].catch_rate | decimalnullable | — | Projected receptions per target, as a percentage (0-100). |
↳passing_attempts player_stats[].passing_attempts | decimalnullable | — | Projected pass attempts. |
↳passing_completions player_stats[].passing_completions | decimalnullable | — | Projected pass completions. |
↳snap_pct player_stats[].snap_pct | decimalnullable | — | Projected offensive snap share, as a percentage (0-100). |
↳projected_snap_share player_stats[].projected_snap_share | decimalnullable | — | Projected offensive snap share, as a fraction (0-1). |
↳projected_snaps player_stats[].projected_snaps | decimalnullable | — | Projected offensive snaps. |
↳projected_team_snaps player_stats[].projected_team_snaps | decimalnullable | — | Projected team offensive snaps. |
↳player_game_note player_stats[].player_game_note | stringnullable | — | Game note for the player from the projection model. |
↳projected_ownership player_stats[].projected_ownership | decimalnullable | — | Projected tournament roster share, as a fraction (0-1). |
↳ownership_pct player_stats[].ownership_pct | decimalnullable | — | Projected tournament roster share, as a percentage (e.g. 15.5 for 15.5%). |
↳ownership_volatility player_stats[].ownership_volatility | decimalnullable | — | Standard deviation of the projected ownership percentage across simulated crowds. |
↳ownership_low player_stats[].ownership_low | decimalnullable | — | 10th percentile projected ownership percentage. |
↳ownership_high player_stats[].ownership_high | decimalnullable | — | 90th percentile projected ownership percentage. |
↳chalk_fragility player_stats[].chalk_fragility | decimalnullable | — | Chalk fragility index in [0, 1] (0 = stable across cap allocations, 1 = fragile). |
↳cash_projected_ownership player_stats[].cash_projected_ownership | decimalnullable | — | Projected cash-game (double-up, 50/50) roster share, as a fraction (0-1). Null on contest projections. |
↳cash_ownership_pct player_stats[].cash_ownership_pct | decimalnullable | — | Projected cash-game roster share, as a percentage. Null on contest projections. |
↳captain_ownership player_stats[].captain_ownership | decimalnullable | — | Showdown: projected ownership percentage of this player's captain (CPT/MVP) row. Null on classic slates. |
↳flex_ownership player_stats[].flex_ownership | decimalnullable | — | Showdown: projected ownership percentage of this player's FLEX row. Null on classic slates. |
↳total_ownership player_stats[].total_ownership | decimalnullable | — | Showdown: captain plus FLEX ownership percentage. Null on classic slates. |
↳captain_ratio player_stats[].captain_ratio | decimalnullable | — | Showdown: captain ownership divided by total ownership (0-1). Null on classic slates. |
↳play_profile player_stats[].play_profile | objectnullable | — | Play profile with upside and safety metrics, boom/bust probabilities, archetype and analysis. |
↳upside_tier player_stats[].upside_tier | stringnullable | — | Salary-adjusted upside tier (ELITE, BOOM, STEADY, LOW_CAP, NONE). |
↳ceiling_multiplier player_stats[].ceiling_multiplier | decimalnullable | — | Ceiling per $1k of salary. |
↳boom_probability player_stats[].boom_probability | decimalnullable | — | Probability of scoring at least the boom multiple of salary. |
↳cash_safety_tier player_stats[].cash_safety_tier | stringnullable | — | Salary-adjusted cash safety tier (CORE_CASH, CASH_VIABLE, MODERATE, HIGH_RISK, UNVIABLE). |
↳floor_multiplier player_stats[].floor_multiplier | decimalnullable | — | Floor per $1k of salary. |
↳bust_probability player_stats[].bust_probability | decimalnullable | — | Probability of scoring under 1.5x salary. |
↳play_archetype player_stats[].play_archetype | stringnullable | — | Archetype (GPP_BOOM, CORE_CASH, LEVERAGE, FRAGILE_CHALK, BALANCED, LOW_CAP, OUT_INACTIVE, or the model's tactical label). |
↳leverage_factor player_stats[].leverage_factor | decimalnullable | — | Tournament leverage factor (ceiling_multiplier / max(0.02, ownership)). |
↳tactical_tag player_stats[].tactical_tag | stringnullable | — | Tactical play tag from the projection model (e.g. GOOD_CHALK, FRAGILE_CHALK, LEVERAGE). |
↳fade_leverage_score player_stats[].fade_leverage_score | decimalnullable | — | Score for fading the player in tournaments, from the projection model. |
↳knapsack_shadow_price player_stats[].knapsack_shadow_price | decimalnullable | — | Marginal points per salary dollar at the optimizer's cap constraint, from the projection model. |
↳relative_fragility player_stats[].relative_fragility | decimalnullable | — | Fragility relative to the player's position peers on the slate, from the projection model. |
↳analysis_headline player_stats[].analysis_headline | stringnullable | — | One-line summary of the player's role, floor or ceiling. |
↳cash_verdict player_stats[].cash_verdict | stringnullable | — | Cash-game verdict. |
↳gpp_verdict player_stats[].gpp_verdict | stringnullable | — | Tournament verdict. |
↳vegas_odds player_stats[].vegas_odds | objectnullable | — | The player's betting props used as calibration anchors. |
↳anytime_td player_stats[].vegas_odds.anytime_td | integernullable | — | Anytime touchdown odds (American format). |
↳rushing_yards player_stats[].vegas_odds.rushing_yards | decimalnullable | — | Rushing yards consensus betting line. |
↳receiving_yards player_stats[].vegas_odds.receiving_yards | decimalnullable | — | Receiving yards consensus betting line. |
↳receptions player_stats[].vegas_odds.receptions | decimalnullable | — | Receptions consensus betting line. |
↳passing_yards player_stats[].vegas_odds.passing_yards | decimalnullable | — | Passing yards consensus betting line. |
↳passing_tds player_stats[].vegas_odds.passing_tds | decimalnullable | — | Passing touchdowns consensus betting line. |
↳dvp_archetype player_stats[].dvp_archetype | stringnullable | — | Player usage archetype the defense-vs-position rating uses. |
↳dvp_rank player_stats[].dvp_rank | integernullable | — | Opponent defense rank against the archetype (1 = best matchup). |
↳dvp_rating player_stats[].dvp_rating | decimalnullable | — | Defense-vs-position matchup rating. |
↳dvp_matchup player_stats[].dvp_matchup | stringnullable | — | Matchup label (e.g. Favorable, Neutral, Tough). |
↳dvp_explanation player_stats[].dvp_explanation | stringnullable | — | Explanation of the defensive matchup. |
↳dvp_metrics player_stats[].dvp_metrics | objectnullable | — | Defense-vs-position metrics behind the rating. |
↳scheme_metrics player_stats[].scheme_metrics | objectnullable | — | Defensive scheme indicators behind the rating. |
↳last_update_time player_stats[].last_update_time | timestamptznullable | — | When the projection last changed (UTC). |
↳update_explanation player_stats[].update_explanation | stringnullable | — | Why the projection last changed. |
↳update_reason player_stats[].update_reason | objectnullable | — | Structured reason of the last change. |
↳update_history player_stats[].update_history | list<object>nullable | — | The last 5 projection changes, oldest first. |
↳actual_fantasy_pts player_stats[].actual_fantasy_pts | decimalnullable | — | Post-game: fantasy points scored (dfs.player_stats). Null in mode=pre. |
↳actual_ownership player_stats[].actual_ownership | decimalnullable | — | Post-game: roster share in the slate's largest contest with results, as a fraction (0-1). Null in mode=pre. |
↳actual_rank player_stats[].actual_rank | integernullable | — | Post-game: the player's rank by actual ownership in the contest (contest projections only). Null in mode=pre. |
↳leverage_delta player_stats[].leverage_delta | decimalnullable | — | Post-game: actual_ownership minus projected_ownership. Null in mode=pre. |
↳status player_stats[].status | stringnullable | — | NBA only: the player's status in our NBA game roster (active, questionable, out, ...). |
↳seat_multiplier player_stats[].seat_multiplier | decimalnullable | — | NBA only: the seat's score multiplier from the slate setting (DraftKings CPT 1.5, FanDuel MVP 1.5); 1 for every other seat. fantasy_pts, floor, ceiling, std_dev and quantiles are already multiplied. |
↳chance_5x player_stats[].chance_5x | decimalnullable | — | NBA only: chance the seat's points reach 5x salary / 1000, 0 to 1 (see the route description); null without a salary. |
↳chance_5x_bound player_stats[].chance_5x_bound | stringnullable | — | NBA only: set when chance_5x is a bound, not a value: above_99pct (the chance is 0.99 or more) or below_1pct (0.01 or less). |
↳chance_6x player_stats[].chance_6x | decimalnullable | — | NBA only: chance the seat's points reach 6x salary / 1000, 0 to 1; null without a salary. |
↳chance_6x_bound player_stats[].chance_6x_bound | stringnullable | — | NBA only: set when chance_6x is a bound, not a value. |
↳minutes_mean player_stats[].minutes_mean | decimalnullable | — | NBA only: projected minutes (mean). |
↳minutes_std player_stats[].minutes_std | decimalnullable | — | NBA only: standard deviation of the projected minutes. |
↳minutes_p10 player_stats[].minutes_p10 | decimalnullable | — | NBA only: 10th percentile of the projected minutes. |
↳minutes_p25 player_stats[].minutes_p25 | decimalnullable | — | NBA only: 25th percentile of the projected minutes. |
↳minutes_p50 player_stats[].minutes_p50 | decimalnullable | — | NBA only: median of the projected minutes. |
↳minutes_p75 player_stats[].minutes_p75 | decimalnullable | — | NBA only: 75th percentile of the projected minutes. |
↳minutes_p90 player_stats[].minutes_p90 | decimalnullable | — | NBA only: 90th percentile of the projected minutes. |
↳usage_rate player_stats[].usage_rate | decimalnullable | — | NBA only: projected usage rate, 0 to 1. |
↳play_probability player_stats[].play_probability | decimalnullable | — | NBA only: chance the player plays, 0 to 1. |
↳start_probability player_stats[].start_probability | decimalnullable | — | NBA only: chance the player starts, 0 to 1. |
↳pts player_stats[].pts | decimalnullable | — | NBA only: projected points (the stat). |
↳reb player_stats[].reb | decimalnullable | — | NBA only: projected rebounds. |
↳ast player_stats[].ast | decimalnullable | — | NBA only: projected assists. |
↳stl player_stats[].stl | decimalnullable | — | NBA only: projected steals. |
↳blk player_stats[].blk | decimalnullable | — | NBA only: projected blocks. |
↳fg3m player_stats[].fg3m | decimalnullable | — | NBA only: projected three-pointers made. |
↳tov player_stats[].tov | decimalnullable | — | NBA only: projected turnovers. |
↳double_double_probability player_stats[].double_double_probability | decimalnullable | — | NBA only: chance of a double-double, 0 to 1. |
↳triple_double_probability player_stats[].triple_double_probability | decimalnullable | — | NBA only: chance of a triple-double, 0 to 1. |
↳profile_id player_stats[].profile_id | bigintnullable | — | NBA only: the contest segment (dfs.contest_profiles.id) of the ownership on this row; contest projections only, null on a slate. |
↳ownership_model player_stats[].ownership_model | stringnullable | — | NBA only: the ownership model that wrote the row's ownership; contest projections only, null on a slate. |
computed | object | — | Projection coverage and calculation summary. |
↳eligible_players computed.eligible_players | bigint | — | Total eligible players in contest pool. |
↳projected_players computed.projected_players | bigint | — | Number of players with generated projections. |
↳missing_players computed.missing_players | bigint | — | Unprojected player count. |
↳coverage computed.coverage | decimal | — | Percentage of pool successfully projected. |
↳total_teams computed.total_teams | integernullable | — | Total active teams projected on the slate. |
↳position computed.position | stringnullable | — | Roster position filter applied to request. |
↳total_roster_mass computed.total_roster_mass | decimalnullable | — | Total roster mass. |
↳position_ownership_totals computed.position_ownership_totals | objectnullable | — | Aggregate ownership by position. |
↳refused_seats computed.refused_seats | listnullable | — | NBA only: the seats that have a projection but are left out of the rows, each with the reason (never guessed). Absent on NFL answers. |
↳slate_player_id computed.refused_seats[].slate_player_id | bigint | — | The seat (dfs.slate_players.id). |
↳position computed.refused_seats[].position | stringnullable | — | The seat's position as the operator names it. |
↳reason computed.refused_seats[].reason | string | — | no_seat_multiplier: a CPT, MVP, STAR or PRO seat whose slate setting states no score multiplier. no_scoring_rules: no scoring table of the operator is in force at the game's time. bad_stat_line: the player's stat line cannot be scored. |
teams | listnullable | — | Team projections and game pace for every team on the contest's slate. Sent with the default format and with format=flat. |
↳team_id teams[].team_id | bigint | — | Canonical team ID (references nfl.teams). |
↳team_code teams[].team_code | string | — | Team abbreviation code (e.g. DET, KC, LAR). |
↳opponent_team_id teams[].opponent_team_id | bigintnullable | — | Opponent team ID. |
↳opponent_team_code teams[].opponent_team_code | stringnullable | — | Opponent team abbreviation code. |
↳matchup_id teams[].matchup_id | bigintnullable | — | Unique slate game matchup identifier. |
↳primary_qb_player_id teams[].primary_qb_player_id | bigintnullable | — | Projected starting quarterback player ID. |
↳total_offensive_snaps teams[].total_offensive_snaps | decimal | — | Projected team total offensive snaps. |
↳implied_total teams[].implied_total | decimalnullable | — | Implied team total points from betting game line and spread. |
↳spread teams[].spread | decimalnullable | — | Point spread consensus line. |
↳game_total teams[].game_total | decimalnullable | — | Over/under game total consensus line. |
↳vegas_odds teams[].vegas_odds | objectnullable | — | Associated team game betting props. |
↳pass_play_pct teams[].pass_play_pct | decimal | — | Projected offensive passing play rate percentage. |
↳run_play_pct teams[].run_play_pct | decimal | — | Projected offensive rushing play rate percentage. |
↳seconds_per_play teams[].seconds_per_play | decimalnullable | — | Projected seconds per offensive play (nfl.projected_team_snaps). |
↳no_huddle_rate teams[].no_huddle_rate | decimalnullable | — | Projected no-huddle play rate (nfl.projected_team_snaps). |
↳pass_oe teams[].pass_oe | decimalnullable | — | Projected pass rate over expected (nfl.projected_team_snaps). |
↳projected_defensive_snaps teams[].projected_defensive_snaps | decimalnullable | — | Projected defensive snaps (nfl.projected_team_snaps). |
↳passing teams[].passing | object | — | Team passing volume totals. |
↳attempts teams[].passing.attempts | decimal | — | Projected team pass attempts. |
↳completions teams[].passing.completions | decimal | — | Projected team pass completions. |
↳yards teams[].passing.yards | decimal | — | Projected team passing yards. |
↳touchdowns teams[].passing.touchdowns | decimal | — | Projected team passing touchdowns. |
↳interceptions teams[].passing.interceptions | decimal | — | Projected team interceptions. |
↳targets teams[].passing.targets | decimal | — | Projected team pass targets. |
↳rushing teams[].rushing | object | — | Team rushing volume totals. |
↳attempts teams[].rushing.attempts | decimal | — | Projected team rushing attempts. |
↳yards teams[].rushing.yards | decimal | — | Projected team rushing yards. |
↳touchdowns teams[].rushing.touchdowns | decimal | — | Projected team rushing touchdowns. |
↳players teams[].players | list<object> | — | Distribution of projections across team skill position roster. |
↳game_id teams[].game_id | bigintnullable | — | NBA only: the game (nba.games.id). |
↳is_home teams[].is_home | booleannullable | — | NBA only: the team plays at home. |
↳possessions_mean teams[].possessions_mean | decimalnullable | — | NBA only: projected possessions (mean). |
↳possessions_p10 teams[].possessions_p10 | decimalnullable | — | NBA only: 10th percentile of the projected possessions. |
↳possessions_p50 teams[].possessions_p50 | decimalnullable | — | NBA only: median of the projected possessions. |
↳possessions_p90 teams[].possessions_p90 | decimalnullable | — | NBA only: 90th percentile of the projected possessions. |
↳pace_per_48 teams[].pace_per_48 | decimalnullable | — | NBA only: projected pace per 48 minutes. |
↳team_points_mean teams[].team_points_mean | decimalnullable | — | NBA only: projected team points (mean). |
↳team_points_std teams[].team_points_std | decimalnullable | — | NBA only: standard deviation of the projected team points. |
↳team_points_p10 teams[].team_points_p10 | decimalnullable | — | NBA only: 10th percentile of the projected team points. |
↳team_points_p25 teams[].team_points_p25 | decimalnullable | — | NBA only: 25th percentile of the projected team points. |
↳team_points_p50 teams[].team_points_p50 | decimalnullable | — | NBA only: median of the projected team points. |
↳team_points_p75 teams[].team_points_p75 | decimalnullable | — | NBA only: 75th percentile of the projected team points. |
↳team_points_p90 teams[].team_points_p90 | decimalnullable | — | NBA only: 90th percentile of the projected team points. |
↳opponent_points_mean teams[].opponent_points_mean | decimalnullable | — | NBA only: projected opponent points (mean). |
↳offensive_rating teams[].offensive_rating | decimalnullable | — | NBA only: projected offensive rating. |
↳win_probability teams[].win_probability | decimalnullable | — | NBA only: chance the team wins, 0 to 1. |
↳overtime_probability teams[].overtime_probability | decimalnullable | — | NBA only: chance the game goes to overtime, 0 to 1. |
↳reb_mean teams[].reb_mean | decimalnullable | — | NBA only: projected team rebounds. |
↳ast_mean teams[].ast_mean | decimalnullable | — | NBA only: projected team assists. |
↳stl_mean teams[].stl_mean | decimalnullable | — | NBA only: projected team steals. |
↳blk_mean teams[].blk_mean | decimalnullable | — | NBA only: projected team blocks. |
↳fg3m_mean teams[].fg3m_mean | decimalnullable | — | NBA only: projected team three-pointers made. |
↳tov_mean teams[].tov_mean | decimalnullable | — | NBA only: projected team turnovers. |
↳vegas_total teams[].vegas_total | decimalnullable | — | NBA only: the game total of the betting line the projection used. |
↳vegas_spread teams[].vegas_spread | decimalnullable | — | NBA only: the spread of the betting line the projection used. |
↳implied_team_total teams[].implied_team_total | decimalnullable | — | NBA only: the team total the betting line implies. |
↳lines_captured_at teams[].lines_captured_at | timestamptznullable | — | NBA only: time the betting line was captured (UTC). |
↳inputs_as_of teams[].inputs_as_of | timestamptznullable | — | NBA only: time of the newest input of the team projection (UTC). |
projections | list | — | The contest-calibrated player projections as nested rows (the slate projections rows with contest ownership). Sent with the default format. |
↳player projections[].player | object | — | Player identity, team context, and slate metadata. |
↳id projections[].player.id | bigint | — | Unique slate player identifier. |
↳slate_player_id projections[].player.slate_player_id | bigint | — | Slate player ID (references dfs.slate_players.id). |
↳player_id projections[].player.player_id | bigintnullable | — | Canonical player ID in sport schema (references nfl.players.id). |
↳operator_player_id projections[].player.operator_player_id | stringnullable | — | Operator athlete identifier (from dfs.slate_players.external_id). |
↳operator_player_export_id projections[].player.operator_player_export_id | stringnullable | — | Operator export / draftable ID for lineup CSV uploads (from dfs.slate_players.export_id). |
↳name projections[].player.name | stringnullable | — | Player display name. |
↳position projections[].player.position | stringnullable | — | Contest roster position eligibility (e.g. QB, RB, WR, TE, DST, K). |
↳team projections[].player.team | stringnullable | — | Team abbreviation code (e.g. DET). |
↳opponent projections[].player.opponent | stringnullable | — | Opponent team abbreviation code (e.g. NO). |
↳salary projections[].player.salary | integernullable | — | Contest player salary in currency units (e.g. 8000). |
↳status projections[].player.status | stringnullable | — | Injury / roster status (e.g. Active, Questionable, Out). |
↳game_id projections[].player.game_id | bigintnullable | — | Canonical game ID. |
↳slate_date projections[].player.slate_date | stringnullable | — | Contest slate date (YYYY-MM-DD). |
↳player_game_note projections[].player.player_game_note | stringnullable | — | Contextual scouting and game note for player. |
↳projection projections[].projection | object | — | Fantasy points distribution, simulation bounds, and value ratio. |
↳fantasy_pts projections[].projection.fantasy_pts | decimalnullable | — | Mean projected fantasy points under contest scoring rules. |
↳floor projections[].projection.floor | decimalnullable | — | 10th percentile fantasy point outcome (floor). |
↳ceiling projections[].projection.ceiling | decimalnullable | — | 90th percentile fantasy point outcome (ceiling). |
↳std_dev projections[].projection.std_dev | decimalnullable | — | Standard deviation of projected fantasy point distribution. |
↳value projections[].projection.value | decimalnullable | — | Projected fantasy points per $1k of salary (pts / (salary / 1000)). |
↳quantiles projections[].projection.quantiles | objectnullable | — | Quantile simulation distribution outcomes across Monte Carlo runs. |
↳p05 projections[].projection.quantiles.p05 | decimalnullable | — | 5th percentile outcome. |
↳p10 projections[].projection.quantiles.p10 | decimalnullable | — | 10th percentile outcome. |
↳p15 projections[].projection.quantiles.p15 | decimalnullable | — | 15th percentile outcome. |
↳p25 projections[].projection.quantiles.p25 | decimalnullable | — | 25th percentile outcome. |
↳p50 projections[].projection.quantiles.p50 | decimalnullable | — | 50th percentile (median) outcome. |
↳p75 projections[].projection.quantiles.p75 | decimalnullable | — | 75th percentile outcome. |
↳p85 projections[].projection.quantiles.p85 | decimalnullable | — | 85th percentile outcome. |
↳p90 projections[].projection.quantiles.p90 | decimalnullable | — | 90th percentile outcome. |
↳p95 projections[].projection.quantiles.p95 | decimalnullable | — | 95th percentile outcome. |
↳seat_multiplier projections[].projection.seat_multiplier | decimalnullable | — | NBA only: the seat's score multiplier (DraftKings CPT 1.5, FanDuel MVP 1.5; 1 for every other seat). The points fields are already multiplied. |
↳chance_5x projections[].projection.chance_5x | decimalnullable | — | NBA only: chance the seat's points reach 5x salary / 1000, 0 to 1; null without a salary. |
↳chance_5x_bound projections[].projection.chance_5x_bound | stringnullable | — | NBA only: set when chance_5x is a bound: above_99pct or below_1pct. |
↳chance_6x projections[].projection.chance_6x | decimalnullable | — | NBA only: chance the seat's points reach 6x salary / 1000, 0 to 1; null without a salary. |
↳chance_6x_bound projections[].projection.chance_6x_bound | stringnullable | — | NBA only: set when chance_6x is a bound. |
↳opportunity projections[].opportunity | object | — | Volume and snap share opportunity metrics. |
↳snap_pct projections[].opportunity.snap_pct | decimalnullable | — | Projected offensive snap percentage (0-100%). |
↳projected_snaps projections[].opportunity.projected_snaps | decimalnullable | — | Projected offensive snaps. |
↳projected_team_snaps projections[].opportunity.projected_team_snaps | decimalnullable | — | Projected team total offensive snaps. |
↳carries projections[].opportunity.carries | decimalnullable | — | Projected rushing attempts. |
↳targets projections[].opportunity.targets | decimalnullable | — | Projected receiving targets. |
↳receptions projections[].opportunity.receptions | decimalnullable | — | Projected receptions. |
↳catch_rate projections[].opportunity.catch_rate | decimalnullable | — | Projected reception catch rate percentage. |
↳passing_attempts projections[].opportunity.passing_attempts | decimalnullable | — | Projected passing attempts (QB only). |
↳passing_completions projections[].opportunity.passing_completions | decimalnullable | — | Projected passing completions (QB only). |
↳minutes_mean projections[].opportunity.minutes_mean | decimalnullable | — | NBA only: projected minutes (mean). |
↳minutes_std projections[].opportunity.minutes_std | decimalnullable | — | NBA only: standard deviation of the projected minutes. |
↳minutes_p10 projections[].opportunity.minutes_p10 | decimalnullable | — | NBA only: 10th percentile of the projected minutes. |
↳minutes_p25 projections[].opportunity.minutes_p25 | decimalnullable | — | NBA only: 25th percentile of the projected minutes. |
↳minutes_p50 projections[].opportunity.minutes_p50 | decimalnullable | — | NBA only: median of the projected minutes. |
↳minutes_p75 projections[].opportunity.minutes_p75 | decimalnullable | — | NBA only: 75th percentile of the projected minutes. |
↳minutes_p90 projections[].opportunity.minutes_p90 | decimalnullable | — | NBA only: 90th percentile of the projected minutes. |
↳usage_rate projections[].opportunity.usage_rate | decimalnullable | — | NBA only: projected usage rate, 0 to 1. |
↳play_probability projections[].opportunity.play_probability | decimalnullable | — | NBA only: chance the player plays, 0 to 1. |
↳start_probability projections[].opportunity.start_probability | decimalnullable | — | NBA only: chance the player starts, 0 to 1. |
↳breakdown projections[].breakdown | object | — | Granular fantasy point component breakdown and counting stats. |
↳passing_yds projections[].breakdown.passing_yds | decimalnullable | — | Projected passing yards. |
↳passing_tds projections[].breakdown.passing_tds | decimalnullable | — | Projected passing touchdowns. |
↳passing_yds_fpts projections[].breakdown.passing_yds_fpts | decimalnullable | — | Fantasy points from passing yards. |
↳passing_td_fpts projections[].breakdown.passing_td_fpts | decimalnullable | — | Fantasy points from passing touchdowns. |
↳interception_fpts projections[].breakdown.interception_fpts | decimalnullable | — | Fantasy point deduction from interceptions. |
↳rushing_yds projections[].breakdown.rushing_yds | decimalnullable | — | Projected rushing yards. |
↳rushing_tds projections[].breakdown.rushing_tds | decimalnullable | — | Projected rushing touchdowns. |
↳rushing_yds_fpts projections[].breakdown.rushing_yds_fpts | decimalnullable | — | Fantasy points from rushing yards. |
↳rushing_td_fpts projections[].breakdown.rushing_td_fpts | decimalnullable | — | Fantasy points from rushing touchdowns. |
↳receiving_yds projections[].breakdown.receiving_yds | decimalnullable | — | Projected receiving yards. |
↳receiving_tds projections[].breakdown.receiving_tds | decimalnullable | — | Projected receiving touchdowns. |
↳receiving_yds_fpts projections[].breakdown.receiving_yds_fpts | decimalnullable | — | Fantasy points from receiving yards. |
↳reception_fpts projections[].breakdown.reception_fpts | decimalnullable | — | Fantasy points from receptions (PPR / half-PPR). |
↳receiving_td_fpts projections[].breakdown.receiving_td_fpts | decimalnullable | — | Fantasy points from receiving touchdowns. |
↳bonus_fpts projections[].breakdown.bonus_fpts | decimalnullable | — | Fantasy points from milestone performance bonuses (e.g. 100+ rush/rec, 300+ pass). |
↳defensive_td_fpts projections[].breakdown.defensive_td_fpts | decimalnullable | — | Fantasy points from defensive touchdowns (DST). |
↳sack_fpts projections[].breakdown.sack_fpts | decimalnullable | — | Fantasy points from sacks (DST). |
↳pts_allowed_fpts projections[].breakdown.pts_allowed_fpts | decimalnullable | — | Fantasy points from points allowed tiers (DST). |
↳pts projections[].breakdown.pts | decimalnullable | — | NBA only: projected points (the stat). |
↳reb projections[].breakdown.reb | decimalnullable | — | NBA only: projected rebounds. |
↳ast projections[].breakdown.ast | decimalnullable | — | NBA only: projected assists. |
↳stl projections[].breakdown.stl | decimalnullable | — | NBA only: projected steals. |
↳blk projections[].breakdown.blk | decimalnullable | — | NBA only: projected blocks. |
↳fg3m projections[].breakdown.fg3m | decimalnullable | — | NBA only: projected three-pointers made. |
↳tov projections[].breakdown.tov | decimalnullable | — | NBA only: projected turnovers. |
↳double_double_probability projections[].breakdown.double_double_probability | decimalnullable | — | NBA only: chance of a double-double, 0 to 1. |
↳triple_double_probability projections[].breakdown.triple_double_probability | decimalnullable | — | NBA only: chance of a triple-double, 0 to 1. |
↳ownership projections[].ownership | objectnullable | — | Monte Carlo tournament crowd ownership projections and volatility. NBA rows carry the ownership of the contest's segment on /dfs/contests/{contest_id}/projections, and null on a slate (NBA ownership is projected per contest segment, never per slate). |
↳projected_ownership projections[].ownership.projected_ownership | decimalnullable | — | Projected roster percentage in decimal form (0.0000 - 1.0000). |
↳ownership_pct projections[].ownership.ownership_pct | decimalnullable | — | Projected roster percentage formatted as 0-100% (e.g. 15.5 for 15.5%). |
↳volatility projections[].ownership.volatility | decimalnullable | — | Standard deviation of projected ownership percentage across simulations. |
↳low projections[].ownership.low | decimalnullable | — | 10th percentile crowd ownership percentage (lower bound). |
↳high projections[].ownership.high | decimalnullable | — | 90th percentile crowd ownership percentage (upper bound). |
↳chalk_fragility projections[].ownership.chalk_fragility | decimalnullable | — | Sensitivity of player ownership to salary cap allocations [0, 1]. |
↳cash_projected_ownership projections[].ownership.cash_projected_ownership | decimalnullable | — | Projected roster percentage in cash game double-ups / 50-50s (0.0000 - 1.0000). |
↳cash_ownership_pct projections[].ownership.cash_ownership_pct | decimalnullable | — | Projected roster percentage in cash games formatted as 0-100% (e.g. 12.3 for 12.3%). |
↳captain_ownership projections[].ownership.captain_ownership | decimalnullable | — | Projected Captain / MVP roster percentage in single-game / Showdown slates (0-100%). |
↳flex_ownership projections[].ownership.flex_ownership | decimalnullable | — | Projected FLEX utility roster percentage in single-game / Showdown slates (0-100%). |
↳total_ownership projections[].ownership.total_ownership | decimalnullable | — | Total combined roster percentage across Captain and FLEX slots (0-100%). |
↳captain_ratio projections[].ownership.captain_ratio | decimalnullable | — | Ratio of Captain ownership relative to total ownership (0.0 - 1.0). |
↳profile_id projections[].ownership.profile_id | bigintnullable | — | NBA only: the contest segment (dfs.contest_profiles.id) the ownership belongs to. |
↳model projections[].ownership.model | stringnullable | — | NBA only: the ownership model that wrote the row. |
↳inputs_as_of projections[].ownership.inputs_as_of | timestamptznullable | — | NBA only: time of the newest input of the ownership projection (UTC). |
↳dvp projections[].dvp | objectnullable | — | Defense vs Position (DvP) matchup ratings, scheme metrics, and qualitative context. |
↳archetype projections[].dvp.archetype | stringnullable | — | Player usage archetype (e.g. Pass-Catching Back, Deep Threat, Slot). |
↳rank projections[].dvp.rank | integernullable | — | Opponent defense positional ranking against archetype (1 = best matchup / 32 = worst). |
↳rating projections[].dvp.rating | decimalnullable | — | Matchup rating multiplier or score. |
↳matchup projections[].dvp.matchup | stringnullable | — | Matchup label (e.g. Favorable, Neutral, Tough). |
↳explanation projections[].dvp.explanation | stringnullable | — | Qualitative analytical explanation of defensive matchup. |
↳metrics projections[].dvp.metrics | objectnullable | — | Detailed defensive metrics breakdown. |
↳rank projections[].dvp.metrics.rank | integernullable | — | Opponent defense ranking vs archetype. |
↳archetype projections[].dvp.metrics.archetype | stringnullable | — | Target archetype. |
↳multiplier projections[].dvp.metrics.multiplier | decimalnullable | — | DvP projection multiplier applied. |
↳explanation projections[].dvp.metrics.explanation | stringnullable | — | Detailed qualitative explanation. |
↳matchup_grade projections[].dvp.metrics.matchup_grade | stringnullable | — | Letter grade or qualitative category. |
↳fpts_allowed_pg projections[].dvp.metrics.fpts_allowed_pg | decimalnullable | — | Fantasy points allowed per game to archetype. |
↳league_avg_fpts projections[].dvp.metrics.league_avg_fpts | decimalnullable | — | League average fantasy points per game to archetype. |
↳def_adot_allowed projections[].dvp.metrics.def_adot_allowed | decimalnullable | — | Defensive average depth of target allowed. |
↳def_pressure_rate projections[].dvp.metrics.def_pressure_rate | decimalnullable | — | Defensive pressure rate. |
↳opponent_team_code projections[].dvp.metrics.opponent_team_code | stringnullable | — | Opponent team abbreviation code. |
↳scheme_metrics projections[].dvp.scheme_metrics | objectnullable | — | Scheme-specific indicators (man/zone frequency, blitz rate, etc.). |
↳opponent projections[].dvp.scheme_metrics.opponent | stringnullable | — | Opponent team abbreviation code. |
↳composite projections[].dvp.scheme_metrics.composite | decimalnullable | — | Composite scheme matchup score. |
↳shadow_cb projections[].dvp.scheme_metrics.shadow_cb | stringnullable | — | Shadow cornerback assignment if active. |
↳db_injuries projections[].dvp.scheme_metrics.db_injuries | list<object>nullable | — | Opponent defensive back injuries impacting scheme. |
↳funnel_tilt projections[].dvp.scheme_metrics.funnel_tilt | decimalnullable | — | Run/pass funnel defensive tilt factor. |
↳scheme_mult projections[].dvp.scheme_metrics.scheme_mult | decimalnullable | — | Scheme matchup multiplier. |
↳injury_boost projections[].dvp.scheme_metrics.injury_boost | decimalnullable | — | Injury adjustment boost multiplier. |
↳pressure_mult projections[].dvp.scheme_metrics.pressure_mult | decimalnullable | — | Pressure rate multiplier. |
↳rb_target_rate_allowed projections[].dvp.scheme_metrics.rb_target_rate_allowed | decimalnullable | — | Defensive target rate allowed to running backs. |
↳te_target_rate_allowed projections[].dvp.scheme_metrics.te_target_rate_allowed | decimalnullable | — | Defensive target rate allowed to tight ends. |
↳two_high_shell_rate projections[].dvp.scheme_metrics.two_high_shell_rate | decimalnullable | — | Defensive two-high safety shell rate. |
↳vegas_odds projections[].vegas_odds | objectnullable | — | Active player betting lines and props used as model calibration anchors. |
↳anytime_td projections[].vegas_odds.anytime_td | integernullable | — | Anytime touchdown odds (American format). |
↳first_td projections[].vegas_odds.first_td | integernullable | — | First touchdown odds. |
↳last_td projections[].vegas_odds.last_td | integernullable | — | Last touchdown odds. |
↳rushing_yds projections[].vegas_odds.rushing_yds | decimalnullable | — | Rushing yards consensus betting line. |
↳receiving_yds projections[].vegas_odds.receiving_yds | decimalnullable | — | Receiving yards consensus betting line. |
↳receptions projections[].vegas_odds.receptions | decimalnullable | — | Receptions consensus betting line. |
↳rushing_attempts projections[].vegas_odds.rushing_attempts | decimalnullable | — | Rushing attempts betting line. |
↳passing_yards projections[].vegas_odds.passing_yards | decimalnullable | — | Passing yards consensus betting line. |
↳passing_tds projections[].vegas_odds.passing_tds | decimalnullable | — | Passing touchdowns consensus betting line. |
↳passing_yds projections[].vegas_odds.passing_yds | decimalnullable | — | Passing yards consensus betting line. |
↳passing_attempts projections[].vegas_odds.passing_attempts | decimalnullable | — | Passing attempts consensus betting line. |
↳completions projections[].vegas_odds.completions | decimalnullable | — | Pass completions consensus betting line. |
↳interceptions projections[].vegas_odds.interceptions | decimalnullable | — | Passing interceptions consensus betting line. |
↳provenance projections[].provenance | objectnullable | — | Projection update history, audit timestamps, and explanation of adjustments. |
↳last_update_time projections[].provenance.last_update_time | stringnullable | — | ISO-8601 UTC timestamp of most recent projection adjustment. |
↳update_explanation projections[].provenance.update_explanation | stringnullable | — | Human-readable explanation of why projection was updated (e.g. injury news, weather). |
↳update_reason projections[].provenance.update_reason | objectnullable | — | Structured metadata describing event triggering update. |
↳primary_code projections[].provenance.update_reason.primary_code | stringnullable | — | Primary change classification code (e.g. DEFENSE_DEGRADED). |
↳secondary_codes projections[].provenance.update_reason.secondary_codes | list<S>nullable | — | Secondary change classification codes. |
↳factors projections[].provenance.update_reason.factors | objectnullable | — | Detailed factor adjustments triggering projection update. |
↳update_history projections[].provenance.update_history | listnullable | — | Chronological audit trail of prior projection snapshots. |
↳id projections[].provenance.update_history[].id | string | — | Snapshot change identifier. |
↳timestamp projections[].provenance.update_history[].timestamp | string | — | UTC timestamp of snapshot. |
↳explanation projections[].provenance.update_history[].explanation | stringnullable | — | Change explanation text. |
↳reason projections[].provenance.update_history[].reason | objectnullable | — | Event trigger that provoked update. |
↳current_value projections[].provenance.update_history[].current_value | objectnullable | — | New projection values after adjustment. |
↳previous_value projections[].provenance.update_history[].previous_value | objectnullable | — | Prior projection values before adjustment. |
↳play_profile projections[].play_profile | objectnullable | — | Complete native play profile with upside and safety metrics, empirical boom/bust probabilities, and archetype. |
↳upside projections[].play_profile.upside | objectnullable | — | Upside and ceiling distribution metrics. |
↳tier projections[].play_profile.upside.tier | stringnullable | — | Salary-adjusted upside tier (ELITE, BOOM, STEADY, LOW_CAP). |
↳ceiling_multiplier projections[].play_profile.upside.ceiling_multiplier | decimalnullable | — | Salary-adjusted ceiling multiplier (ceiling / (salary / 1000)). |
↳boom_probability projections[].play_profile.upside.boom_probability | decimalnullable | — | Probability of reaching 4.0x boom value. |
↳leverage_factor projections[].play_profile.upside.leverage_factor | decimalnullable | — | Tournament leverage factor. |
↳safety projections[].play_profile.safety | objectnullable | — | Safety and floor stability metrics. |
↳tier projections[].play_profile.safety.tier | stringnullable | — | Cash safety tier (CORE_CASH, CASH_VIABLE, MODERATE, HIGH_RISK). |
↳floor_multiplier projections[].play_profile.safety.floor_multiplier | decimalnullable | — | Salary-adjusted floor multiplier. |
↳bust_probability projections[].play_profile.safety.bust_probability | decimalnullable | — | Probability of falling below 1.5x salary value. |
↳chalk_fragility projections[].play_profile.safety.chalk_fragility | decimalnullable | — | Chalk fragility rating. |
↳play_archetype projections[].play_profile.play_archetype | stringnullable | — | Archetype classification. |
↳is_leverage projections[].play_profile.is_leverage | booleannullable | — | Whether player is a top leverage candidate. |
↳is_fragile_chalk projections[].play_profile.is_fragile_chalk | booleannullable | — | Whether player represents fragile chalk. |
↳analysis projections[].play_profile.analysis | objectnullable | — | Qualitative analytical breakdowns and recommendations. |
↳headline projections[].play_profile.analysis.headline | stringnullable | — | Synthesized headline summarizing player outlook. |
↳cash_analysis projections[].play_profile.analysis.cash_analysis | objectnullable | — | Detailed cash game outlook. |
↳status projections[].play_profile.analysis.cash_analysis.status | stringnullable | — | Cash status (CORE_CASH, CASH_VIABLE, NEUTRAL, UNVIABLE). |
↳verdict projections[].play_profile.analysis.cash_analysis.verdict | stringnullable | — | Cash game verdict narrative. |
↳key_positives projections[].play_profile.analysis.cash_analysis.key_positives | list<S>nullable | — | Positive factors supporting cash game viability. |
↳key_risks projections[].play_profile.analysis.cash_analysis.key_risks | list<S>nullable | — | Downside risks impacting cash game safety. |
↳cohort_comparison projections[].play_profile.analysis.cash_analysis.cohort_comparison | stringnullable | — | Performance comparison relative to salary cohort. |
↳gpp_analysis projections[].play_profile.analysis.gpp_analysis | objectnullable | — | Detailed GPP tournament outlook. |
↳status projections[].play_profile.analysis.gpp_analysis.status | stringnullable | — | GPP status. |
↳verdict projections[].play_profile.analysis.gpp_analysis.verdict | stringnullable | — | Tournament verdict narrative. |
↳ceiling_thesis projections[].play_profile.analysis.gpp_analysis.ceiling_thesis | stringnullable | — | Upside potential thesis. |
↳leverage_thesis projections[].play_profile.analysis.gpp_analysis.leverage_thesis | stringnullable | — | Ownership leverage thesis. |
↳pivot_recommendation projections[].play_profile.analysis.gpp_analysis.pivot_recommendation | stringnullable | — | Suggested tournament pivots. |
↳comparative_context projections[].play_profile.analysis.comparative_context | objectnullable | — | Relative rankings and cohort differentials. |
↳positional_floor_rank projections[].play_profile.analysis.comparative_context.positional_floor_rank | stringnullable | — | Positional floor ranking text. |
↳positional_ceiling_rank projections[].play_profile.analysis.comparative_context.positional_ceiling_rank | stringnullable | — | Positional ceiling ranking text. |
↳positional_ownership_rank projections[].play_profile.analysis.comparative_context.positional_ownership_rank | stringnullable | — | Positional ownership ranking text. |
↳floor_vs_position_median projections[].play_profile.analysis.comparative_context.floor_vs_position_median | stringnullable | — | Floor points differential relative to positional median. |
↳value_vs_salary_cohort projections[].play_profile.analysis.comparative_context.value_vs_salary_cohort | stringnullable | — | Value differential relative to salary tier. |
↳tactical_tag projections[].play_profile.tactical_tag | stringnullable | — | Tactical play tag (e.g. GOOD_CHALK, FRAGILE_CHALK, LEVERAGE). |
↳fade_leverage_score projections[].play_profile.fade_leverage_score | decimalnullable | — | Quantitative score for fading the player in tournaments. |
↳knapsack_shadow_price projections[].play_profile.knapsack_shadow_price | decimalnullable | — | Knapsack constraint shadow price indicating marginal point value per dollar. |
↳relative_fragility projections[].play_profile.relative_fragility | decimalnullable | — | Normalized fragility relative to slate position peers. |
↳upside_tier projections[].upside_tier | stringnullable | — | Salary-adjusted upside tier (ELITE, BOOM, STEADY, LOW_CAP). |
↳ceiling_multiplier projections[].ceiling_multiplier | decimalnullable | — | Salary-adjusted ceiling multiplier (ceiling / (salary / 1000)). |
↳boom_probability projections[].boom_probability | decimalnullable | — | Empirical probability of scoring >= 4.0x salary in 10,000 Monte Carlo simulations. |
↳cash_safety_tier projections[].cash_safety_tier | stringnullable | — | Salary-adjusted cash safety tier (CORE_CASH, CASH_VIABLE, MODERATE, HIGH_RISK). |
↳floor_multiplier projections[].floor_multiplier | decimalnullable | — | Salary-adjusted floor multiplier (floor / (salary / 1000)). |
↳bust_probability projections[].bust_probability | decimalnullable | — | Empirical probability of scoring < 1.5x salary in 10,000 Monte Carlo simulations. |
↳play_archetype projections[].play_archetype | stringnullable | — | Summary archetype classification (GPP_BOOM, CORE_CASH, LEVERAGE, FRAGILE_CHALK, BALANCED, LOW_CAP). |
↳leverage_factor projections[].leverage_factor | decimalnullable | — | Tournament leverage factor (ceiling_multiplier / max(0.02, ownership)). |
↳analysis_headline projections[].analysis_headline | stringnullable | — | Synthesized qualitative headline capturing player role, floor equity, or ceiling upside. |
↳cash_verdict projections[].cash_verdict | stringnullable | — | Qualitative cash game analysis verdict with touch/floor security and bust risk reasoning. |
↳gpp_verdict projections[].gpp_verdict | stringnullable | — | Qualitative GPP tournament analysis verdict with ceiling potential and ownership leverage reasoning. |
↳tactical_tag projections[].tactical_tag | stringnullable | — | Tactical play tag (e.g. GOOD_CHALK, FRAGILE_CHALK, LEVERAGE). |
↳fade_leverage_score projections[].fade_leverage_score | decimalnullable | — | Quantitative score for fading the player in tournaments. |
↳knapsack_shadow_price projections[].knapsack_shadow_price | decimalnullable | — | Knapsack constraint shadow price indicating marginal point value per dollar. |
↳relative_fragility projections[].relative_fragility | decimalnullable | — | Normalized fragility relative to slate position peers. |
_metadata | objectnullable | — | Which projection source served this contest, and which stat-api engine made its rows: the `_metadata` of the contest's slate, and for a contest served by STAT_API_LATEST where its contest ownership comes from. Sent last, with the default format and with format=flat. This endpoint takes no `source`: it serves the default, STAT_API_LATEST, and STAT_API on a slate that STAT_API_LATEST has no projections for. |
↳requested_source _metadata.requested_source | string | — | The source the request asked for, the `source` parameter, else the default (STAT_API_LATEST). |
↳served_source _metadata.served_source | string | — | The source whose rows this response holds. It differs from `requested_source` when STAT_API_LATEST serves a request for STAT_API, or when STAT_API serves a slate that STAT_API_LATEST has no projections for (`fallback`). A slate served per game by both sources gives "STAT_API,STAT_API_LATEST" (see `fallback_games`). |
↳engine_version _metadata.engine_version | stringnullable | — | The stat-api engine version of the served rows, for example "2.2". A row without a version is "2.1". Rows of several versions give a comma-separated list. Null when the response holds no rows. |
↳deprecated _metadata.deprecated | boolean | — | True when the requested source is deprecated. STAT_API is deprecated, and STAT_API_LATEST serves it. |
↳replacement _metadata.replacement | stringnullable | — | The source that replaces the deprecated requested source (STAT_API_LATEST). Null when `deprecated` is false. |
↳backfilled _metadata.backfilled | boolean | — | True when any served row is a backfill: a projection written after the slate locked, for a slate that locked before its engine went live. |
↳fallback _metadata.fallback | boolean | — | True when the request was for STAT_API or named no source, and STAT_API served this slate, or the games of it that STAT_API_LATEST has no projections for (`fallback_games`). The source is chosen per game: STAT_API_LATEST serves every game of the slate it has projections for; STAT_API (engine 2.1) serves only a game without them that kicked off before the slate's first STAT_API_LATEST projection was written (the Thursday game of a Thursday-to-Monday slate); every other game without them gets no projection (`pending_games`). |
↳note _metadata.note | stringnullable | — | The same facts in one sentence. Null when the requested source is not deprecated, did not fall back and has no pending game. |
↳fallback_games _metadata.fallback_games | list<L>nullable | — | The NFL games (`game_id`) of the slate whose rows come from STAT_API because STAT_API_LATEST has no projections for them, while STAT_API_LATEST served the other games; `served_source` then names both sources. Only games that kicked off before the slate's first STAT_API_LATEST projection was written. Sent only then (absent otherwise). |
↳pending_games _metadata.pending_games | list<L>nullable | — | The NFL games (`game_id`) of a slate that STAT_API_LATEST serves in part, that have no STAT_API_LATEST projections and did not kick off before the slate's first one was written: their players have no points projection in this response (no 2.1 value stands in; a stored contest ownership may still show). Sent only when there is one (absent otherwise). |
↳contest_ownership _metadata.contest_ownership | stringnullable | — | Where the contest ownership comes from, sent only when STAT_API_LATEST serves the contest (absent otherwise). `persisted`: the contest ownership rows the engine wrote for this contest. `computed`: calibrated from the slate ownership for this request, and not saved. |
GET/api/v1/dfs/contests/{contest_id}/standingsContest standings with each entrant's entry count
Parameters
contest_idpathbigintrequiredInternal database contest ID or operator external_id.
limitqueryintegeroptionaldefault 100Rows to return. At most 10 without DFS access; 1000 with it.
formatquerystringoptionaldefault jsonOutput format (json or csv). CSV needs DFS access.
from_rowqueryintegeroptionaldefault 1The first row to return (1-based `row`), to page through the whole contest. Without DFS access the rows stop at row 5 (row 100 on a marquee contest), so a page past it is empty.
userquerystringoptionalStart the page at this username's best row (overrides from_row). 404 when the contest has no such user.
rankqueryintegeroptionalStart the page at the first row with this rank or a worse one (overrides from_row). Tied entries share a rank.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests/37021368/standings'Responses
200Contest standings with each entrant's entry countapplication/jsonshow example ▸
400Invalid contest ID; limit or format
401No key, and not a free flagship (key_required): a free account opens every contest. The body names the contest (contest: contest_id, name, operator, date, total_entries, entry_fee_cents, prize_pool_cents; the public list's fields) and holds no standings, users or lineups
402CSV requested without DFS access
404Contest not found, or the loader does not collect lineups for this contest (lineups_not_collected). A contest without a lineup file answers 200 with has_lineups false, except for a caller with a paid plan on a DraftKings contest that has started (202, 404, 410 or 503, see the description)
409The lineup file found belongs to a different operator contest
410DraftKings no longer serves the lineup file of this contest (lineups_file_gone)
503The loader gave up on the lineup file and support is informed (lineups_not_loaded, Retry-After 3600), or the request to load it could not be queued (lineups_request_failed, Retry-After 60)
Response Schema(7 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
contest | object | — | The contest. |
↳contest_id contest.contest_id | bigint | — | Internal contest ID. |
↳external_id contest.external_id | bigint | — | Operator contest ID. |
↳name contest.name | string | — | Contest name. |
↳operator contest.operator | stringnullable | — | Operator name (DraftKings or FanDuel). |
↳sport contest.sport | string | — | Sport code. |
↳game_type contest.game_type | stringnullable | — | Game type (classic or showdown). Null when the contest has no lineup file. |
↳date contest.date | stringnullable | — | Contest date (YYYY-MM-DD). |
↳slate_id contest.slate_id | bigintnullable | — | Internal slate ID. |
↳slate_name contest.slate_name | stringnullable | — | Slate name. |
↳entry_fee_cents contest.entry_fee_cents | bigint | — | Entry fee in cents. |
↳prize_pool_cents contest.prize_pool_cents | bigint | — | Prize pool in cents. |
↳total_entries contest.total_entries | bigint | — | Entries in the contest. |
↳stored_lineups contest.stored_lineups | bigint | — | Lineups stored in the lineup file (below total_entries in a sampled contest). |
↳paid_places contest.paid_places | bigintnullable | — | Paid places. Null when the contest has no lineup file. |
↳is_sampled contest.is_sampled | boolean | — | True when the lineup file holds a sample of the field. |
↳slots contest.slots | list<S> | — | Roster slots in lineup order. |
↳has_lineups contest.has_lineups | boolean | — | False when the contest has no lineup file (the standings are empty). |
↳live contest.live | objectnullable | — | Present only while the lineups come from a live file: a DraftKings contest whose games still run, read at each game start, every minute for the next 30 minutes, then every 15 minutes until its final file is loaded at Completed. The seats of players whose games have not started are hidden, and no player points, payouts or ownership are served. Absent for a final file. Payouts, the field block and stacks are null. |
↳read_at contest.live.read_at | string | — | When the live file was read from DraftKings (UTC, RFC 3339). Ranks and points are as of this time. |
↳kickoff_at contest.live.kickoff_at | string | — | The latest game start of the contest's slate that the live file covers (UTC, RFC 3339). |
field | objectnullable | — | What the field did, the same for every caller (the chalk is common knowledge). Null when the contest has no lineup file, or no stored lineup measured the field's ownership, and while the contest is live (contest.live). |
↳roster_slots field.roster_slots | integer | — | Roster slots per lineup. |
↳pool_size field.pool_size | integer | — | Distinct players in the pool (a showdown player counts once). |
↳players_owned field.players_owned | integer | — | Distinct pool players with a field share above 0 in any slot: the players the field actually used. |
↳avg_points_per_slot field.avg_points_per_slot | decimal | — | C: the field's average points per roster slot = sum over the pool of (field_pct / 100 x fantasy_points), divided by roster_slots. A showdown player adds his flex share x base points and his captain share x captain points. |
↳field_avg_lineup field.field_avg_lineup | decimal | — | C x roster_slots: the field's average lineup points implied by ownership. |
↳chalk field.chalk | list | — | The 3 most-owned pool players, field_pct descending (a tie goes to the lower pool_id). |
↳pool_id field.chalk[].pool_id | bigint | — | The player's ID in this contest's player pool. |
↳name field.chalk[].name | string | — | Player name. |
↳position field.chalk[].position | stringnullable | — | Position. Null when the pool row has no real position. |
↳team field.chalk[].team | string | — | Team abbreviation. |
↳salary field.chalk[].salary | bigintnullable | — | Salary. Null when the operator price is unknown. |
↳fantasy_points field.chalk[].fantasy_points | decimalnullable | — | Fantasy points. Null when nothing measured them. |
↳field_pct field.chalk[].field_pct | decimal | — | Share of the field's lineups with this player in percent. |
standings | list | — | Entries in finishing order. |
↳row standings[].row | integer | — | 1-based position in the standings (unique). |
↳rank standings[].rank | integer | — | Operator finishing rank (ties share a rank). |
↳username standings[].username | string | — | Entrant username. |
↳points standings[].points | decimal | — | Lineup fantasy points. |
↳payout_cents standings[].payout_cents | bigintnullable | — | Payout in cents. Null while the contest is live (contest.live). |
↳user_entries standings[].user_entries | bigintnullable | — | The user's entries in the contest. Null for user_unknown. |
↳user_best_rank standings[].user_best_rank | integernullable | — | The user's best rank in the contest. Null for user_unknown. |
↳open standings[].open | boolean | — | True when this user opens in the user lineups route for this caller. |
↳stack standings[].stack | stringnullable | — | The combo of this row's own lineup: QB, then the QB's teammates as WR, TE, RB (a count in front when more than 1), then BB for the bring-backs, joined by /, as QB/WR/RB/BB or QB/2WR or QB/BB. Null when the lineup has no stack and no bring-back, when a seat's position, team or game is unknown, when the row is not open for this caller, in hide mode, and on every contest that is not a classic NFL contest. |
↳stack_team standings[].stack_team | stringnullable | — | The team (as in the pool, such as DAL) of the QB of this row's own lineup, the team the stack belongs to. Set exactly when stack is set. Null otherwise. |
↳bring_back_team standings[].bring_back_team | stringnullable | — | The team (such as PHI) of the bring-back seats of this row's own lineup: the other team of the QB's game. Set only when stack has a BB part. Null otherwise. |
from_row | integer | — | The row number (1-based) of the first standings row returned. |
returned | integer | — | Rows in this response. |
access | object | — | What this caller may read. |
↳plan access.plan | string | — | "pro" with DFS access; "flagship" on a marquee contest for anyone else (GET /api/v1/dfs/marquee): the first 100 standings rows and every value of the users with an entry in them, no CSV; else "free" (the first 5 standings rows and hide mode). |
↳full access.full | boolean | — | True when every row and value is sent: DFS access only (a marquee contest stops at row 100). |
↳open_rows access.open_rows | integernullable | — | Standings rows whose users open: 5 on the Free plan, 100 on a marquee contest. Null with DFS access. |
↳lineups_per_user access.lineups_per_user | integernullable | — | Always null: no plan caps the lineups of an open user. |
↳exposure_per_user access.exposure_per_user | integernullable | — | Always null: no plan caps the exposure rows of an open user. |
↳locked access.locked | boolean | — | True when the plan withholds this response's exposure, lineup and seat rows. |
↳lineups_total access.lineups_total | integernullable | — | The user's lineups in the contest. Null on the standings route. |
↳exposure_total access.exposure_total | integernullable | — | The user's exposure rows. Null on the standings route and when locked. |
↳hidden_rows access.hidden_rows | integer | — | Exposure rows sent in hide mode (0 with DFS access and on the standings route). |
_metadata | objectnullable | — | Sent only on a capped answer (fewer rows than exist for this caller): the plan that opens the rest. A full answer (DFS access, or a marquee contest of at most 100 entries) has no such key. A marquee contest of more than 100 entries carries it. |
↳required_tier _metadata.required_tier | string | — | pro. |
↳message _metadata.message | string | — | What the plan opens. |
↳total_actual_records _metadata.total_actual_records | bigint | — | The contest's standings rows. |
GET/api/v1/dfs/contests/{contest_id}/users/{username}/lineupsOne entrant's lineups in a contest with exposure and edge against the field
Parameters
contest_idpathbigintrequiredInternal database contest ID or operator external_id.
usernamepathstringrequiredEntrant username exactly as in the standings.
formatquerystringoptionaldefault jsonOutput format (json or csv). CSV needs DFS access.
tablequerystringoptionaldefault lineupsThe table a CSV holds (lineups or exposure).
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/dfs/contests/{contest_id}/users/{username}/lineups?format=json&table=lineups'Responses
200One entrant's lineups in a contest with exposure and edge against the fieldapplication/jsonshow example ▸
400Invalid contest ID; format or table
401No key, and not a free flagship (key_required): a free account opens every contest. The body names the contest (contest: contest_id, name, operator, date, total_entries, entry_fee_cents, prize_pool_cents; the public list's fields) and holds no standings, users or lineups
402CSV requested without DFS access
404Contest not found; no lineup data; the user has no entry; or the loader does not collect lineups for this contest (lineups_not_collected: a caller with a paid plan on a DraftKings contest that has started, see the description)
409The lineup file found belongs to a different operator contest
410DraftKings no longer serves the lineup file of this contest (lineups_file_gone)
503The loader gave up on the lineup file and support is informed (lineups_not_loaded, Retry-After 3600), or the request to load it could not be queued (lineups_request_failed, Retry-After 60)
Response Schema(9 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
contest | object | — | The contest. |
↳contest_id contest.contest_id | bigint | — | Internal contest ID. |
↳external_id contest.external_id | bigint | — | Operator contest ID. |
↳name contest.name | string | — | Contest name. |
↳operator contest.operator | stringnullable | — | Operator name (DraftKings or FanDuel). |
↳sport contest.sport | string | — | Sport code. |
↳game_type contest.game_type | stringnullable | — | Game type (classic or showdown). Null when the contest has no lineup file. |
↳date contest.date | stringnullable | — | Contest date (YYYY-MM-DD). |
↳slate_id contest.slate_id | bigintnullable | — | Internal slate ID. |
↳slate_name contest.slate_name | stringnullable | — | Slate name. |
↳entry_fee_cents contest.entry_fee_cents | bigint | — | Entry fee in cents. |
↳prize_pool_cents contest.prize_pool_cents | bigint | — | Prize pool in cents. |
↳total_entries contest.total_entries | bigint | — | Entries in the contest. |
↳stored_lineups contest.stored_lineups | bigint | — | Lineups stored in the lineup file (below total_entries in a sampled contest). |
↳paid_places contest.paid_places | bigintnullable | — | Paid places. Null when the contest has no lineup file. |
↳is_sampled contest.is_sampled | boolean | — | True when the lineup file holds a sample of the field. |
↳slots contest.slots | list<S> | — | Roster slots in lineup order. |
↳has_lineups contest.has_lineups | boolean | — | False when the contest has no lineup file (the standings are empty). |
↳live contest.live | objectnullable | — | Present only while the lineups come from a live file: a DraftKings contest whose games still run, read at each game start, every minute for the next 30 minutes, then every 15 minutes until its final file is loaded at Completed. The seats of players whose games have not started are hidden, and no player points, payouts or ownership are served. Absent for a final file. Payouts, the field block and stacks are null. |
↳read_at contest.live.read_at | string | — | When the live file was read from DraftKings (UTC, RFC 3339). Ranks and points are as of this time. |
↳kickoff_at contest.live.kickoff_at | string | — | The latest game start of the contest's slate that the live file covers (UTC, RFC 3339). |
field | objectnullable | — | What the field did, the same for every caller (the chalk is common knowledge). Null when the contest has no lineup file, or no stored lineup measured the field's ownership, and while the contest is live (contest.live). |
↳roster_slots field.roster_slots | integer | — | Roster slots per lineup. |
↳pool_size field.pool_size | integer | — | Distinct players in the pool (a showdown player counts once). |
↳players_owned field.players_owned | integer | — | Distinct pool players with a field share above 0 in any slot: the players the field actually used. |
↳avg_points_per_slot field.avg_points_per_slot | decimal | — | C: the field's average points per roster slot = sum over the pool of (field_pct / 100 x fantasy_points), divided by roster_slots. A showdown player adds his flex share x base points and his captain share x captain points. |
↳field_avg_lineup field.field_avg_lineup | decimal | — | C x roster_slots: the field's average lineup points implied by ownership. |
↳chalk field.chalk | list | — | The 3 most-owned pool players, field_pct descending (a tie goes to the lower pool_id). |
↳pool_id field.chalk[].pool_id | bigint | — | The player's ID in this contest's player pool. |
↳name field.chalk[].name | string | — | Player name. |
↳position field.chalk[].position | stringnullable | — | Position. Null when the pool row has no real position. |
↳team field.chalk[].team | string | — | Team abbreviation. |
↳salary field.chalk[].salary | bigintnullable | — | Salary. Null when the operator price is unknown. |
↳fantasy_points field.chalk[].fantasy_points | decimalnullable | — | Fantasy points. Null when nothing measured them. |
↳field_pct field.chalk[].field_pct | decimal | — | Share of the field's lineups with this player in percent. |
user | object | — | The entrant. |
↳username user.username | string | — | Entrant username. |
↳entries user.entries | bigint | — | The user's entries in the contest. |
↳best_rank user.best_rank | integer | — | The user's best rank. |
↳best_row user.best_row | integer | — | Standings row of the user's best entry. |
↳total_payout_cents user.total_payout_cents | bigintnullable | — | Payout of all the user's entries in cents. Null when locked, and while the contest is live (contest.live). |
↳cashed user.cashed | bigintnullable | — | The user's entries that won money. Null when locked, and while the contest is live (contest.live). |
↳in_top_100 user.in_top_100 | bigintnullable | — | The user's entries in the first 100 standings rows. Null when locked. |
↳players_used user.players_used | integernullable | — | Distinct players across all the user's lineups. Null when locked. |
↳avg_points user.avg_points | decimalnullable | — | Mean lineup points over all the user's lineups. Null when locked. |
↳edge_total user.edge_total | decimalnullable | — | Sum of edge over every pool player (a player the user never played counts at exposure 0, so a fade counts): about avg_points - field.field_avg_lineup. Null when locked or when the field block is null. |
↳chalk_exposure user.chalk_exposure | list | — | The user's exposure to each field.chalk player, in the same order, including 0% rows (a full fade). Empty when locked or when the field block is null. |
↳pool_id user.chalk_exposure[].pool_id | bigint | — | The chalk player's ID in this contest's player pool. |
↳lineups user.chalk_exposure[].lineups | bigint | — | The user's lineups with this player. |
↳exposure_pct user.chalk_exposure[].exposure_pct | decimal | — | Share of the user's lineups with this player in percent. |
↳field_pct user.chalk_exposure[].field_pct | decimal | — | Share of the field's lineups with this player in percent. |
↳leverage user.chalk_exposure[].leverage | decimal | — | exposure_pct minus field_pct in percentage points (a full fade is -field_pct). |
↳edge user.chalk_exposure[].edge | decimalnullable | — | Points per lineup gained (+) or lost (-) against the field. Null when the player's points are unknown. |
exposure | list | — | One row per player the user played: chalk first (field order), then most-used. Empty when locked. Without DFS access every non-chalk row is hidden (a label, no ID or value). |
↳label exposure[].label | stringnullable | — | P1..Pn on a hidden row, numbered in this response's exposure order (it means nothing outside the response). Null on a clear row. |
↳chalk exposure[].chalk | boolean | — | True on a chalk player's row shown clear without DFS access. False with DFS access. |
↳player_id exposure[].player_id | bigintnullable | — | stat-api player ID. Null on a hidden row. |
↳pool_id exposure[].pool_id | bigintnullable | — | The player's ID in this contest's player pool (the IDs in seats). Null on a hidden row. |
↳name exposure[].name | stringnullable | — | Player name. Null on a hidden row. |
↳position exposure[].position | stringnullable | — | Position (clear on a hidden row too). Null when the pool row has no real position. |
↳team exposure[].team | stringnullable | — | Team abbreviation. Null on a hidden row. |
↳salary exposure[].salary | bigintnullable | — | Salary. Null when the operator price is unknown, and on a hidden row. |
↳fantasy_points exposure[].fantasy_points | decimalnullable | — | Fantasy points. Null when nothing measured them, and on a hidden row. |
↳lineups exposure[].lineups | bigint | — | The user's lineups with this player in any slot. |
↳captain_lineups exposure[].captain_lineups | bigintnullable | — | The user's lineups with this player in the captain or MVP slot. Null without such a slot. |
↳exposure_pct exposure[].exposure_pct | decimal | — | Share of the user's lineups with this player in percent. |
↳field_pct exposure[].field_pct | decimalnullable | — | Share of the field's lineups with this player in percent. Null when nothing measured it, and on a hidden row. |
↳leverage exposure[].leverage | decimalnullable | — | exposure_pct minus field_pct in percentage points. Null when field_pct is null. |
↳edge exposure[].edge | decimalnullable | — | (exposure_pct - field_pct) / 100 x (fantasy_points - C): points per lineup gained (+) or lost (-) against the field. Null when field_pct or fantasy_points is null, and on a hidden row. |
↳edge_band exposure[].edge_band | stringnullable | — | A hidden row's edge as a band, sent only when at least 5 non-chalk pool players at the same position would show the same band at this row's exposure. Else null (and listed in hidden). Null on a clear row. |
↳hidden exposure[].hidden | list<S> | — | The fields this row withholds. Empty on a clear row. |
lineups | list | — | Every lineup of the user in finishing order. Empty when locked. |
↳row lineups[].row | integer | — | Standings row of this lineup. |
↳rank lineups[].rank | integer | — | Finishing rank. |
↳points lineups[].points | decimal | — | Lineup fantasy points. |
↳payout_cents lineups[].payout_cents | bigintnullable | — | Payout in cents. Null while the contest is live (contest.live). |
↳salary_used lineups[].salary_used | bigintnullable | — | Sum of the seats' salaries. Null without DFS access, and when a seat's price is unknown. |
↳total_ownership lineups[].total_ownership | decimalnullable | — | Sum of the seats' field_pct in percent (a captain seat counts its captain share), from the unrounded shares, rounded to 1 decimal. Null in hide mode (Free, off the flagships) and when nothing measured ownership. |
↳stack lineups[].stack | stringnullable | — | The combo of this lineup: QB, then the QB's teammates as WR, TE, RB (a count in front when more than 1), then BB for the bring-backs, joined by /, as QB/WR/RB/BB. The same value as `stack` on the standings row with this `row`, null in the same cases: no stack and no bring-back, a seat whose position, team or game is unknown, hide mode, and every contest that is not a classic NFL contest. The lineups CSV ends with it. |
↳stack_team lineups[].stack_team | stringnullable | — | The team (such as DAL) of the QB of this lineup, the team the stack belongs to. Set exactly when stack is set. Null otherwise. |
↳bring_back_team lineups[].bring_back_team | stringnullable | — | The team (such as PHI) of the bring-back seats of this lineup: the other team of the QB's game. Set only when stack has a BB part. Null otherwise. |
seats | list | — | One row per seat of each lineup (lineup_row joins lineups[].row). Empty when locked. Without DFS access a non-chalk seat carries its exposure row's label, its slot and position, and no ID or value. |
↳lineup_row seats[].lineup_row | integer | — | Standings row of the lineup this seat belongs to (lineups[].row). |
↳slot_index seats[].slot_index | integer | — | 0-based position of the seat in the lineup (the order of contest.slots). |
↳slot seats[].slot | string | — | Roster slot. |
↳label seats[].label | stringnullable | — | The P<n> of the seat's hidden exposure row. Null on a clear seat. |
↳chalk seats[].chalk | boolean | — | True on a chalk player's seat shown clear without DFS access. False with DFS access. |
↳pool_id seats[].pool_id | bigintnullable | — | Player pool ID. Null for an empty seat and a hidden seat. |
↳player_id seats[].player_id | bigintnullable | — | stat-api player ID. Null on a hidden seat. |
↳name seats[].name | stringnullable | — | Player name. Null on a hidden seat. |
↳position seats[].position | stringnullable | — | Position (clear on a hidden seat too). |
↳team seats[].team | stringnullable | — | Team abbreviation. Null on a hidden seat. |
↳salary seats[].salary | bigintnullable | — | The slot's price. Null on a hidden seat. |
↳fantasy_points seats[].fantasy_points | decimalnullable | — | The slot's points. Null on a hidden seat. |
↳field_pct seats[].field_pct | decimalnullable | — | Field ownership for this slot in percent (captain ownership for a captain slot). Null on a hidden seat. |
↳stack_role seats[].stack_role | stringnullable | — | The seat's part in its lineup's stack: stack (the QB, and every teammate of his team except the defense, when he has at least one) or bring_back (a player of the opposing team from the QB's game, with or without a stack). Null on any other seat, on a defense, when the lineup's stack cannot be read in full, in hide mode, and on every contest that is not a classic NFL contest. |
↳hidden seats[].hidden | list<S> | — | The fields this seat withholds. Empty on a clear seat. |
access | object | — | What this caller may read. |
↳plan access.plan | string | — | "pro" with DFS access; "flagship" on a marquee contest for anyone else (GET /api/v1/dfs/marquee): the first 100 standings rows and every value of the users with an entry in them, no CSV; else "free" (the first 5 standings rows and hide mode). |
↳full access.full | boolean | — | True when every row and value is sent: DFS access only (a marquee contest stops at row 100). |
↳open_rows access.open_rows | integernullable | — | Standings rows whose users open: 5 on the Free plan, 100 on a marquee contest. Null with DFS access. |
↳lineups_per_user access.lineups_per_user | integernullable | — | Always null: no plan caps the lineups of an open user. |
↳exposure_per_user access.exposure_per_user | integernullable | — | Always null: no plan caps the exposure rows of an open user. |
↳locked access.locked | boolean | — | True when the plan withholds this response's exposure, lineup and seat rows. |
↳lineups_total access.lineups_total | integernullable | — | The user's lineups in the contest. Null on the standings route. |
↳exposure_total access.exposure_total | integernullable | — | The user's exposure rows. Null on the standings route and when locked. |
↳hidden_rows access.hidden_rows | integer | — | Exposure rows sent in hide mode (0 with DFS access and on the standings route). |
analysis | objectnullable | — | How this user built the lineups, worked out once on the server from the user's lineups and the pool (the page works out none of it). Null in hide mode (Free, off the flagships), when the user is locked, and when the user has no lineup. |
↳lineups analysis.lineups | integer | — | The user's lineups this block counts. |
↳stacks analysis.stacks | objectnullable | — | The stacks, by the same QB-stack rule as `stack`. Null on a contest that is not a classic NFL contest. |
↳qb_plus_1 analysis.stacks.qb_plus_1 | integer | — | Lineups whose QB has exactly 1 teammate (the defense is no teammate). |
↳qb_plus_2 analysis.stacks.qb_plus_2 | integer | — | Lineups whose QB has exactly 2 teammates. |
↳qb_plus_3_or_more analysis.stacks.qb_plus_3_or_more | integer | — | Lineups whose QB has 3 or more teammates. |
↳without_stack analysis.stacks.without_stack | integer | — | Lineups with no QB stack: no teammate of the QB, or a lineup the stack rule cannot read in full (an empty seat, an unknown team or game). The two cannot be told apart. |
↳with_bring_back analysis.stacks.with_bring_back | integer | — | Lineups with a bring-back, a player of the other team of the QB's game, with or without a stack. |
↳distinct_qbs analysis.stacks.distinct_qbs | integer | — | The different QBs over the lineups. |
↳stack_teams analysis.stacks.stack_teams | list | — | QB stacks by the QB's team, most lineups first, then by team. |
↳team analysis.stacks.stack_teams[].team | string | — | The team code. |
↳lineups analysis.stacks.stack_teams[].lineups | integer | — | QB stacks of that team. |
↳bring_back_teams analysis.stacks.bring_back_teams | list | — | Lineups with a bring-back by the bring-back team, most lineups first, then by team. |
↳team analysis.stacks.bring_back_teams[].team | string | — | The team code. |
↳lineups analysis.stacks.bring_back_teams[].lineups | integer | — | Lineups with a bring-back from that team. |
↳dispersion analysis.dispersion | object | — | How far apart the lineups are. The pair numbers are null for a user with 1 lineup and for a user with more than 500 lineups. |
↳most_used_lineups analysis.dispersion.most_used_lineups | integer | — | The most lineups that hold one player. |
↳most_used_pct analysis.dispersion.most_used_pct | decimal | — | That count as a percent of the user's lineups, rounded to 1 decimal. |
↳shared_avg analysis.dispersion.shared_avg | decimalnullable | — | Players two lineups share, averaged over every pair of the user's lineups, rounded to 2 decimals. |
↳shared_max analysis.dispersion.shared_max | integernullable | — | The most players two lineups share. |
↳shared_min analysis.dispersion.shared_min | integernullable | — | The fewest players two lineups share. |
↳closest_twin_avg analysis.dispersion.closest_twin_avg | decimalnullable | — | How many players a lineup differs by from the lineup most like it, averaged over the lineups, rounded to 2 decimals. |
↳closest_twin_min analysis.dispersion.closest_twin_min | integernullable | — | The least number of players any lineup differs by from the lineup most like it. |
↳ownership analysis.ownership | objectnullable | — | The sum of the seats' field ownership per lineup (`lineups[].total_ownership`), in percent, rounded to 1 decimal. Null when no lineup has it. |
↳min analysis.ownership.min | decimal | — | The lowest. |
↳avg analysis.ownership.avg | decimal | — | The average. |
↳max analysis.ownership.max | decimal | — | The highest. |
↳lineups analysis.ownership.lineups | integer | — | The lineups that have the value. |
↳salary analysis.salary | objectnullable | — | The salary used per lineup (`lineups[].salary_used`). Null when no lineup has it. |
↳min analysis.salary.min | decimal | — | The lowest. |
↳avg analysis.salary.avg | decimal | — | The average, rounded to a whole number. |
↳max analysis.salary.max | decimal | — | The highest. |
↳lineups analysis.salary.lineups | integer | — | The lineups that have the value. |
_metadata | objectnullable | — | Sent only on a capped answer (fewer rows than exist for this caller): the plan that opens the rest. A full answer (DFS access, or a marquee contest of at most 100 entries) has no such key. A marquee contest of more than 100 entries carries it. |
↳required_tier _metadata.required_tier | string | — | pro. |
↳message _metadata.message | string | — | What the plan opens. |
↳total_actual_records _metadata.total_actual_records | bigint | — | The user's lineups in the contest. |