Skip to main content
TheRundown V2 API uses a market-based data model that is more flexible and extensible than V1’s flat line structure. This guide covers the key differences and provides a mapping to help you migrate.

Important Notes Before You Start

V1 only: Use teams_normalized, not teams. V1 event responses contain both a teams array and a teams_normalized array. The teams array uses internal book-specific IDs that are inconsistent across sportsbooks and seasons. Always use teams_normalized in V1 — these are canonical, stable team IDs that work across all endpoints. In V2, the teams array already uses normalized IDs, so you can use event["teams"] directly.
The V2 delta endpoint is a V1 feature. Despite living at /api/v2/delta and /api/v2/markets/delta, these are currently the only V2-path endpoints available and function as upgraded versions of the V1 delta. They return V2-formatted market data but are accessible to V1 API plans. The rest of the V2 API (events, markets, teams, players, stats) requires a V2 subscription.

Data Model: Lines vs. Markets

The fundamental change in V2 is how odds data is structured.

V1: Flat Lines Model

In V1, each event contains a lines object keyed by affiliate_id. Each affiliate entry has separate moneyline, spread, and total objects.

V2: Markets Model

In V2, each event contains a markets array. Each market has participants with lines and prices organized by sportsbook.

Key Structural Differences

Period Data

V1: line_periods

V1 uses a nested line_periods object for half/quarter data:

V2: period_id

V2 includes period data as separate market entries distinguished by period_id:
See Period IDs for the complete list of period identifiers.

Delta Endpoints

There are four delta endpoints available. The V2-path delta endpoints (/api/v2/delta and /api/v2/markets/delta) are available to all API plans — they were built as upgrades to the V1 delta and happen to live under the /v2/ path. The V2 market delta is the most efficient option — it returns individual price changes rather than entire event objects, significantly reducing bandwidth.

Delta Polling Pattern

  1. Bootstrap the cursor: Fetch a /api/v2/sports/{id}/events/{date} snapshot and read its integer meta.delta_last_id — this is the cursor for markets/delta. (Don’t bootstrap with last_id=0; a cursor too far behind the head is rejected.)
  2. Store the cursor: Each markets/delta response returns its own integer meta.delta_last_id — save it for the next poll
  3. Subsequent polls: Pass the stored cursor to get only the price changes since your last poll
  4. Replace, don’t merge: Each delta contains the full updated object — replace your cached version entirely
/api/v2/markets/delta (price changes) and /api/v2/delta (full event-object changes) use different cursors: an integer for markets delta, an ordered UUID for event delta. The integer meta.delta_last_id from the events snapshot bootstraps markets/delta only — /api/v2/delta rejects it. For odds polling, use markets/delta.

WebSocket Endpoints

V2 has dedicated WebSocket endpoints for different data types, while V1 uses a single endpoint. V2 WebSockets support more granular filtering (by market_ids, event_ids, affiliate_ids).

Endpoint Mapping Table

Use this table to find the V2 equivalent of each V1 endpoint.

Migration Code Example

Here is a side-by-side comparison of extracting odds data in V1 vs. V2.

V2 Advantages

V2 supports player props (points, rebounds, assists, combos), team totals, and other market types that V1 cannot represent. New markets are added as new market IDs without API changes.
V2 returns all available lines (main and alternates) with an is_main flag to distinguish the primary line. Use main_line=true to filter to main lines only.
V2 delta and WebSocket endpoints deliver market-level updates rather than full event objects, reducing bandwidth and processing overhead.
V2 adds price history and opening lines endpoints that are not available in V1.

Common Gotchas

The 0.0001 sentinel value

A price of 0.0001 means the sportsbook has taken that line off the board — it is not an error. Display it as “Off Board” or “N/A” and never use it in calculations. See Sentinel Values for details.

V1 team IDs are unreliable

V1 events contain both teams and teams_normalized arrays. The teams array uses internal book-specific IDs that vary by sportsbook and can change between seasons. Always use teams_normalized for stable, canonical team identifiers. In V2, the teams array already uses normalized IDs.

Null vs. empty vs. zero

The API may return null, empty strings, empty arrays, or 0 depending on the field and state. Your parsing code should handle all of these:
  • A missing score object means the game hasn’t started
  • An empty markets array means no odds are available yet
  • A 0 value for game_clock can mean the period hasn’t started or has ended — check event_status for context

line_value_is_participant

This flag on market definitions tells you how to interpret the value field on lines:
  • true — the participant carries the selection. The line value may be a placeholder such as "0" or a label.
  • false — the line value is meaningful and should be displayed when present. It may be a number, player stat threshold, method, round, or other outcome qualifier.

Next Steps

Getting Live Odds

Start using V2 market data

Data Model

V2 hierarchy: events, markets, lines, and prices

Player Props

New in V2: player prop markets

WebSocket Streaming

V2 WebSocket endpoints

FAQ

Common questions about the API

Market IDs

Complete list of V2 market IDs