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_TEAM—idis the normalized team ID. It is stable across seasons and endpoints, and matchesevent.teams[].team_id. Fetch the full team atGET /api/v2/teams/{team_id}.TYPE_PLAYER—idis the player ID. Fetch the full player (team, names, position) atGET /api/v2/players/{player_id}.TYPE_RESULT—idis a small outcome index (e.g.0/1for Over/Under) and is not a team or player resource key.
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, thevalue 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
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.