Skip to main content
The V2 API organizes sports data in a nested hierarchy. Understanding this structure is essential for parsing event responses, building odds screens, and processing delta updates.

Hierarchy Overview

Event Object

Each event represents a single game or match. Events are the top-level objects returned by /api/v2/sports/{sportID}/events/{date}.
For V2 REST endpoints and WebSocket filters, pass the event_id value returned in event payloads. Do not substitute event_uuid.

Score Object

Treat score as best-effort live feed data. Fields such as venue_name, venue_location, broadcast, display_clock, and the period arrays may be empty strings, empty arrays, or 0 until the upstream source provides them. Use updated_at to judge freshness.

Team Object

Market Object

Each market represents a type of bet (moneyline, spread, total, player prop, etc.). Markets are nested inside events.

Participant Object

Participants are the entities you can bet on within a market — teams, players, or result types (Over/Under).
id is the stable, joinable identifier — join on id, not name. What id points to depends on type:
  • TYPE_TEAMid is the normalized team ID. It is stable across seasons and endpoints, and matches event.teams[].team_id. Fetch the full team at GET /api/v2/teams/{team_id}.
  • TYPE_PLAYERid is the player ID. Fetch the full player (team, names, position) at GET /api/v2/players/{player_id}.
  • TYPE_RESULTid is a small outcome index (e.g. 0/1 for Over/Under) and is not a team or player resource key.
Because every distinct team and player has a distinct id, joining on id resolves shared-name collisions that joining on name cannot. To look up an id from a name once, use the roster at GET /api/v2/teams/{team_id}/players or the team list at GET /api/v2/sports/{sportID}/teams.

Line Object

A line represents a specific betting line for a participant. For spreads and totals, the value contains the line number. For moneylines, value is an empty string.
line_value_is_participant tells you where the meaningful selection detail lives. When it is true, the participant carries the selection and the line value may be a placeholder or label. When it is false, display the line value when present; it may be a number, threshold, method, round, or other outcome qualifier.

Price Object

A price is the odds offered by a single sportsbook for a specific line. Fields that appear in delta/history responses: Fields present only for prediction-market exchanges (Kalshi, Polymarket):
liquidity_usd is omitted entirely — never null, never a fabricated 0 — for every traditional sportsbook price, and whenever a current reading isn’t available. Treat a missing field as “unknown,” not as zero liquidity. See What is liquidity_usd on Kalshi and Polymarket prices? in the FAQ for what the number means on each exchange, how fresh it is, and why it isn’t on every price.

Traversing the Data

Reading a moneyline price

Gives you the DraftKings (affiliate 19) moneyline price for the first participant (away team).

Reading a spread value and price

Iterating all prices for an event

Delta Responses

Delta endpoints return a different shape. Instead of the nested event → market → participant → line → price hierarchy, they return flat change records: Use the event_id, market_id, participant_id, and affiliate_id to locate the correct entry in your local cache and replace the price. See the Efficient Polling guide for the full update pattern.