DFS

13 tables

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.

Machine-readable spec: /api/openapi/public.json (OpenAPI 3.1)

Main· 4 tables

slatesdfs.slates
DFS contest slate. A slate is one operator + one league + a fixed game pool + scoring rules; users build lineups against it.
Fields9
FieldTypeReferencesDescription
idkeybigintPrimary Key
external_idbigintOperator-side slate identifier (e.g., DraftKings contest group ID).
e.g. 16775
league_idbigintFK to the league this slate belongs to.
e.g. 2
operator_idbigintFK to the DFS operator (DraftKings, FanDuel, Yahoo, etc.).
e.g. 2
slate_setting_idbigintFK to slate_settings — the scoring format and roster constraints for this slate.
e.g. 33
datedateCalendar day of the slate in US Eastern time (DB-generated from start_time — read-only).
e.g. 2026-02-24T05:00:00.000Z
mainbooleanWhether this is the main slate for this operator/league. Currently never populated (always false) — identify main slates by name/start_time until the loader fills it.
e.g. false
namestringnullableHuman-readable slate label (e.g., "Sunday Main", "Showdown: TB vs KC").
e.g. Main
start_timetimestamptzLock time — first scheduled tip/kickoff of any game in the pool.
e.g. 2026-02-25T00:00:00.000Z
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.
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 \
  -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 \
  -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_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.
Fields8
FieldTypeReferencesDescription
idkeybigintPrimary Key
league_idbigint
e.g. 2
operator_idbigint
e.g. 2
contest_typeinteger
e.g. 0
game_stylestringnullable
Values:CLASSICLATE_SWAPFULL_ROSTERNON_LATE_SWAPPICK_EMSHOW_DOWNSHOW_DOWN_CAPTAIN_MODESINGLE_GAMESTARTING_5SINGLE_GAME_BOOSTSINGLE_GAME_V3
game_typeinteger
e.g. 0
namestring
Values:Single Game 1.0Classic 1.0Late Swap 1.0Full Roster 1.0Non Late Swap 1.0Pick'Em 1.0Showdown 1.0Showdown Captain Mode 1…Full Roster 1.1Starting 5 1.0ClassicShowdown
settingsjsonbFull ruleset as JSON: salary cap, roster slots, and the per-stat scoring rules (e.g. DK NBA: 1.25/rebound, 1.5/assist, double-double bonuses, CPT 1.5x). With this plus per-game box scores you can recompute any lineup's fantasy points exactly.
e.g. {"containsDuplicatePlayers":false,"lateSwap":false,"maxPlay…
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 \
  -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 \
  -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.
slate_gamesdfs.slate_games
Many-to-many bridge between a DFS slate and the sport games included in its pool.
Fields6
FieldTypeReferencesDescription
idkeybigintPrimary Key
external_idstringnullableOperator-side game identifier.
e.g. 6129804
game_idbigintPolymorphic reference to {nfl,nba,mlb}.games based on league_id
e.g. 81733
league_idbigintLeague key disambiguating the polymorphic game_id (nfl/nba/mlb/nhl).
e.g. 2
slate_idbigintFK to dfs.slates.
e.g. 756
datajsonbnullableOperator-provided game-level metadata (e.g., totals/spreads at slate snapshot).
e.g. — (all-null in sample)
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 \
  -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 \
  -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.
Fields17
FieldTypeReferencesDescription
idkeybigintPrimary Key
export_idstringnullableOperator player ID used for CSV export/import
e.g.
external_idstringnullableOperator player identifier in this slate.
e.g. 108072-145319
league_idbigintLeague key disambiguating player_id.
e.g. 2
player_idbigintPolymorphic FK to {nfl,nba,mlb,nhl}.players based on league_id.
e.g. 141
slate_game_idbigintFK to dfs.slate_games — the specific slate-game this player is rostered to.
e.g. 193
slate_idbigintFK to dfs.slates.
e.g. 247
team_idbigintnullablePolymorphic FK to {league}.teams. Null for golfers and other player-only sports.
e.g. 17
avg_pointsfloatnullableAverage fantasy points from operator
e.g. — (all-null in sample)
display_namestringnullableFull display name from operator
e.g. Jaden McDaniels
first_namestringnullablePlayer first name from operator
e.g. Jalen
injury_detailsstringnullableInjury body part/details
e.g. — (all-null in sample)
injury_statusstringnullableInjury status (Q, D, O, IR)
e.g. — (all-null in sample)
last_namestringnullablePlayer last name from operator
e.g. Williams
positionstringPrimary position label per operator (e.g., RB, WR, PG, SP).
Values:CPGSGSFPFSG/SFSF/PFPG/SGPF/CSF/SGPF/SFSG/PGC/PFPG/SFPG/PF
roster_positionstringRoster slot the player can fill (RB, FLEX, UTIL, CPT, etc.) — distinguishes multi-slot eligibility. Legacy showdown rows may carry an empty string for the non-captain slot.
Values:CPTMVPPROSTAR
salaryintegerOperator-assigned DFS salary (whole dollars; e.g., 8400 = $8,400).
e.g. 6000
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 \
  -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 \
  -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· 5 tables

game_statsdfs.game_stats
Per-game results for the games in a slate's pool (coming soon).
Fields4
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
league_idbigint
datajsonb
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/dfs/game_stats
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 \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/dfs/game_stats?limit=3'
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
503Coming soon — handler returns 503 until data is wired in.
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 \
  -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.
503Coming soon — handler returns 503 until data is wired in.
player_statsdfs.player_stats
Per-player fantasy scoring results for a slate's games (coming soon — populated after the DFS stat loader ships).
Fields6
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
league_idbigint
player_idbigint
team_idbigint
datajsonb
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/dfs/player_stats
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 \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/dfs/player_stats?limit=3'
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
503Coming soon — handler returns 503 until data is wired in.
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 \
  -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.
503Coming soon — handler returns 503 until data is wired in.
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).
Fields8
FieldTypeReferencesDescription
idkeybigintPrimary Key
slate_player_idbigintFK to dfs.slate_players — which slate-player this projection covers.
e.g. 2562315
slate_projection_source_idbigintFK to dfs.slate_projection_sources — which provider produced this projection.
e.g. 28
ceilingdecimalnullable85th percentile projection (upside)
e.g. — (all-null in sample)
floordecimalnullable15th percentile projection (conservative)
e.g. — (all-null in sample)
projectiondecimalMedian (P50) projected fantasy points.
e.g. 0.0000
statsjsonbnullableComponent stat projections by sport. NFL example: {"pass_yds": 275.5, "pass_tds": 1.5, "pass_ints": 0.5, "rush_yds": 22.5, "rush_tds": 0.3, "rec": 4.5, "rec_yds": 45.0, "rec_tds": 0.4}
e.g. {}
std_devdecimalnullableStandard deviation for simulation/distribution
e.g. — (all-null in sample)
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 \
  -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 \
  -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.
