DFS
13 tablesDaily-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
slates
dfs.slatesDFS contest slate. A slate is one operator + one league + a fixed game pool + scoring rules; users build lineups against it.
▸Fields9
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| external_id | bigint | — | Operator-side slate identifier (e.g., DraftKings contest group ID). e.g. 16775 |
| league_id | bigint | — | FK to the league this slate belongs to. e.g. 2 |
| operator_id | bigint | FK to the DFS operator (DraftKings, FanDuel, Yahoo, etc.). e.g. 2 | |
| slate_setting_id | bigint | — | FK to slate_settings — the scoring format and roster constraints for this slate. e.g. 33 |
| date | date | — | Calendar day of the slate in US Eastern time (DB-generated from start_time — read-only). e.g. 2026-02-24T05:00:00.000Z |
| main | boolean | — | Whether 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 |
| name | stringnullable | — | Human-readable slate label (e.g., "Sunday Main", "Showdown: TB vs KC"). e.g. Main |
| start_time | timestamptz | — | Lock time — first scheduled tip/kickoff of any game in the pool. e.g. 2026-02-25T00:00:00.000Z |
GET/api/v1/dfs/slatesList slates for DFS
Requires one of:
operator_id + date — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter to all slates for a single DFS operator: 1 DraftKings, 2 FanDuel, 3 Yahoo.
datequerydateoptionalSlate calendar date in US Eastern time (YYYY-MM-DD), derived from start_time.
leaguequerystringoptionalLeague — code (NFL, NBA, MLB, NHL, GOLF; case-insensitive) or numeric league id. Resolves via main.leagues.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/slates/{id}Get a single slate by id
Parameters
idpathbigintrequiredPrimary 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_settings
dfs.slate_settingsThe 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
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| league_id | bigint | — | — e.g. 2 |
| operator_id | bigint | — e.g. 2 | |
| contest_type | integer | — | — e.g. 0 |
| game_style | stringnullable | — | — Values:CLASSICLATE_SWAPFULL_ROSTERNON_LATE_SWAPPICK_EMSHOW_DOWNSHOW_DOWN_CAPTAIN_MODESINGLE_GAMESTARTING_5SINGLE_GAME_BOOSTSINGLE_GAME_V3 |
| game_type | integer | — | — e.g. 0 |
| name | string | — | — 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 |
| settings | jsonb | — | Full 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_settingsList slate_settings for DFS
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/slate_settings/{id}Get a single slate_setting by id
Parameters
idpathbigintrequiredPrimary 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_games
dfs.slate_gamesMany-to-many bridge between a DFS slate and the sport games included in its pool.
▸Fields6
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| external_id | stringnullable | — | Operator-side game identifier. e.g. 6129804 |
| game_id | bigint | — | Polymorphic reference to {nfl,nba,mlb}.games based on league_id e.g. 81733 |
| league_id | bigint | — | League key disambiguating the polymorphic game_id (nfl/nba/mlb/nhl). e.g. 2 |
| slate_id | bigint | FK to dfs.slates. e.g. 756 | |
| data | jsonbnullable | — | Operator-provided game-level metadata (e.g., totals/spreads at slate snapshot). e.g. — (all-null in sample) |
GET/api/v1/dfs/slate_gamesList slate_games for DFS
Requires one of:
slate_id — requests satisfying none of these return 400.Parameters
slate_idquerybigintoptionalFilter to the games in a single slate pool.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/slate_games/{id}Get a single slate_game by id
Parameters
idpathbigintrequiredPrimary 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_players
dfs.slate_playersPlayer pool for a DFS slate — one row per (slate, player, roster slot). Carries operator salary, positions, and any operator-side metadata.
▸Fields17
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| export_id | stringnullable | — | Operator player ID used for CSV export/import e.g. |
| external_id | stringnullable | — | Operator player identifier in this slate. e.g. 108072-145319 |
| league_id | bigint | — | League key disambiguating player_id. e.g. 2 |
| player_id | bigint | — | Polymorphic FK to {nfl,nba,mlb,nhl}.players based on league_id. e.g. 141 |
| slate_game_id | bigint | — | FK to dfs.slate_games — the specific slate-game this player is rostered to. e.g. 193 |
| slate_id | bigint | FK to dfs.slates. e.g. 247 | |
| team_id | bigintnullable | — | Polymorphic FK to {league}.teams. Null for golfers and other player-only sports. e.g. 17 |
| avg_points | floatnullable | — | Average fantasy points from operator e.g. — (all-null in sample) |
| display_name | stringnullable | — | Full display name from operator e.g. Jaden McDaniels |
| first_name | stringnullable | — | Player first name from operator e.g. Jalen |
| injury_details | stringnullable | — | Injury body part/details e.g. — (all-null in sample) |
| injury_status | stringnullable | — | Injury status (Q, D, O, IR) e.g. — (all-null in sample) |
| last_name | stringnullable | — | Player last name from operator e.g. Williams |
| position | string | — | Primary position label per operator (e.g., RB, WR, PG, SP). Values:CPGSGSFPFSG/SFSF/PFPG/SGPF/CSF/SGPF/SFSG/PGC/PFPG/SFPG/PF |
| roster_position | string | — | Roster 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 |
| salary | integer | — | Operator-assigned DFS salary (whole dollars; e.g., 8400 = $8,400). e.g. 6000 |
GET/api/v1/dfs/slate_playersList slate_players for DFS
Requires one of:
slate_id — requests satisfying none of these return 400.Parameters
slate_idquerybigintoptionalFilter to the player pool of a single slate.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/slate_players/{id}Get a single slate_player by id
Parameters
idpathbigintrequiredPrimary 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_stats
dfs.game_statsPer-game results for the games in a slate's pool (coming soon).
▸Fields4
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | — |
| league_id | bigint | — | — |
| data | jsonb | — | — |
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/dfs/game_statsList game_stats for DFS
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/json503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/dfs/game_stats/{id}Get a single game_stat by id
Parameters
idpathbigintrequiredPrimary 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_stats
dfs.player_statsPer-player fantasy scoring results for a slate's games (coming soon — populated after the DFS stat loader ships).
▸Fields6
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | — |
| league_id | bigint | — | — |
| player_id | bigint | — | — |
| team_id | bigint | — | — |
| data | jsonb | — | — |
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/dfs/player_statsList player_stats for DFS
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/json503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/dfs/player_stats/{id}Get a single player_stat by id
Parameters
idpathbigintrequiredPrimary 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_projections
dfs.slate_player_projectionsFantasy-points projection for one player in one slate from one source. Multiple sources produce multiple rows per (slate_player).
▸Fields8
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| slate_player_id | bigint | — | FK to dfs.slate_players — which slate-player this projection covers. e.g. 2562315 |
| slate_projection_source_id | bigint | — | FK to dfs.slate_projection_sources — which provider produced this projection. e.g. 28 |
| ceiling | decimalnullable | — | 85th percentile projection (upside) e.g. — (all-null in sample) |
| floor | decimalnullable | — | 15th percentile projection (conservative) e.g. — (all-null in sample) |
| projection | decimal | — | Median (P50) projected fantasy points. e.g. 0.0000 |
| stats | jsonbnullable | — | Component 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_dev | decimalnullable | — | Standard deviation for simulation/distribution e.g. — (all-null in sample) |
GET/api/v1/dfs/slate_player_projectionsList slate_player_projections for DFS
Requires one of:
slate_player_id — requests satisfying none of these return 400.Parameters
slate_player_idquerybigintoptionalFilter to all source projections for a single slate-player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/slate_player_projections/{id}Get a single slate_player_projection by id
Parameters
idpathbigintrequiredPrimary 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_sources
dfs.slate_projection_sourcesA registered projection provider for a slate (e.g., RotoGrinders consensus, an in-house model, a user upload).
▸Fields7
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| slate_setting_id | bigint | — | FK to dfs.slate_settings — which slate format this source provides projections for. e.g. 6 |
| description | stringnullable | — | Free-text description of the source methodology. Values:Actual fantasy scores (…State-of-the-art NBA pl… |
| display_order | integer | — | Sort order for UI display. e.g. 999 |
| enabled | boolean | — | False hides this source from lineup-builder dropdowns. e.g. true |
| name | string | — | Display name of the projection source. Values:perfectNBA SOTA projections |
| source_type | integer | — | Source-type enum (0=manual upload, 1=consensus, 2=model, etc.). e.g. 0 |
GET/api/v1/dfs/slate_projection_sourcesList slate_projection_sources for DFS
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/slate_projection_sources/{id}Get a single slate_projection_source by id
Parameters
idpathbigintrequiredPrimary 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_stats
dfs.team_statsPer-team fantasy-relevant results for a slate's games (coming soon).
▸Fields5
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| game_id | bigint | — | — |
| league_id | bigint | — | — |
| team_id | bigint | — | — |
| data | jsonb | — | — |
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/dfs/team_statsList team_stats for DFS
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/json503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/dfs/team_stats/{id}Get a single team_stat by id
Parameters
idpathbigintrequiredPrimary 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_entries
dfs.contest_user_lineup_player_entriesA single roster slot within a submitted contest lineup — one slate player in one position, with the fantasy points they scored.
▸Fields6
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| contest_user_lineup_id | bigint | — | FK to the submitted lineup this roster slot belongs to. e.g. 1022519 |
| slate_player_id | bigint | — | References slate_player (player_id, salary, position) e.g. 3317055 |
| display_order | integer | — | — e.g. 7 |
| points | decimalnullable | — | Fantasy points scored by this player e.g. 50.5000 |
| roster_position | string | — | Position slot: PG, SG, SF, PF, C, UTIL, etc. Values:FPFCSFUTILGPGSG |
GET/api/v1/dfs/contest_user_lineup_player_entriesList contest_user_lineup_player_entries for DFS
Requires one of:
contest_user_lineup_id — requests satisfying none of these return 400.Parameters
contest_user_lineup_idquerybigintoptionalFilter to the player roster of a single submitted lineup.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/contest_user_lineup_player_entries/{id}Get a single contest_user_lineup_player_entry by id
Parameters
idpathbigintrequiredPrimary 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_users
dfs.contest_usersA contest entrant — one operator-side user who submitted at least one lineup. Identified by the operator's user id, not a statview account.
▸Fields4
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| external_id | string | — | Operator user ID e.g. younghoe |
| operator_id | bigint | — e.g. 1 | |
| name | stringnullable | — | — e.g. younghoe |
GET/api/v1/dfs/contest_usersList contest_users for DFS
Requires one of:
operator_id — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter to all contest entrants for a single DFS operator: 1 DraftKings, 2 FanDuel, 3 Yahoo.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/contest_users/{id}Get a single contest_user by id
Parameters
idpathbigintrequiredPrimary 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.
contests
dfs.contestsA DFS contest run on a slate — its entry fee, prize pool, entry caps, and type (GPP vs cash). One slate hosts many contests.
▸Fields11
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| external_id | bigint | — | Operator contest ID e.g. 188369206 |
| slate_id | bigint | FK to the slate this contest runs on. e.g. 32347 | |
| contest_type | integer | — | 0=GPP, 1=Cash e.g. 0 |
| entry_count | integer | — | Entries submitted at load time. e.g. 0 |
| entry_fee | integer | — | Entry fee in cents e.g. 100 |
| guaranteed | boolean | — | Whether the prize pool is guaranteed regardless of entries filled. Values:truefalse |
| max_entries | integer | — | Maximum total entries the contest accepts. 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) |
| prize_pool | integer | — | Total prize pool in cents e.g. 2500 |
GET/api/v1/dfs/contestsList contests for DFS
Requires one of:
slate_id — requests satisfying none of these return 400.Parameters
slate_idquerybigintoptionalFilter to all contests run on a single slate.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/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 \
-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_lineups
dfs.contest_user_lineupsA single lineup submitted to a contest by an entrant, with its finishing rank, total fantasy points, and winnings where the contest has settled.
▸Fields7
| Field | Type | References | Description |
|---|---|---|---|
| idkey | bigint | — | Primary Key |
| contest_id | bigint | — e.g. 17783 | |
| contest_user_id | bigint | — | — e.g. 24912 |
| external_id | bigint | — | Operator entry ID e.g. 321546844415722049 |
| points | decimalnullable | — | Total fantasy points scored e.g. 254.5000 |
| rank | integernullable | — | — e.g. 716 |
| winnings | integernullable | — | Prize won in cents e.g. 0 |
GET/api/v1/dfs/contest_user_lineupsList contest_user_lineups for DFS
Requires one of:
contest_id or contest_user_id — requests satisfying none of these return 400.Parameters
contest_idquerybigintoptionalFilter to every lineup submitted to a single contest.
contest_user_idquerybigintoptionalFilter to every lineup an entrant submitted.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
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 \
-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/jsonGET/api/v1/dfs/contest_user_lineups/{id}Get a single contest_user_lineup by id
Parameters
idpathbigintrequiredPrimary 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.