STAT-API

DFS API Reference

Daily-fantasy contest data across operators — the slates (operator + league + game pool + scoring rules), their game pools, player pools with salaries and positions, projection sources and projections, and the contests with their entrants, submitted lineups, and per-lineup player rosters.

Main

slate_settingsdfs.slate_settings
The scoring format and roster-construction ruleset a slate is built on — salary cap, position slots, and scoring rules per operator / league / game-type combination. A small reference table that many slates point at.
GET/api/v1/dfs/slate_settings
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/slate_settings?limit=3'
Responses
200slate_settings rows matching the declared filter set, wrapped in { slate_settings, 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/json
GET/api/v1/dfs/slate_settings/{id}
Parameters
idpathbigintrequired
Primary key (id) of the slate_setting 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/slate_settings/{pk_value}'
Responses
200Single slate_setting row.application/jsonshow example ▸
404Row not found.
slatesdfs.slates
DFS contest slate. A slate is one operator + one league + a fixed game pool + scoring rules; users build lineups against it.
GET/api/v1/dfs/slates
Requires one of: operator_id + date — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter to all slates for a single DFS operator: 1 DraftKings, 2 FanDuel, 3 Yahoo.
datequerydateoptional
Slate calendar date in US Eastern time (YYYY-MM-DD), derived from start_time. Range operators let a caller ask for the most recent slates on or before a day, which is how a client finds live data without knowing the schedule. Range syntax: date__gte=, date__lte=, date__between=.
leaguequerystringoptional
League — code (NFL, NBA, MLB, NHL, GOLF; case-insensitive) or numeric league id. Resolves via main.leagues.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/slates?operator_id=1&date=2026-01-01'
Responses
200slates rows matching the declared filter set, wrapped in { slates, 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/json
GET/api/v1/dfs/slates/{id}
Parameters
idpathbigintrequired
Primary key (id) of the slate 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/slates/{pk_value}'
Responses
200Single slate row.application/jsonshow example ▸
404Row not found.
slate_gamesdfs.slate_games
Many-to-many bridge between a DFS slate and the sport games included in its pool.
GET/api/v1/dfs/slate_games
Requires one of: slate_id — requests satisfying none of these return 400.
Parameters
slate_idquerybigintoptional
Filter to the games in a single slate pool.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/slate_games?slate_id=1'
Responses
200slate_games rows matching the declared filter set, wrapped in { slate_games, 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/json
GET/api/v1/dfs/slate_games/{id}
Parameters
idpathbigintrequired
Primary key (id) of the slate_game 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/slate_games/{pk_value}'
Responses
200Single slate_game row.application/jsonshow example ▸
404Row not found.
slate_playersdfs.slate_players
Player pool for a DFS slate — one row per (slate, player, roster slot). Carries operator salary, positions, and any operator-side metadata.
GET/api/v1/dfs/slate_players
Requires one of: slate_id — requests satisfying none of these return 400.
Parameters
slate_idquerybigintoptional
Filter to the player pool of a single slate.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/slate_players?slate_id=1'
Responses
200slate_players rows matching the declared filter set, wrapped in { slate_players, 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/json
GET/api/v1/dfs/slate_players/{id}
Parameters
idpathbigintrequired
Primary key (id) of the slate_player 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/slate_players/{pk_value}'
Responses
200Single slate_player row.application/jsonshow example ▸
404Row not found.

Stats

slate_projection_sourcesdfs.slate_projection_sources
A registered projection provider for a slate (e.g., RotoGrinders consensus, an in-house model, a user upload).
GET/api/v1/dfs/slate_projection_sources
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/slate_projection_sources?limit=3'
Responses
200slate_projection_sources rows matching the declared filter set, wrapped in { slate_projection_sources, 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/json
GET/api/v1/dfs/slate_projection_sources/{id}
Parameters
idpathbigintrequired
Primary key (id) of the slate_projection_source 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/slate_projection_sources/{pk_value}'
Responses
200Single slate_projection_source row.application/jsonshow example ▸
404Row not found.
game_statsdfs.game_stats
One row per game in a slate's pool: the game's total fantasy production for the slate's operator scoring format with home/away point totals, per-category point columns, and headline raw stats per side. Per-side category detail lives on team_stats. NFL today.
GET/api/v1/dfs/game_stats
Requires one of: slate_id or game_id or slate_date — requests satisfying none of these return 400.
Parameters
slate_idquerybigintoptional
Filter to one slate — every game in its pool.
game_idquerybigintoptional
Filter to one game across slates.
slate_datequerydateoptional
Slate calendar day (YYYY-MM-DD, US Eastern). Range operators support backtesting windows. Range syntax: slate_date__gte=, slate_date__lte=, slate_date__between=.
scoring_formatquerystringoptional
Scoring format code (classic, showdown, single_game).
operator_idquerybigintoptional
Filter by operator (1 = DraftKings, 2 = FanDuel).
league_idquerybigintoptional
Filter by league (1 = NFL).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/game_stats?slate_id=1'
Responses
200game_stats rows matching the declared filter set, wrapped in { game_stats, 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/json
GET/api/v1/dfs/game_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the game_stat 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/game_stats/{pk_value}'
Responses
200Single game_stat row.application/jsonshow example ▸
404Row not found.
player_statsdfs.player_stats
One row per slate player: the slate context (slate, salary, position) joined to that player's per-game fantasy result for the slate's operator scoring format — total points, the per-category point columns, and the raw stats behind them. NFL today; other leagues follow as their fantasy engines land.
GET/api/v1/dfs/player_stats
Requires one of: slate_id or player_id or game_id or slate_date — requests satisfying none of these return 400.
Parameters
slate_idquerybigintoptional
Filter to one slate — every player in that slate's pool.
player_idquerybigintoptional
Filter to a single player across slates.
game_idquerybigintoptional
Filter to the players whose slate rows resolve to one game.
slate_datequerydateoptional
Slate calendar day (YYYY-MM-DD, US Eastern). Range operators support backtesting windows. Range syntax: slate_date__gte=, slate_date__lte=, slate_date__between=.
team_idquerybigintoptional
Filter by the player's team.
scoring_formatquerystringoptional
Scoring format code (classic, showdown, single_game) — e.g. exclude showdown duplicates from a player log.
positionquerystringoptional
Roster position as listed in the slate pool (QB, RB, WR, TE, DST).
operator_idquerybigintoptional
Filter by operator (1 = DraftKings, 2 = FanDuel).
league_idquerybigintoptional
Filter by league (1 = NFL).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/player_stats?slate_id=1'
Responses
200player_stats rows matching the declared filter set, wrapped in { player_stats, 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/json
GET/api/v1/dfs/player_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the player_stat 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/player_stats/{pk_value}'
Responses
200Single player_stat row.application/jsonshow example ▸
404Row not found.
team_statsdfs.team_stats
One row per team per slate game: the team's summed fantasy production for the slate's operator scoring format — total points, per-category point columns, player count, and the team's raw box-score line. DST is included in the team total. NFL today.
GET/api/v1/dfs/team_stats
Requires one of: slate_id or game_id or team_id or slate_date — requests satisfying none of these return 400.
Parameters
slate_idquerybigintoptional
Filter to one slate — both teams of every game in it.
game_idquerybigintoptional
Filter to one game's two team rows across slates.
slate_datequerydateoptional
Slate calendar day (YYYY-MM-DD, US Eastern). Range operators support backtesting windows. Range syntax: slate_date__gte=, slate_date__lte=, slate_date__between=.
team_idquerybigintoptional
Filter to one team across slates.
scoring_formatquerystringoptional
Scoring format code (classic, showdown, single_game).
operator_idquerybigintoptional
Filter by operator (1 = DraftKings, 2 = FanDuel).
league_idquerybigintoptional
Filter by league (1 = NFL).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/team_stats?slate_id=1'
Responses
200team_stats rows matching the declared filter set, wrapped in { team_stats, 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/json
GET/api/v1/dfs/team_stats/{id}
Parameters
idpathbigintrequired
Primary key (id) of the team_stat 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/team_stats/{pk_value}'
Responses
200Single team_stat row.application/jsonshow example ▸
404Row not found.
slate_player_projectionsdfs.slate_player_projections
Fantasy-points projection for one player in one slate from one source. Multiple sources produce multiple rows per (slate_player).
GET/api/v1/dfs/slate_player_projections
Requires one of: slate_player_id — requests satisfying none of these return 400.
Parameters
slate_player_idquerybigintoptional
Filter to all source projections for a single slate-player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/slate_player_projections?slate_player_id=1'
Responses
200slate_player_projections rows matching the declared filter set, wrapped in { slate_player_projections, 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/json
GET/api/v1/dfs/slate_player_projections/{id}
Parameters
idpathbigintrequired
Primary key (id) of the slate_player_projection 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/slate_player_projections/{pk_value}'
Responses
200Single slate_player_projection row.application/jsonshow example ▸
404Row not found.

Contests

contest_usersdfs.contest_users
A contest entrant — one operator-side user who submitted at least one lineup. Identified by the operator's user id, not a statview account.
GET/api/v1/dfs/contest_users
Requires one of: operator_id — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter to all contest entrants for a single DFS operator: 1 DraftKings, 2 FanDuel, 3 Yahoo.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/contest_users?operator_id=1'
Responses
200contest_users rows matching the declared filter set, wrapped in { contest_users, 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/json
GET/api/v1/dfs/contest_users/{id}
Parameters
idpathbigintrequired
Primary key (id) of the contest_user 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/contest_users/{pk_value}'
Responses
200Single contest_user row.application/jsonshow example ▸
404Row not found.
contestsdfs.contests
A DFS contest run on a slate — its entry fee, prize pool, entry caps, and type (GPP vs cash). One slate hosts many contests.
GET/api/v1/dfs/contests
Requires one of: slate_id — requests satisfying none of these return 400.
Parameters
slate_idquerybigintoptional
Filter to all contests run on a single slate.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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=1'
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/json
GET/api/v1/dfs/contests/{id}
Parameters
idpathbigintrequired
Primary 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/{pk_value}'
Responses
200Single contest row.application/jsonshow example ▸
404Row not found.
contest_user_lineupsdfs.contest_user_lineups
A single lineup submitted to a contest by an entrant, with its finishing rank, total fantasy points, and winnings where the contest has settled.
GET/api/v1/dfs/contest_user_lineups
Requires one of: contest_id or contest_user_id — requests satisfying none of these return 400.
Parameters
contest_idquerybigintoptional
Filter to every lineup submitted to a single contest.
contest_user_idquerybigintoptional
Filter to every lineup an entrant submitted.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/contest_user_lineups?contest_id=1'
Responses
200contest_user_lineups rows matching the declared filter set, wrapped in { contest_user_lineups, 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/json
GET/api/v1/dfs/contest_user_lineups/{id}
Parameters
idpathbigintrequired
Primary key (id) of the contest_user_lineup 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/contest_user_lineups/{pk_value}'
Responses
200Single contest_user_lineup row.application/jsonshow example ▸
404Row not found.
contest_user_lineup_player_entriesdfs.contest_user_lineup_player_entries
A single roster slot within a submitted contest lineup — one slate player in one position.
GET/api/v1/dfs/contest_user_lineup_player_entries
Requires one of: contest_user_lineup_id — requests satisfying none of these return 400.
Parameters
contest_user_lineup_idquerybigintoptional
Filter to the player roster of a single submitted lineup.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/contest_user_lineup_player_entries?contest_user_lineup_id=1'
Responses
200contest_user_lineup_player_entries rows matching the declared filter set, wrapped in { contest_user_lineup_player_entries, 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/json
GET/api/v1/dfs/contest_user_lineup_player_entries/{id}
Parameters
idpathbigintrequired
Primary key (id) of the contest_user_lineup_player_entry 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/contest_user_lineup_player_entries/{pk_value}'
Responses
200Single contest_user_lineup_player_entry row.application/jsonshow example ▸
404Row not found.