DFS

DFS slate player projections, distributions, and betting props

Returns the player projections of a DFS slate: fantasy point components and counting stats, simulated quantile distributions (p05 through p95), tournament ownership projections with volatility bounds, Vegas betting prop anchors, and play profile upside/safety metrics.

One route for every league: the slate names its league (slate.league), and you never pass it. NFL and NBA slates are projected, for DraftKings Classic and Showdown and FanDuel Classic. Each player's projection is scored with the slate's own scoring rules, and on a Showdown or single-game slate the captain (CPT, MVP) multiplier is already applied: each seat is its own row. An NBA row carries the shared identity and points fields and the fields marked "NBA only" (minutes, usage rate, the stat line, double-double and triple-double chances, chance_5x and chance_6x); it never carries an NFL-only field. NBA ownership is projected per contest segment, so an NBA slate row has ownership: null; read it on /dfs/contests/{contest_id}/projections. Our NBA projections start with the regular season: a game's first projection appears on game day, once its betting line and roster are in; it updates whenever the line or a player's status changes, and it locks at tip. chance_Nx is the share of the seat's points distribution at or above N x salary / 1000, read from the 99 percentiles of the seat's points and interpolated linearly inside the 1-point step that holds the threshold; outside p01..p99 it answers the bound 0.99 or 0.01 with chance_Nx_bound.

The player rows come in one of three formats. The default (no format) sends them nested, in projections. format=flat sends them flat, in player_stats. format=csv returns the flat rows as CSV (text/csv): one column per player_stats field, then one column per enrich tag. enrich joins related data onto each player row, the same tags as on /dfs/slate_players.

projection_status says whether the slate's format has projections. In-game formats (DraftKings In-Game Showdown, FanDuel 2nd-half and 4th-quarter single game) have none by decision: they answer 200 with projection_status: none_by_design and empty arrays. A slate with no player pool answers 200 with projection_status: no_player_pool and empty arrays. An NBA slate without a projection yet answers 200 with not_projected_yet, a past NBA slate whose games tipped before our engine projected them 200 with not_projected, and a slate of a league our engines do not project (MLB, NHL, golf) 200 with league_not_projected. Any other NFL slate whose format has no projection source answers 404.

get/api/v1/dfs/slates/{slate_id}/projections

Request

  • Base URL: https://api.stat-api.com
  • URL: https://api.stat-api.com/api/v1/dfs/slates/{slate_id}/projections
  • Auth: HTTP bearer

Path parameters

slate_idinteger required

Internal STAT-API slate ID (references dfs.slates.id). Operator contest group external IDs (e.g. 153770) are not accepted; query GET /api/v1/dfs/slates to resolve internal slate IDs.

Query parameters

sourcestring

Projection source name. The default, STAT_API_LATEST, is always the newest stat-api engine; its version is in _metadata.engine_version. STAT_API (the 2.1 engine) is deprecated. A request for STAT_API, or with no source, gets STAT_API_LATEST on every slate where STAT_API_LATEST has projections, and STAT_API on any other slate (_metadata.fallback is then true). A request for STAT_API_LATEST by name never falls back.

positionstring

Roster position filter (e.g. QB, RB, WR, TE, DST, K, or comma-separated list).

formatstring

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

enrichstring

Comma-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 such as nfl.games.opponent.abbreviation picks one field). Each tag adds one key (one CSV column) named by its table. mode=pre refuses dfs.player_stats, which is post-game data.

modestring

Time wall: 'pre' (default) returns the post-game fields (actual_fantasy_pts, actual_ownership, actual_rank, leverage_delta) as null; 'full' includes them. See the Data timing guide.

projection_idinteger

NBA slates only: a version of our NBA engine (main.projections id). Default: its active version. An NFL slate answers 400 with this parameter.

Response

DFS slate player projections, distributions, and betting props

projection_status'available' | 'none_by_design' | 'no_player_pool' | 'not_projected_yet' | 'not_projected' | 'league_not_projected' required

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.

Changes