---
title: "Get one futures competition, with progress and leaders"
method: GET
path: "/api/v2/sports/{sportID}/futures/{eventID}"
tags: ["V2 Futures"]
---

# Get one futures competition, with progress and leaders

`GET /api/v2/sports/{sportID}/futures/{eventID}`

## Request

- Base URL: `https://therundown.io`
- URL: `https://therundown.io/api/v2/sports/{sportID}/futures/{eventID}`
- Auth: API key in header `X-TheRundown-Key`

Returns **one** futures/outright competition event, the same envelope and event object shape as `GET /api/v2/sports/{sportID}/futures` (`meta.delta_last_id`, `events` with a single event carrying `event_id`, `sport_id`, `event_date`, `settle_by`, `event_status`, `settlement`, `schedule`, `markets`), plus up to three optional detail-only keys not served on the listing. **Early access: requires an Ultra plan or higher.**

**`progress`**: the competition's live non-odds state (a golf leaderboard, a team-sport standings table), refreshed on its own cycle independent of the odds board. `entries[].participant_id` is the same participant ID space `markets[].participants[].id` uses, so a progress row joins directly to a price. Omitted entirely (never `null`) when no progress document exists yet for the competition: "priced, no odds-board progress" is the normal state for a fresh team-championship board, not a degraded response. See [Competition Stats (Progress)](/guides/futures#competition-stats-progress) for the full field-by-field breakdown of both kinds live today.

