{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/stat-api-com/json-schema/stat-api-com-dfsslates-contest-ownership-dfs-slate-contest-ownership-response-schema.json",
  "title": "DFSSlatesContestOwnership_DfsSlateContestOwnershipResponse",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/stat-api-com-openapi.json#/components/schemas/DFSSlatesContestOwnership_DfsSlateContestOwnershipResponse",
  "properties": {
    "_metadata": {
      "description": "Where the values come from, and on a gated answer the plan that opens the rest.",
      "properties": {
        "contest_ownership": {
          "description": "persisted (the stored rows of the learned model) when contests are served, else null.",
          "enum": [
            "persisted"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "message": {
          "description": "Sent only when players or contests are held back - what the plan opens.",
          "type": [
            "string",
            "null"
          ]
        },
        "required_tier": {
          "description": "Sent only when players or contests are held back - pro.",
          "type": [
            "string",
            "null"
          ]
        },
        "total_actual_records": {
          "description": "Sent only when players or contests are held back - the players on the board.",
          "format": "int64",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object"
    },
    "access": {
      "description": "What this caller sees.",
      "properties": {
        "plan": {
          "description": "pro (every contest and player), primetime (every contest and player for every caller, on a TNF or MNF game's single-game slate), featured (the free contests with the 5 featured players, on a pre-game single-game slate) or preview (the free contests with 5 players).",
          "enum": [
            "pro",
            "primetime",
            "featured",
            "preview"
          ],
          "type": "string"
        },
        "players_shown": {
          "description": "Players in `players`.",
          "format": "int64",
          "type": "integer"
        },
        "players_total": {
          "description": "Players on the board.",
          "format": "int64",
          "type": "integer"
        }
      },
      "required": [
        "plan",
        "players_total",
        "players_shown"
      ],
      "type": "object"
    },
    "across": {
      "description": "The biggest contests side by side (the tool's Across contests tab).",
      "properties": {
        "contest_ids": {
          "description": "The contests in lobby order. With DFS access the 5 biggest GPP contests and the 5 biggest cash games (the page's three filters); without it the free contests, so the ids of `contests`.",
          "items": {
            "format": "int64",
            "type": "integer"
          },
          "type": "array"
        },
        "seats": {
          "description": "On a slate with boost seats: contest id to player id to seat (MVP, STAR, PRO, FLEX) to its share, for the same contests and players as `values`. Empty on any other slate.",
          "type": "object"
        },
        "values": {
          "description": "Contest id to player id to [captain_pct, flex_pct], for the open contests of `contest_ids` and the shown players with a value. A locked contest is left out.",
          "type": "object"
        }
      },
      "required": [
        "contest_ids",
        "values",
        "seats"
      ],
      "type": "object"
    },
    "as_of": {
      "description": "The newest write time of the served rows (ISO 8601, UTC). Null when no rows are served.",
      "type": [
        "string",
        "null"
      ]
    },
    "compare": {
      "description": "The values of the compare contest (`?compare=`, default `default_compare`), the same shape as `contest`. Null when the slate has no cash contest and none is asked.",
      "properties": {
        "actual_status": {
          "description": "The contest's actual ownership: `served` when its players carry it; `pro_required` when the caller's plan does not open the results of this contest (a marquee contest's are free to everyone); else the reason of GET /api/v1/dfs/contests/{contest_id}/ownership (`contest_not_final`, `league_not_computed`, `no_lineups`, `actuals_not_recomputed`). Null before the slate is final, and on a locked contest.",
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "description": "dfs.contests id.",
          "format": "int64",
          "type": "integer"
        },
        "locked": {
          "description": "True when this caller may not see the contest's values. A locked contest sends no player and no position total.",
          "type": "boolean"
        },
        "players": {
          "description": "The shown players (all with DFS access, else the 5 featured players or the 5-row preview) with a value in the contest, the highest total first. Empty when locked.",
          "items": {
            "properties": {
              "actual_captain_pct": {
                "description": "After the contest is final: the field's actual captain (CPT or MVP) ownership of the player in this contest, in percent (GET /api/v1/dfs/contests/{contest_id}/ownership x 100; 0 when no lineup used the seat). Null on a classic contest, and while `actual_status` is not `served`.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "actual_flex_pct": {
                "description": "After the contest is final: the field's actual FLEX ownership in percent; on a classic contest the player's one actual ownership. Null while `actual_status` is not `served`.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "actual_total_pct": {
                "description": "After the contest is final: the field's actual ownership of the player in any seat, in percent. Null while `actual_status` is not `served`.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "captain_pct": {
                "description": "Captain ownership in the contest, in percent (the stored projected_ownership of the captain row x 100).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "captain_rank": {
                "description": "Rank of the captain ownership among all players of the contest (1 = most owned; ties share a rank).",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "captain_rate": {
                "description": "captain_pct / total_pct (0-1). Null when the total is 0 or a value is missing.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "flex_pct": {
                "description": "FLEX ownership in the contest, in percent.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "flex_rank": {
                "description": "Rank of the FLEX ownership among all players of the contest.",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "player_id": {
                "description": "nfl.players id (the `player_id` of `players`).",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "seats": {
                "description": "On a slate with boost seats (FanDuel's old single game: MVP 2x, STAR 1.5x, PRO 1.2x and FLEX), one entry per seat. Empty on any other slate.",
                "items": {
                  "properties": {
                    "pct": {
                      "description": "The seat's share, in percent. Null when the player has no row for the seat.",
                      "format": "double",
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "seat": {
                      "description": "The seat (MVP, STAR, PRO or FLEX).",
                      "type": "string"
                    }
                  },
                  "required": [
                    "seat"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "total_pct": {
                "description": "captain_pct + flex_pct, plus the STAR and PRO seats on a slate with boost seats (the sum of `seats`).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "seats"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "position_totals": {
          "description": "The contest's ownership summed by real position over every player of the contest (also the players not shown), in percent. Captain sums to about 100, FLEX to about 100 x flex_seats. Both maps are empty when locked.",
          "properties": {
            "captain": {
              "description": "Real position (QB, RB, WR, TE, K, DST, D) to the sum of its captain ownership.",
              "type": "object"
            },
            "flex": {
              "description": "Real position to the sum of its FLEX ownership.",
              "type": "object"
            },
            "seats": {
              "description": "On a slate with boost seats: seat (MVP, STAR, PRO, FLEX) to real position to the sum of its share. Empty on any other slate.",
              "type": "object"
            }
          },
          "required": [
            "captain",
            "flex",
            "seats"
          ],
          "type": "object"
        },
        "reason": {
          "description": "Why the contest is locked, and the plan that opens it. Null when it is open.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "locked",
        "players",
        "position_totals"
      ],
      "type": [
        "object",
        "null"
      ]
    },
    "contest": {
      "description": "The values of the selected contest (`?contest=`, default `default_contest`). Null without a contest.",
      "properties": {
        "actual_status": {
          "description": "The contest's actual ownership: `served` when its players carry it; `pro_required` when the caller's plan does not open the results of this contest (a marquee contest's are free to everyone); else the reason of GET /api/v1/dfs/contests/{contest_id}/ownership (`contest_not_final`, `league_not_computed`, `no_lineups`, `actuals_not_recomputed`). Null before the slate is final, and on a locked contest.",
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "description": "dfs.contests id.",
          "format": "int64",
          "type": "integer"
        },
        "locked": {
          "description": "True when this caller may not see the contest's values. A locked contest sends no player and no position total.",
          "type": "boolean"
        },
        "players": {
          "description": "The shown players (all with DFS access, else the 5 featured players or the 5-row preview) with a value in the contest, the highest total first. Empty when locked.",
          "items": {
            "properties": {
              "actual_captain_pct": {
                "description": "After the contest is final: the field's actual captain (CPT or MVP) ownership of the player in this contest, in percent (GET /api/v1/dfs/contests/{contest_id}/ownership x 100; 0 when no lineup used the seat). Null on a classic contest, and while `actual_status` is not `served`.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "actual_flex_pct": {
                "description": "After the contest is final: the field's actual FLEX ownership in percent; on a classic contest the player's one actual ownership. Null while `actual_status` is not `served`.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "actual_total_pct": {
                "description": "After the contest is final: the field's actual ownership of the player in any seat, in percent. Null while `actual_status` is not `served`.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "captain_pct": {
                "description": "Captain ownership in the contest, in percent (the stored projected_ownership of the captain row x 100).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "captain_rank": {
                "description": "Rank of the captain ownership among all players of the contest (1 = most owned; ties share a rank).",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "captain_rate": {
                "description": "captain_pct / total_pct (0-1). Null when the total is 0 or a value is missing.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "flex_pct": {
                "description": "FLEX ownership in the contest, in percent.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "flex_rank": {
                "description": "Rank of the FLEX ownership among all players of the contest.",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "player_id": {
                "description": "nfl.players id (the `player_id` of `players`).",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "seats": {
                "description": "On a slate with boost seats (FanDuel's old single game: MVP 2x, STAR 1.5x, PRO 1.2x and FLEX), one entry per seat. Empty on any other slate.",
                "items": {
                  "properties": {
                    "pct": {
                      "description": "The seat's share, in percent. Null when the player has no row for the seat.",
                      "format": "double",
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "seat": {
                      "description": "The seat (MVP, STAR, PRO or FLEX).",
                      "type": "string"
                    }
                  },
                  "required": [
                    "seat"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "total_pct": {
                "description": "captain_pct + flex_pct, plus the STAR and PRO seats on a slate with boost seats (the sum of `seats`).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "seats"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "position_totals": {
          "description": "The contest's ownership summed by real position over every player of the contest (also the players not shown), in percent. Captain sums to about 100, FLEX to about 100 x flex_seats. Both maps are empty when locked.",
          "properties": {
            "captain": {
              "description": "Real position (QB, RB, WR, TE, K, DST, D) to the sum of its captain ownership.",
              "type": "object"
            },
            "flex": {
              "description": "Real position to the sum of its FLEX ownership.",
              "type": "object"
            },
            "seats": {
              "description": "On a slate with boost seats: seat (MVP, STAR, PRO, FLEX) to real position to the sum of its share. Empty on any other slate.",
              "type": "object"
            }
          },
          "required": [
            "captain",
            "flex",
            "seats"
          ],
          "type": "object"
        },
        "reason": {
          "description": "Why the contest is locked, and the plan that opens it. Null when it is open.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "locked",
        "players",
        "position_totals"
      ],
      "type": [
        "object",
        "null"
      ]
    },
    "contests": {
      "description": "The lobby, the biggest prize pool first, then the largest max_entries, then the lowest id. With DFS access every contest of the slate with learned rows (no qualifier, no cancelled contest). Without it only the free contests: the 5 biggest prize pools of the slate, in the same order. The page filters them All, Cash or GPP and shows 5 of each with DFS access.",
      "items": {
        "properties": {
          "entries": {
            "description": "Entries (entry_count) when last read.",
            "format": "int64",
            "type": "integer"
          },
          "entry_fee": {
            "description": "Entry fee, in dollars.",
            "format": "double",
            "type": "number"
          },
          "entry_type": {
            "description": "GPP only: single_entry (max_entries_per_user 1) or multi_entry. Null for cash.",
            "enum": [
              "single_entry",
              "multi_entry"
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "external_id": {
            "description": "Operator contest ID.",
            "format": "int64",
            "type": "integer"
          },
          "group": {
            "description": "The key of the contest's group in `groups`.",
            "type": "string"
          },
          "id": {
            "description": "dfs.contests id (the `contest` and `compare` parameter).",
            "format": "int64",
            "type": "integer"
          },
          "kind": {
            "description": "cash (contest_type 1) or gpp, the same rule as the groups.",
            "enum": [
              "cash",
              "gpp"
            ],
            "type": "string"
          },
          "max_entries": {
            "description": "Maximum entries.",
            "format": "int64",
            "type": "integer"
          },
          "max_entries_per_user": {
            "description": "Maximum entries per user.",
            "format": "int64",
            "type": "integer"
          },
          "name": {
            "description": "Contest name.",
            "type": "string"
          },
          "open": {
            "description": "True when this caller may see the contest's values. Always true, since a caller without DFS access gets only the free contests.",
            "type": "boolean"
          },
          "prize_pool": {
            "description": "Prize pool, in dollars.",
            "format": "double",
            "type": "number"
          },
          "prize_rank": {
            "description": "The contest's place among every contest of the slate (1 = the biggest prize pool). A caller without DFS access sees the ranks of the free contests, 1-5 always among them.",
            "format": "int64",
            "type": "integer"
          },
          "same_terms": {
            "description": "How many other contests of the slate share the model's contest terms (archetype, max_entries, entry fee, max entries per user), so the same values.",
            "format": "int64",
            "type": "integer"
          },
          "tier": {
            "description": "Size tier by max_entries (the tiers of the groups).",
            "enum": [
              "2",
              "3-100",
              "101-1k",
              "1k-10k",
              "10k-100k",
              "100k+"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "external_id",
          "name",
          "prize_pool",
          "entry_fee",
          "entries",
          "max_entries",
          "max_entries_per_user",
          "kind",
          "tier",
          "group",
          "prize_rank",
          "same_terms",
          "open"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "default_compare": {
      "description": "The contest each value compares with (Frank 2026-10-01): the biggest cash game (contest_type 1), by prize pool, then max_entries, then id. Null when the slate has no cash contest.",
      "format": "int64",
      "type": [
        "integer",
        "null"
      ]
    },
    "default_contest": {
      "description": "The contest the tool opens on (Frank 2026-10-01): the biggest prize pool, the first of `contests`. Null without a contest.",
      "format": "int64",
      "type": [
        "integer",
        "null"
      ]
    },
    "default_group": {
      "description": "The group key the tool opened first before the lobby (Frank 2026-10-01, the largest GPP): the GPP group whose representative contest comes first by the representative order (paid, then the largest max_entries, then entries, prize pool, id). Null without a GPP group.",
      "type": [
        "string",
        "null"
      ]
    },
    "groups": {
      "description": "The contest groups, cash first, then single-entry GPP, then multi-entry GPP, each by size tier. DFS access only; empty without it.",
      "items": {
        "properties": {
          "contest": {
            "description": "The representative contest, whose stored values the group shows: paid first, then the largest max_entries, then the most entries, then the largest prize pool, then the lowest id.",
            "properties": {
              "archetype": {
                "description": "The stored contest_archetype of its rows, else the model's rule.",
                "enum": [
                  "cash",
                  "gpp_single_entry",
                  "gpp_small_field",
                  "gpp_mme",
                  "baseline"
                ],
                "type": "string"
              },
              "contest_id": {
                "description": "dfs.contests id.",
                "format": "int64",
                "type": "integer"
              },
              "entries": {
                "description": "Entries (entry_count) when last read.",
                "format": "int64",
                "type": "integer"
              },
              "entry_fee_cents": {
                "description": "Entry fee in cents.",
                "format": "int64",
                "type": "integer"
              },
              "external_id": {
                "description": "Operator contest ID.",
                "format": "int64",
                "type": "integer"
              },
              "max_entries": {
                "description": "Maximum entries (the model's size feature).",
                "format": "int64",
                "type": "integer"
              },
              "max_entries_per_user": {
                "description": "Maximum entries per user.",
                "format": "int64",
                "type": "integer"
              },
              "name": {
                "description": "Contest name.",
                "type": "string"
              },
              "prize_pool_cents": {
                "description": "Prize pool in cents.",
                "format": "int64",
                "type": "integer"
              }
            },
            "required": [
              "contest_id",
              "external_id",
              "name",
              "entries",
              "max_entries",
              "max_entries_per_user",
              "entry_fee_cents",
              "prize_pool_cents",
              "archetype"
            ],
            "type": "object"
          },
          "contest_count": {
            "description": "Contests of the slate in this group that have learned rows.",
            "format": "int64",
            "type": "integer"
          },
          "entry_type": {
            "description": "GPP only: single_entry (max_entries_per_user 1) or multi_entry. Null for cash.",
            "enum": [
              "single_entry",
              "multi_entry"
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "key": {
            "description": "The group key: kind, entry type (GPP only) and size tier, e.g. cash:3-100, gpp:single_entry:1k-10k, gpp:multi_entry:100k+.",
            "type": "string"
          },
          "kind": {
            "description": "cash or gpp, as the operator labels the contest (Frank 2026-10-01): contest_type 1 is cash, every other type gpp. A DraftKings Triple Up (contest_type 0) is gpp, although the model's archetype calls it cash. Only a contest without a contest_type falls back to the model's name rule (Double Up, 50/50, H2H, Triple Up).",
            "enum": [
              "cash",
              "gpp"
            ],
            "type": "string"
          },
          "position_totals": {
            "description": "The group's ownership summed by real position, captain and FLEX apart, over every player of the representative contest (also the players a preview does not list). Captain sums to about 100, FLEX to about 100 x flex_seats.",
            "items": {
              "properties": {
                "captain_pct": {
                  "description": "Sum of the captain ownership, in percent.",
                  "format": "double",
                  "type": "number"
                },
                "flex_pct": {
                  "description": "Sum of the FLEX ownership, in percent.",
                  "format": "double",
                  "type": "number"
                },
                "position": {
                  "description": "Real position (QB, RB, WR, TE, K, DST on DraftKings, D on FanDuel).",
                  "type": "string"
                },
                "seats": {
                  "description": "On a slate with boost seats, each seat's sum (MVP, STAR, PRO, FLEX). Empty on any other slate.",
                  "items": {
                    "properties": {
                      "pct": {
                        "description": "The seat's share, in percent. Null when the player has no row for the seat.",
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "seat": {
                        "description": "The seat (MVP, STAR, PRO or FLEX).",
                        "type": "string"
                      }
                    },
                    "required": [
                      "seat"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "required": [
                "position",
                "captain_pct",
                "flex_pct",
                "seats"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "size_tier": {
            "description": "Size tier by max_entries.",
            "enum": [
              "2",
              "3-100",
              "101-1k",
              "1k-10k",
              "10k-100k",
              "100k+"
            ],
            "type": "string"
          }
        },
        "required": [
          "key",
          "kind",
          "size_tier",
          "contest_count",
          "contest",
          "position_totals"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "model": {
      "description": "The learned model label of the served rows (`stats.ownership_model`, e.g. single_hgb@19d12bd6d309). Null when no rows are served.",
      "type": [
        "string",
        "null"
      ]
    },
    "players": {
      "description": "The players, highest peak total first (all with DFS access, else the 5 featured players or the 5-row preview). The order is the same for every caller, so the first 5 of a Pro answer are the featured players.",
      "items": {
        "properties": {
          "actual": {
            "description": "The player's actual result, once the stats services hold one (null before his game).",
            "properties": {
              "fantasy_pts": {
                "description": "The fantasy points he scored on the slate's scoring (GET /api/v1/dfs/player_stats `fantasy_pts` of his FLEX row).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "minutes": {
                "description": "The minutes he played, on an NBA slate (GET /api/v1/nba/game_player_stats `minutes`). Null on NFL.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "type": [
              "object",
              "null"
            ]
          },
          "by_group": {
            "description": "The player's values in each group, in the order of `groups`. Empty without DFS access.",
            "items": {
              "properties": {
                "captain_pct": {
                  "description": "Captain ownership in the representative contest, in percent (the stored projected_ownership of the captain row x 100).",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "captain_rank": {
                  "description": "Rank of the captain ownership among all players of the group (1 = most owned; ties share a rank).",
                  "format": "int64",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "captain_rate": {
                  "description": "captain_pct / total_pct (0-1). Null when the total is 0 or a value is missing.",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "flex_pct": {
                  "description": "FLEX ownership in the representative contest, in percent.",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "flex_rank": {
                  "description": "Rank of the FLEX ownership among all players of the group.",
                  "format": "int64",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "key": {
                  "description": "The group key.",
                  "type": "string"
                },
                "seats": {
                  "description": "On a slate with boost seats (FanDuel's old single game: MVP 2x, STAR 1.5x, PRO 1.2x and FLEX), one entry per seat. Empty on any other slate.",
                  "items": {
                    "properties": {
                      "pct": {
                        "description": "The seat's share, in percent. Null when the player has no row for the seat.",
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "seat": {
                        "description": "The seat (MVP, STAR, PRO or FLEX).",
                        "type": "string"
                      }
                    },
                    "required": [
                      "seat"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "total_pct": {
                  "description": "captain_pct + flex_pct, plus the STAR and PRO seats on a slate with boost seats (the sum of `seats`).",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "key",
                "seats"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "captain": {
            "description": "The captain (CPT or MVP) slot. Null on a format without one.",
            "properties": {
              "ceiling": {
                "description": "The projection's ceiling for this slot, its 85th percentile (the ceiling of GET /api/v1/dfs/slates/{slate_id}/projections).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "floor": {
                "description": "The projection's floor for this slot, its 15th percentile (the floor of GET /api/v1/dfs/slates/{slate_id}/projections).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "points_per_1k": {
                "description": "Projected points per $1,000 of salary.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "projected_points": {
                "description": "STAT_API_LATEST projected fantasy points of this slot.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "salary": {
                "description": "Salary of this slot.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "slate_player_id": {
                "description": "dfs.slate_players id of this slot.",
                "format": "int64",
                "type": "integer"
              }
            },
            "required": [
              "slate_player_id"
            ],
            "type": [
              "object",
              "null"
            ]
          },
          "captain_spread": {
            "description": "Max minus min of the captain ownership across the groups, with the groups at both ends. Null without a value, and always null without DFS access (no groups).",
            "properties": {
              "high_group": {
                "description": "The group key with the highest value (the first in group order on a tie).",
                "type": "string"
              },
              "high_pct": {
                "description": "The highest value, in percent.",
                "format": "double",
                "type": "number"
              },
              "low_group": {
                "description": "The group key with the lowest value (the first in group order on a tie).",
                "type": "string"
              },
              "low_pct": {
                "description": "The lowest value, in percent.",
                "format": "double",
                "type": "number"
              },
              "spread_pct": {
                "description": "high_pct minus low_pct.",
                "format": "double",
                "type": "number"
              }
            },
            "required": [
              "spread_pct",
              "high_group",
              "high_pct",
              "low_group",
              "low_pct"
            ],
            "type": [
              "object",
              "null"
            ]
          },
          "flex": {
            "description": "The FLEX slot.",
            "properties": {
              "ceiling": {
                "description": "The projection's ceiling for this slot, its 85th percentile (the ceiling of GET /api/v1/dfs/slates/{slate_id}/projections).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "floor": {
                "description": "The projection's floor for this slot, its 15th percentile (the floor of GET /api/v1/dfs/slates/{slate_id}/projections).",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "points_per_1k": {
                "description": "Projected points per $1,000 of salary.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "projected_points": {
                "description": "STAT_API_LATEST projected fantasy points of this slot.",
                "format": "double",
                "type": [
                  "number",
                  "null"
                ]
              },
              "salary": {
                "description": "Salary of this slot.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "slate_player_id": {
                "description": "dfs.slate_players id of this slot.",
                "format": "int64",
                "type": "integer"
              }
            },
            "required": [
              "slate_player_id"
            ],
            "type": [
              "object",
              "null"
            ]
          },
          "flex_spread": {
            "description": "The same for the FLEX ownership.",
            "properties": {
              "high_group": {
                "description": "The group key with the highest value (the first in group order on a tie).",
                "type": "string"
              },
              "high_pct": {
                "description": "The highest value, in percent.",
                "format": "double",
                "type": "number"
              },
              "low_group": {
                "description": "The group key with the lowest value (the first in group order on a tie).",
                "type": "string"
              },
              "low_pct": {
                "description": "The lowest value, in percent.",
                "format": "double",
                "type": "number"
              },
              "spread_pct": {
                "description": "high_pct minus low_pct.",
                "format": "double",
                "type": "number"
              }
            },
            "required": [
              "spread_pct",
              "high_group",
              "high_pct",
              "low_group",
              "low_pct"
            ],
            "type": [
              "object",
              "null"
            ]
          },
          "name": {
            "description": "Player name.",
            "type": [
              "string",
              "null"
            ]
          },
          "peak_total_pct": {
            "description": "The highest total ownership in any free contest (the 5 biggest prize pools of the slate), in percent. The order of players and the featured pick, the same for every caller.",
            "format": "double",
            "type": [
              "number",
              "null"
            ]
          },
          "player_id": {
            "description": "nfl.players id.",
            "format": "int64",
            "type": [
              "integer",
              "null"
            ]
          },
          "position": {
            "description": "Real position (QB, RB, WR, TE, K, DST or D).",
            "type": [
              "string",
              "null"
            ]
          },
          "projected_minutes": {
            "description": "The minutes we project the player to play, on an NBA slate (the value of the NBA projections). Null on an NFL slate.",
            "format": "double",
            "type": [
              "number",
              "null"
            ]
          },
          "projection": {
            "description": "The essential fields of the player's projection: from the flat row (`format=flat`) GET /api/v1/dfs/slates/{slate_id}/projections serves for the player's FLEX (not multiplied) seat, as it stood at kickoff (`mode=pre`), with that route's keys and values. NBA: opponent, std_dev, usage_rate, play_probability, start_probability, pts, reb, ast, stl, blk, tov, fg3m, double_double_probability, triple_double_probability. NFL: opponent, std_dev, projected_team_snaps (the team's offensive snaps), projected_snaps (the player's), passing_attempts, passing_completions, passing_yds, passing_tds, interceptions_thrown, carries, rushing_yds, rushing_tds, targets, receptions, receiving_yds, receiving_tds. Null when the route has no row for the player. The players CSV (csv=players) adds one `projection.<field>` column per field.",
            "type": [
              "object",
              "null"
            ]
          },
          "seats": {
            "description": "On a slate with boost seats (FanDuel's old single game: MVP 2x, STAR 1.5x, PRO 1.2x and FLEX), the slot of each seat the player holds, in that order: the seat and the fields of a slot (slate_player_id, salary, projected_points, points_per_1k, floor, ceiling). `captain` is the MVP seat and `flex` the FLEX seat. Empty on any other slate.",
            "items": {
              "properties": {
                "ceiling": {
                  "description": "The projection's ceiling for this seat, its 85th percentile.",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "floor": {
                  "description": "The projection's floor for this seat, its 15th percentile.",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "points_per_1k": {
                  "description": "Projected points per $1,000 of salary.",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "projected_points": {
                  "description": "STAT_API_LATEST projected fantasy points of this seat.",
                  "format": "double",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "salary": {
                  "description": "Salary of this seat.",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "seat": {
                  "description": "The seat (MVP, STAR, PRO or FLEX).",
                  "type": "string"
                },
                "slate_player_id": {
                  "description": "dfs.slate_players id of this seat.",
                  "format": "int64",
                  "type": "integer"
                }
              },
              "required": [
                "seat",
                "slate_player_id"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "team": {
            "description": "Team abbreviation.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "seats",
          "by_group"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "reason": {
      "description": "Why `contests` and `groups` are empty (an in-game format, no STAT_API_LATEST source for the format, no learned rows yet, or a slate of another league than NFL, which this board does not serve). Null when contests are served.",
      "type": [
        "string",
        "null"
      ]
    },
    "slate": {
      "description": "The slate.",
      "properties": {
        "captain_slot": {
          "description": "The captain slot word of the format (CPT on DraftKings, MVP on FanDuel). Null on a format without one.",
          "type": [
            "string",
            "null"
          ]
        },
        "external_id": {
          "description": "Operator slate ID (DraftKings draft group, FanDuel fixture list).",
          "format": "int64",
          "type": "integer"
        },
        "flex_seats": {
          "description": "Roster seats that are not the captain seat, from the slate setting (5 on DraftKings Showdown and on FanDuel single game since 2025). The FLEX ownership of one contest sums to 100 x flex_seats percent.",
          "format": "int64",
          "type": [
            "integer",
            "null"
          ]
        },
        "game_type": {
          "description": "The slate setting's format, as on /dfs/slates.",
          "enum": [
            "classic",
            "showdown",
            "single_game",
            "tiers"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "games": {
          "description": "The slate's games.",
          "items": {
            "properties": {
              "away": {
                "description": "Away team abbreviation.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "game_id": {
                "description": "nfl.games id.",
                "format": "int64",
                "type": "integer"
              },
              "home": {
                "description": "Home team abbreviation.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "kickoff": {
                "description": "Kickoff (ISO 8601, UTC).",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "game_id"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "id": {
          "description": "dfs.slates id.",
          "format": "int64",
          "type": "integer"
        },
        "in_game": {
          "description": "True for an in-game format (DraftKings In-Game Showdown, FanDuel 2nd half or 4th quarter). In-game formats have no projections by design.",
          "type": "boolean"
        },
        "name": {
          "description": "Slate name.",
          "type": [
            "string",
            "null"
          ]
        },
        "operator": {
          "description": "DraftKings or FanDuel.",
          "type": "string"
        },
        "start_time": {
          "description": "Lock time (ISO 8601, UTC).",
          "type": [
            "string",
            "null"
          ]
        },
        "status": {
          "description": "Upcoming, Live or Completed.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "external_id",
        "operator",
        "in_game",
        "games"
      ],
      "type": "object"
    },
    "source": {
      "description": "The projection source of every value (always STAT_API_LATEST).",
      "enum": [
        "STAT_API_LATEST"
      ],
      "type": "string"
    }
  },
  "required": [
    "slate",
    "source",
    "access",
    "contests",
    "across",
    "groups",
    "players",
    "_metadata"
  ],
  "type": "object"
}