DFS

Get a single contest by id

get/api/v1/dfs/contests/{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

idinteger required

Primary Key

Primary key (id) of the contests row.

Response

Single contests row.

contest_statestring nullable

Latest observed state: Upcoming, Live, Completed, Cancelled. DraftKings cs / contestState.

contest_typeinteger required

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).

entry_countinteger required

Latest observed entries. The history is in contest_snapshots.

entry_feeinteger required

Entry fee in cents (e.g. 500 = $5.00, 2000 = $20.00). 0 for free contests.

external_idinteger required

Operator contest id, numeric. FanDuel: the tail of its composite id.

first_seen_atstring date-time nullable

First lobby observation.

game_countinteger required

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.

game_type_idinteger nullable

Operator game type: DraftKings gameTypeId (1 Classic, 96 Showdown Captain, …).

guaranteedboolean required

Whether the prize pool is guaranteed regardless of entries filled.

idinteger required

Primary Key

last_seen_atstring date-time nullable

Last lobby observation. A contest absent from the lobby after this is cancelled or locked.

lineups_statusstring required

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.

max_entriesinteger required

Maximum total entries the contest accepts. Latest observed.

max_entries_per_userinteger required

Maximum lineups a single entrant may submit.

namestring required

Operator-facing contest name (e.g. "$5 NBA Mini-MAX").

operator_external_idstring nullable

The operator id exactly as served. FanDuel: "{fixtureListId}-{contestId}", which the API needs back verbatim. DraftKings: same as external_id.

operator_idinteger required

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.

paid_placesinteger nullable

Number of paying positions. FanDuel serves it in the lobby (prizes.count); DraftKings derives it from the ladder.

partial_lineups_countinteger nullable

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).

payout_typeinteger nullable

DraftKings pt. 1 on all paid contests; 2 marked the two $0 promo contests.

player_countinteger required

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.

prize_poolinteger required

Total prize pool in cents (e.g. 10000000 = $100,000.00). On qualifiers, includes ticket face value.

qualifierboolean required

Satellite or qualifier — pays tickets or seats, not (only) cash. Excluded from field-size statistics.

slate_idinteger required

FK to the slate this contest runs on.

slate_statusstring nullable

Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates.

start_timestring date-time nullable

The contest's own lock time. A late-swap contest locks later than its slate.

statestring required

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.

statusstring nullable

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.