**`leaders`** / **`player_leaders`**: optional curated season-stats leaderboards, team-grain and player-grain respectively, for a hand-verified set of sports. Both reuse the same `{stat, stat_id, season_year, entries[]}` shape and are omitted entirely (never an empty array) when the sport is not curated or no stat rows exist yet; see [Competition Stats (Progress)](/guides/futures#competition-stats-progress) for the curated sport list and the two distinct entry ID spaces.

**Settled competitions are always served here.** Unlike the listing (which hides settled markets and terminal events unless `include_settled=true`), this is a deep link to a specific competition you already hold the ID for, and it keeps working after settlement, with the graded results visible in `settlement`. There is no `include_settled` parameter on this endpoint.

## Path parameters

- `sportID` integer, required
- `eventID` string, required

## Query parameters

- `market_ids` string
- `affiliate_ids` string

## Response `200`

Futures event retrieved successfully

- FuturesEventDetailResponse
  - `meta` FuturesMeta
    - `delta_last_id` union: Positive whole-integer cursor for `/api/v2/markets/delta`. The API may return it as an integer or a numeric string. Use a snapshot value to begin market-delta polling only for known zero-delay access when that snapshot explicitly reports `X-Data-Delay-Seconds: 0`; otherwise use scoped snapshots and never substitute `0`.
      - integer
      - string
    - `next_cursor` string: Opaque keyset token for the next page. Present only while more rows exist; absent on the last page. Pass back verbatim as `cursor`.
    - `count` integer: Number of events on this page (the length of `events`). Always present.
    - `has_more` boolean: `true` while more pages exist (the same signal as `next_cursor`, as a boolean). `false` on the last page. Always present.
    - `total` integer: Number of events matching your filters across ALL pages, so you can size a listing without walking every page. Counts events, not markets; the keyset cursor does not affect it. Always present.
  - `events` FuturesEventDetail[]: A single-element array: one event per request, no paging.
    - `event_id` string: Opaque hash identifying the competition. Stable for the life of the competition: the public handle across snapshots and the delta feed.
    - `sport_id` integer
    - `event_date` string, date-time: When the competition starts (interval start).
    - `settle_by` string, date-time: Settlement horizon: when the competition must have graded (interval end).
    - `event_status` string: Event status. Season-long team competitions currently remain `STATUS_SCHEDULED` for the life of the board (live in-progress status for team seasons is not yet populated); short competitions like golf tournaments do transition to `STATUS_IN_PROGRESS` and `STATUS_FINAL`.
    - `settlement` object: Per-market settlement state, keyed by market ID. Empty (`{}`) until grading begins: a market with no entry has not entered grading.
    - `schedule` FuturesSchedule: Trimmed schedule block for a competition event.
      - `event_name` string: Human-readable competition name: the display identity of the event.
      - `season_year` integer
      - `league_name` string: League or tour label, when applicable (e.g. `PGA Tour`). Omitted otherwise.
    - `markets` MarketResponse[]: Future-class markets in the standard V2 market/participant/line/price shape.
      - `id` integer
      - `market_id` integer
      - `period_id` integer
      - `name` string
      - `market_description` string
      - `participants` MarketParticipantResponse[]
        - `id` integer: Stable, joinable participant identifier. Join on this field rather than name to avoid shared-name collisions. Its meaning depends on `type`: for `TYPE_TEAM` it is the normalized team ID (stable across seasons, matches `event.teams[].team_id`; full record at GET /api/v2/teams/{team_id}); for `TYPE_PLAYER` it is the player ID (full record at GET /api/v2/players/{player_id}); for `TYPE_RESULT` it is a small outcome index (e.g. 0/1 for Over/Under) and is not a team or player resource key.
        - `type` 'TYPE_TEAM' | 'TYPE_PLAYER' | 'TYPE_RESULT': Kind of participant. Determines what `id` points to (team, player, or result outcome).
        - `name` string: Display name. Not guaranteed unique across participants: join on `id`, not `name`.
        - `lines` MarketLinesResponse[]
          - `id` string
          - `value` string: Line value. For spreads/totals this is numeric; for some prop and special markets it can be a method, round, threshold, or other display value. When `line_value_is_participant` is true, the participant usually carries the selection.
          - `selection` string
          - `handicap` string
          - `prices` object: Prices keyed by affiliate ID
    - `progress` FuturesProgress: The competition's live non-odds state (a leaderboard or a standings table), refreshed on its own cycle, independent of the odds board. `entries[].participant_id` is the same participant ID space `markets[].participants[].id` uses, so a progress row joins directly to a price. See [Competition Stats (Progress)](/guides/futures#competition-stats-progress) for the full field list per `kind`.
      - `kind` 'stroke_play_leaderboard' | 'league_standings': Which document shape `context`/`entries` follow. Live today: `stroke_play_leaderboard` (golf) and `league_standings` (team-sport championships).
      - `as_of` string, date-time: When the document was last refreshed.
      - `phase` FuturesProgressPhase: Where the competition is in its lifecycle right now.
        - `status` string: Same status vocabulary as `event_status` elsewhere (e.g. `STATUS_IN_PROGRESS`, `STATUS_FINAL`).
        - `label` string: Human-readable phase label, synthesized for display (never raw upstream text).
        - `unit` string: The unit `current`/`total` are counted in (e.g. `round` for golf).
        - `current` integer, nullable: Current position within `unit`. `null` when there is no meaningful "current", for example a standings table between games.
        - `total` integer, nullable: Total `unit` count for the competition, when known; `null` otherwise.
      - `context` object: Kind-specific competition-wide state. `stroke_play_leaderboard`: `cut_score`, `cut_count`, `purse`, `round`, `round_state`. `league_standings`: an empty object today; standings context lives on each entry, not the shared block.
      - `entries` object[]: Kind-specific ranked rows. `stroke_play_leaderboard`: `participant_id`, `name`, `position`, `tied`, `score_to_par`, `today`, `thru`, `movement`, `country`, `total_strokes`, `round_state`. `league_standings`: `participant_id`, `name`, `rank`, `wins`, `losses`, `ties`, `win_pct`, `points`, plus sport-specific fields such as `conference`, `division`, `seed`, `games_behind`, `streak`, and (soccer) `goal_difference`. Every field beyond the core set is optional and omitted when the source doesn't provide it.
    - `leaders` FuturesLeaderStat[]: Optional team-grain season-stats leaderboard, omitted entirely (never an empty array) when the sport has no curated stat set or the competition has no resolvable team participant. Curated today for NFL, NCAAF, NBA, WNBA, NCAAB, MLB, NHL, MLS, EPL, Ligue 1, Bundesliga, La Liga, and Serie A.
      - `stat` string: House display name (never an upstream stat's raw field name).
      - `stat_id` integer: Internal stat identifier, exposed the same way `market_id` is elsewhere.
      - `season_year` integer: The most recent season with data for this stat, derived per request (never hardcoded).
      - `entries` FuturesLeaderEntry[]: Top 5 ranked rows for this stat.
        - `participant_id` integer: In `leaders`, the same team participant ID space `markets[].participants[].id` and `progress.entries[]` use. In `player_leaders`, the normalized player ID space player-prop market participants use, a different space from the team IDs.
        - `name` string
        - `value` number: The stat's value for this participant, in the stat's native unit.
        - `rank` integer: 1-based rank within this stat's top 5. Ascending stats (e.g. ERA) rank the MINIMUM value as 1.
    - `player_leaders` FuturesLeaderStat[]: Optional PLAYER-grain season-stats leaderboard: the same `{stat, stat_id, season_year, entries[]}` shape as `leaders`, but league-wide rather than competition-scoped (player season stats carry no team linkage) and keyed on the player ID space. Curated today for NFL, NCAAF, NBA, WNBA, NCAAB, MLB, and NHL; omitted entirely when the sport has no curated player-stat set or no rows exist yet.
      - `stat` string: House display name (never an upstream stat's raw field name).
      - `stat_id` integer: Internal stat identifier, exposed the same way `market_id` is elsewhere.
      - `season_year` integer: The most recent season with data for this stat, derived per request (never hardcoded).
      - `entries` FuturesLeaderEntry[]: Top 5 ranked rows for this stat.
        - `participant_id` integer: In `leaders`, the same team participant ID space `markets[].participants[].id` and `progress.entries[]` use. In `player_leaders`, the normalized player ID space player-prop market participants use, a different space from the team IDs.
        - `name` string
        - `value` number: The stat's value for this participant, in the stat's native unit.
        - `rank` integer: 1-based rank within this stat's top 5. Ascending stats (e.g. ERA) rank the MINIMUM value as 1.

## Other responses

- `400`: Invalid parameter
- `403`: Plan does not include futures markets
- `404`: Unknown event ID, event under a different sport, or a non-competition (game) event

## Changes

- **2026-09-08** `8d16611813bf`: 1 breaking
  - response property `meta/delta_last_id` list-of-types was widened by adding types `integer` to media type `application/json` of response `200`
- **2026-08-28** `30772119de1a`: 3 info
  - added the optional property `meta/count` to the response with the `200` status
  - added the optional property `meta/has_more` to the response with the `200` status
  - added the optional property `meta/total` to the response with the `200` status
- **2026-08-13** `5aa0aa5c5f66`: 1 info
  - added the optional property `events/items/allOf[#/components/schemas/FuturesEvent]/markets/items/participants/items/lines/items/prices/additionalProperties/liquidity_usd` to the response with the `200` status
- **2026-08-09** `6122c314b11a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/therundown/apis/therundown-sports-api/changes/api/v2/sports/:sportID/futures/:eventID/get.md)

---

[API](https://skmtc.dev/therundown/apis/therundown-sports-api.md) - [All operations](https://skmtc.dev/therundown/apis/therundown-sports-api/llms.txt) - [OpenAPI document](https://skmtc.dev/therundown/apis/therundown-sports-api/revisions/b1735c57a340?raw)
