Get a single contest by id
Request
- Base URL: https://api.stat-api.com
- URL: https://api.stat-api.com/api/v1/dfs/contests/{id}
- Auth: HTTP bearer
Path parameters
Primary Key
Primary key (id) of the contests row.
Response
Single contests row.
Latest observed state: Upcoming, Live, Completed, Cancelled. DraftKings cs / contestState.
Contest structure code (0 = Tournament / GPP, 1 = Cash game / 50-50 / Double-up / head-to-head, 2 = League: a small public operator contest, e.g. a FanDuel 3-player league).
Latest observed entries. The history is in contest_snapshots.
Entry fee in cents (e.g. 500 = $5.00, 2000 = $20.00). 0 for free contests.
Operator contest id, numeric. FanDuel: the tail of its composite id.
First lobby observation.
Number of games in the pool of the contest's slate (distinct games in dfs.slate_games). 0 when the slate has no linked games.
Operator game type: DraftKings gameTypeId (1 Classic, 96 Showdown Captain, …).
Whether the prize pool is guaranteed regardless of entries filled.
Primary Key
Last lobby observation. A contest absent from the lobby after this is cancelled or locked.
Lineup file status: available (the lineups are loaded), pending (capture queued), unavailable (the capture gave up), none. Set by a database trigger from the lineup file pointer on every write (docs/migrations/scripts/2026-09-27-dfs-contests-lineups-status.sql). Filter lineups_status=available for the contests with lineups.
Maximum total entries the contest accepts. Latest observed.
Maximum lineups a single entrant may submit.
Operator-facing contest name (e.g. "$5 NBA Mini-MAX").
The operator id exactly as served. FanDuel: "{fixtureListId}-{contestId}", which the API needs back verbatim. DraftKings: same as external_id.
FK to the operator. Denormalized from slates: 5,160 slate external_ids are shared between DraftKings and FanDuel, so every operator filter was a two-hop join.
Number of paying positions. FanDuel serves it in the lobby (prizes.count); DraftKings derives it from the ladder.
How many stored lineups of the contest's lineup file hold some of their seats but not all. 0 = every stored lineup holds every seat. null = no lineup file, or a new file not counted yet (counted within the hour). A historical file captured while the slate was running misses the players of the late games in many lineups. The same number as the x-partial-lineups header of the download. Filter partial_lineups_count=0 for the contests whose stored lineups are all complete. Written hourly (apps/loader/src/dfs/scripts/contest-partial-lineups.ts; migration docs/migrations/scripts/2026-10-15-dfs-contests-partial-lineups-count.sql).
DraftKings pt. 1 on all paid contests; 2 marked the two $0 promo contests.
Number of rows in the pool of the contest's slate (dfs.slate_players). On showdown and single-game slates a CPT or MVP row counts separately, so the number can be twice the players.
Total prize pool in cents (e.g. 10000000 = $100,000.00). On qualifiers, includes ticket face value.
Satellite or qualifier — pays tickets or seats, not (only) cash. Excluded from field-size statistics.
FK to the slate this contest runs on.
Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates.
The contest's own lock time. A late-swap contest locks later than its slate.
Lifecycle state of the contest in the Prelock / Started / Completed vocabulary, derived by the API on every read (browse.rs derive_dfs_lifecycle_state) from the parent slate status: Upcoming → Prelock, Live → Started, Completed → Completed. status is the authoritative field; this one repeats it in the older vocabulary.
Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates.
Changes
No recorded changes to this operation across all 2 revisions of this API.