---
title: "Get a single contest by id"
method: GET
path: "/api/v1/dfs/contests/{id}"
tags: ["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

- `id` integer, required: Primary Key

## Response `200`

Single contests row.

- DFSContests: A DFS contest run on a slate — its entry fee, prize pool, entry caps, type flags and lock time. One slate hosts many contests. Fill history lives in contest_snapshots; the payout ladder in contest_payouts.
  - `attributes` object, nullable: The operator's raw flag set, kept whole: IsStarred, IsWinnerTakeAll, Multiplier, IsBeginner, IsCasual, IsPrivate, League, …
    - `Is FiftyFifty` string, nullable: Operator flag for 50/50 format (spaced key).
    - `Is Starred` string, nullable: Operator flag for starred/featured contest (spaced key).
    - `IsDoubleUp` string, nullable: Whether contest is a double-up format.
    - `IsFiftyfifty` string, nullable: Whether contest is a 50/50 format.
    - `IsGuaranteed` string, nullable: Whether contest prize pool is guaranteed.
    - `IsGuranteed` string, nullable: Operator flag for guaranteed prize pool (raw key spelling).
    - `IsPrivate` string, nullable: Private contest restriction.
    - `IsQualifier` string, nullable: Whether contest awards tickets/qualifier seats.
    - `IsStarred` string, nullable: Whether contest is starred/featured in lobby.
    - `IsWinnerTakeAll` string, nullable: Winner-take-all payout format.
    - `League` string, nullable: Contest league code.
    - `Multiplier` string, nullable: Contest payout multiplier flag.
    - `contest_state_detail` string, nullable: Detailed contest state or lifecycle detail.
    - `hybrid_sampling` object, nullable: Hybrid sampling simulation configuration.
    - `lineup_capsule_uri` object: URI pointer to compressed contest lineup capsule.
      - `fill_pct` number, double, nullable: Current percentage of entries filled.
      - `minutes_to_lock` number, double, nullable: Minutes remaining until contest lock.
      - `projected_final_entries` integer, nullable: Projected final entry count at lock.
      - `projected_overlay_cents` integer, nullable: Projected operator overlay in integer cents.
      - `velocity_per_min` number, double, nullable: Entry velocity rate per minute.
    - `live_telemetry` object, nullable: Live contest telemetry and pacing payload.
    - `was_resized` boolean, nullable: Whether contest entry limit was adjusted or resized.
  - `contest_state` string, nullable: Latest observed state: Upcoming, Live, Completed, Cancelled. DraftKings cs / contestState.
  - `contest_type` integer, 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_count` integer, required: Latest observed entries. The history is in contest_snapshots.
  - `entry_fee` integer, required: Entry fee in cents (e.g. 500 = $5.00, 2000 = $20.00). 0 for free contests.
  - `external_id` integer, required: Operator contest id, numeric. FanDuel: the tail of its composite id.
  - `first_seen_at` string, date-time, nullable: First lobby observation.
  - `game_count` integer, 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_id` integer, nullable: Operator game type: DraftKings gameTypeId (1 Classic, 96 Showdown Captain, …).
  - `guaranteed` boolean, required: Whether the prize pool is guaranteed regardless of entries filled.
  - `id` integer, required: Primary Key
  - `last_seen_at` string, date-time, nullable: Last lobby observation. A contest absent from the lobby after this is cancelled or locked.
  - `lineups_status` string, 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_entries` integer, required: Maximum total entries the contest accepts. Latest observed.
  - `max_entries_per_user` integer, required: Maximum lineups a single entrant may submit.
  - `name` string, required: Operator-facing contest name (e.g. "$5 NBA Mini-MAX").
  - `operator_external_id` string, nullable: The operator id exactly as served. FanDuel: "{fixtureListId}-{contestId}", which the API needs back verbatim. DraftKings: same as external_id.
  - `operator_id` integer, 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_places` integer, nullable: Number of paying positions. FanDuel serves it in the lobby (prizes.count); DraftKings derives it from the ladder.
  - `partial_lineups_count` integer, 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_type` integer, nullable: DraftKings pt. 1 on all paid contests; 2 marked the two $0 promo contests.
  - `player_count` integer, 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_pool` integer, required: Total prize pool in cents (e.g. 10000000 = $100,000.00). On qualifiers, includes ticket face value.
  - `qualifier` boolean, required: Satellite or qualifier — pays tickets or seats, not (only) cash. Excluded from field-size statistics.
  - `slate_id` integer, required: FK to the slate this contest runs on.
  - `slate_status` string, nullable: Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates.
  - `start_time` string, date-time, nullable: The contest's own lock time. A late-swap contest locks later than its slate.
  - `state` string, 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.
  - `status` string, nullable: Authoritative lifecycle status of the parent slate (Upcoming, Live, Completed), joined from dfs.slates.

## Other responses

- `404`: Row not found.

---

[API](https://skmtc.dev/stat-api/apis/sports-db-public-api.md) · [All operations](https://skmtc.dev/stat-api/apis/sports-db-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/stat-api/apis/sports-db-public-api/revisions/23b66b957723?raw)
