DFS Data Dictionary
Cross-sport betting and DFS rows point at an underlying event through a polymorphic (league_code, competition_id) pair, resolved through the main.competitions view — competition_id is a team-sport games.id or a golf.tournaments.id.
Main
dfs.slates9 fields· 1 refsendpoints →
DFS contest slate. A slate is one operator + one league + a fixed game pool + scoring rules; users build lineups against it.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| external_id | bigint | — | 16775 | Operator-side slate identifier (e.g., DraftKings contest group ID). |
| league_id | bigint | — | 2 | FK to the league this slate belongs to. |
| operator_id | bigint | → main.operators | 2 | FK to the DFS operator (DraftKings, FanDuel, Yahoo, etc.). |
| slate_setting_id | bigint | — | 33 | FK to slate_settings — the scoring format and roster constraints for this slate. |
| date | date | — | 2026-02-24T05:00:00.000Z | Calendar day of the slate in US Eastern time (DB-generated from start_time — read-only). |
| main | boolean | — | false | 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. |
| name | stringnullable | — | Main | Human-readable slate label (e.g., "Sunday Main", "Showdown: TB vs KC"). |
| start_time | timestamptz | — | 2026-02-25T00:00:00.000Z | Lock time — first scheduled tip/kickoff of any game in the pool. |
dfs.slate_settings8 fields· 1 refsendpoints →
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.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| league_id | bigint | — | 2 | — |
| operator_id | bigint | → main.operators | 2 | — |
| contest_type | integer | — | 0 | — |
| game_style | stringnullable | — | CLASSIC | — Values CLASSICLATE_SWAPFULL_ROSTERNON_LATE_SWAPPICK_EMSHOW_DOWNSHOW_DOWN_CAPTAIN_MODESINGLE_GAMESTARTING_5SINGLE_GAME_BOOSTSINGLE_GAME_V3 |
| game_type | integer | — | 0 | — |
| name | string | — | Single Game 1.0 | — 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.0Full Roster 1.1Starting 5 1.0ClassicShowdown |
| settings | jsonb | — | [object Object] | 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. |
dfs.slate_games6 fields· 1 refsendpoints →
Many-to-many bridge between a DFS slate and the sport games included in its pool.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| external_id | stringnullable | — | 6129804 | Operator-side game identifier. |
| game_id | bigint | — | 81733 | Polymorphic reference to {nfl,nba,mlb}.games based on league_id |
| league_id | bigint | — | 2 | League key disambiguating the polymorphic game_id (nfl/nba/mlb/nhl). |
| slate_id | bigint | → dfs.slates | 756 | FK to dfs.slates. |
| data | jsonbnullable | — | — | Operator-provided game-level metadata (e.g., totals/spreads at slate snapshot). |
dfs.slate_players17 fields· 1 refsendpoints →
Player pool for a DFS slate — one row per (slate, player, roster slot). Carries operator salary, positions, and any operator-side metadata.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| export_id | stringnullable | — | — | Operator player ID used for CSV export/import |
| external_id | stringnullable | — | 108072-145319 | Operator player identifier in this slate. |
| league_id | bigint | — | 2 | League key disambiguating player_id. |
| player_id | bigint | — | 141 | Polymorphic FK to {nfl,nba,mlb,nhl}.players based on league_id. |
| slate_game_id | bigint | — | 193 | FK to dfs.slate_games — the specific slate-game this player is rostered to. |
| slate_id | bigint | → dfs.slates | 247 | FK to dfs.slates. |
| team_id | bigintnullable | — | 17 | Polymorphic FK to {league}.teams. Null for golfers and other player-only sports. |
| avg_points | floatnullable | — | — | Average fantasy points from operator |
| display_name | stringnullable | — | Jaden McDaniels | Full display name from operator |
| first_name | stringnullable | — | Jalen | Player first name from operator |
| injury_details | stringnullable | — | — | Injury body part/details |
| injury_status | stringnullable | — | — | Injury status (Q, D, O, IR) |
| last_name | stringnullable | — | Williams | Player last name from operator |
| position | string | — | C | 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 | — | 6000 | Operator-assigned DFS salary (whole dollars; e.g., 8400 = $8,400). |
Stats
dfs.game_stats4 fieldsendpoints →
Per-game results for the games in a slate's pool (coming soon).
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| game_id | bigint | — | — | — |
| league_id | bigint | — | — | — |
| data | jsonb | — | — | — |
dfs.player_stats6 fieldsendpoints →
Per-player fantasy scoring results for a slate's games (coming soon — populated after the DFS stat loader ships).
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| game_id | bigint | — | — | — |
| league_id | bigint | — | — | — |
| player_id | bigint | — | — | — |
| team_id | bigint | — | — | — |
| data | jsonb | — | — | — |
dfs.slate_player_projections8 fieldsendpoints →
Fantasy-points projection for one player in one slate from one source. Multiple sources produce multiple rows per (slate_player).
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| slate_player_id | bigint | — | 2562315 | FK to dfs.slate_players — which slate-player this projection covers. |
| slate_projection_source_id | bigint | — | 28 | FK to dfs.slate_projection_sources — which provider produced this projection. |
| ceiling | decimalnullable | — | — | 85th percentile projection (upside) |
| floor | decimalnullable | — | — | 15th percentile projection (conservative) |
| projection | decimal | — | 0.0000 | Median (P50) projected fantasy points. |
| stats | jsonbnullable | — | [object Object] | 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} |
| std_dev | decimalnullable | — | — | Standard deviation for simulation/distribution |
dfs.slate_projection_sources7 fieldsendpoints →
A registered projection provider for a slate (e.g., RotoGrinders consensus, an in-house model, a user upload).
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| slate_setting_id | bigint | — | 6 | FK to dfs.slate_settings — which slate format this source provides projections for. |
| description | stringnullable | — | Actual fantasy scores (perfect hindsight) | Free-text description of the source methodology. Values Actual fantasy scores (perfect hindsight)State-of-the-art NBA player projections |
| display_order | integer | — | 999 | Sort order for UI display. |
| enabled | boolean | — | true | False hides this source from lineup-builder dropdowns. |
| name | string | — | perfect | Display name of the projection source. Values perfectNBA SOTA projections |
| source_type | integer | — | 0 | Source-type enum (0=manual upload, 1=consensus, 2=model, etc.). |
dfs.team_stats5 fieldsendpoints →
Per-team fantasy-relevant results for a slate's games (coming soon).
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| game_id | bigint | — | — | — |
| league_id | bigint | — | — | — |
| team_id | bigint | — | — | — |
| data | jsonb | — | — | — |
Contests
dfs.contest_user_lineup_player_entries6 fieldsendpoints →
A single roster slot within a submitted contest lineup — one slate player in one position, with the fantasy points they scored.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| contest_user_lineup_id | bigint | — | 1022519 | FK to the submitted lineup this roster slot belongs to. |
| slate_player_id | bigint | — | 3317055 | References slate_player (player_id, salary, position) |
| display_order | integer | — | 7 | — |
| points | decimalnullable | — | 50.5000 | Fantasy points scored by this player |
| roster_position | string | — | F | Position slot: PG, SG, SF, PF, C, UTIL, etc. Values FPFCSFUTILGPGSG |
dfs.contest_users4 fields· 1 refsendpoints →
A contest entrant — one operator-side user who submitted at least one lineup. Identified by the operator's user id, not a statview account.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| external_id | string | — | younghoe | Operator user ID |
| operator_id | bigint | → main.operators | 1 | — |
| name | stringnullable | — | younghoe | — |
dfs.contests11 fields· 1 refsendpoints →
A DFS contest run on a slate — its entry fee, prize pool, entry caps, and type (GPP vs cash). One slate hosts many contests.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| external_id | bigint | — | 188369206 | Operator contest ID |
| slate_id | bigint | → dfs.slates | 32347 | FK to the slate this contest runs on. |
| contest_type | integer | — | 0 | 0=GPP, 1=Cash |
| entry_count | integer | — | 0 | Entries submitted at load time. |
| entry_fee | integer | — | 100 | Entry fee in cents |
| guaranteed | boolean | — | true | Whether the prize pool is guaranteed regardless of entries filled. Values truefalse |
| max_entries | integer | — | 100 | Maximum total entries the contest accepts. |
| max_entries_per_user | integer | — | 1 | Maximum lineups a single entrant may submit. |
| name | string | — | 50/50 Contest ($1 - Top 50% Win) | Operator-facing contest name (e.g. "$5 NBA Mini-MAX"). |
| prize_pool | integer | — | 2500 | Total prize pool in cents |
dfs.contest_user_lineups7 fields· 1 refsendpoints →
A single lineup submitted to a contest by an entrant, with its finishing rank, total fantasy points, and winnings where the contest has settled.
| Field | Type | References | Example | Description |
|---|---|---|---|---|
| idkey | bigint | — | — | Primary Key |
| contest_id | bigint | → dfs.contests | 17783 | — |
| contest_user_id | bigint | — | 24912 | — |
| external_id | bigint | — | 321546844415722049 | Operator entry ID |
| points | decimalnullable | — | 254.5000 | Total fantasy points scored |
| rank | integernullable | — | 716 | — |
| winnings | integernullable | — | 0 | Prize won in cents |