slate_projection_sourcesdfs.slate_projection_sources
A registered projection provider for a slate (e.g., RotoGrinders consensus, an in-house model, a user upload).
Fields7
FieldTypeReferencesDescription
idkeybigintPrimary Key
slate_setting_idbigintFK to dfs.slate_settings — which slate format this source provides projections for.
e.g. 6
descriptionstringnullableFree-text description of the source methodology.
Values:Actual fantasy scores (…State-of-the-art NBA pl…
display_orderintegerSort order for UI display.
e.g. 999
enabledbooleanFalse hides this source from lineup-builder dropdowns.
e.g. true
namestringDisplay name of the projection source.
Values:perfectNBA SOTA projections
source_typeintegerSource-type enum (0=manual upload, 1=consensus, 2=model, etc.).
e.g. 0
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 \
  -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 \
  -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.
team_statsdfs.team_stats
Per-team fantasy-relevant results for a slate's games (coming soon).
Fields5
FieldTypeReferencesDescription
idkeybigintPrimary Key
game_idbigint
league_idbigint
team_idbigint
datajsonb
⚠️ This endpoint is documented but not yet live. Calls return 503 until data is wired in.
GET/api/v1/dfs/team_stats
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 \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  'https://api.stat-api.com/api/v1/dfs/team_stats?limit=3'
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
503Coming soon — handler returns 503 until data is wired in.
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 \
  -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.
503Coming soon — handler returns 503 until data is wired in.

Contests· 4 tables

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, with the fantasy points they scored.
Fields6
FieldTypeReferencesDescription
idkeybigintPrimary Key
contest_user_lineup_idbigintFK to the submitted lineup this roster slot belongs to.
e.g. 1022519
slate_player_idbigintReferences slate_player (player_id, salary, position)
e.g. 3317055
display_orderinteger
e.g. 7
pointsdecimalnullableFantasy points scored by this player
e.g. 50.5000
roster_positionstringPosition slot: PG, SG, SF, PF, C, UTIL, etc.
Values:FPFCSFUTILGPGSG
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 \
  -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 \
  -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.
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.
Fields4
FieldTypeReferencesDescription
idkeybigintPrimary Key
external_idstringOperator user ID
e.g. younghoe
operator_idbigint
e.g. 1
namestringnullable
e.g. younghoe
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 \
  -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 \
  -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.
Fields11
FieldTypeReferencesDescription
idkeybigintPrimary Key
external_idbigintOperator contest ID
e.g. 188369206
slate_idbigintFK to the slate this contest runs on.
e.g. 32347
contest_typeinteger0=GPP, 1=Cash
e.g. 0
entry_countintegerEntries submitted at load time.
e.g. 0
entry_feeintegerEntry fee in cents
e.g. 100
guaranteedbooleanWhether the prize pool is guaranteed regardless of entries filled.
Values:truefalse
max_entriesintegerMaximum total entries the contest accepts.
e.g. 100
max_entries_per_userintegerMaximum lineups a single entrant may submit.
e.g. 1
namestringOperator-facing contest name (e.g. "$5 NBA Mini-MAX").
e.g. 50/50 Contest ($1 - Top 50% Win)
prize_poolintegerTotal prize pool in cents
e.g. 2500
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 \
  -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 \
  -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.
Fields7
FieldTypeReferencesDescription
idkeybigintPrimary Key
contest_idbigint
e.g. 17783
contest_user_idbigint
e.g. 24912
external_idbigintOperator entry ID
e.g. 321546844415722049
pointsdecimalnullableTotal fantasy points scored
e.g. 254.5000
rankintegernullable
e.g. 716
winningsintegernullablePrize won in cents
e.g. 0
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 \
  -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 \
  -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.