Skip to main content

Overview

The V2 events endpoints return events with a market-based data model where odds are organized by market (moneyline, spread, total, player props, etc.), each containing participants with lines and prices per sportsbook.
The market_ids parameter defaults to 1,2,3 (Moneyline, Spread, Total) if not specified. To get player props or other markets, you must explicitly request them.
For a detailed breakdown of how events, markets, participants, lines, and prices relate, see the Data Model. For delta-based polling strategies, see the Efficient Polling guide.
For V2 endpoints, use the event_id returned in event payloads as the canonical identifier for path parameters, WebSocket filters, and local cache keys. The payload’s event_uuid field is compatibility-only and may differ from event_id.

Key Parameters

These parameters are shared across most event endpoints:

Endpoints

The primary endpoint for building odds screens. Returns all events for a sport on a given date, with full market/odds data.

Path Parameters

Example Response

Returns a single event with full market data. Use when you already have an event ID and need its current odds.

Path Parameters

Pass event_id, not event_uuid, to GET /api/v2/events/{eventID} and other per-event V2 endpoints.

Example Response

participant.id is the stable join key — join on id, not name. What id points to depends on participant.type:
  • TYPE_TEAMid is the normalized team ID, stable across seasons, and matches event.teams[].team_id. Full record at GET /api/v2/teams/{team_id}.
  • TYPE_PLAYERid is the player ID. Full record (team, names, position) at GET /api/v2/players/{player_id}.
  • TYPE_RESULTid is a small outcome index (e.g. 0/1 for Over/Under), not a team or player resource key.
Joining on id resolves shared-name collisions. To filter the response server-side, pass participant_ids (comma-separated, max 99) with participant_type set to TYPE_TEAM, TYPE_PLAYER, or TYPE_RESULT. To resolve a name to an id once, use GET /api/v2/teams/{team_id}/players or GET /api/v2/sports/{sportID}/teams. See the Participant object reference for full definitions.
Live score metadata is best-effort. Fields such as venue_name and venue_location may be empty strings even when event_status is STATUS_IN_PROGRESS.
Returns the earliest recorded market prices (opening lines) for an event. Useful for comparing opening vs current odds.

Example Response

The response uses the same event structure as GET /events/{eventID}, with prices reflecting the first recorded lines from each sportsbook.
Returns the final market prices recorded before event start (closing lines). Available only after an event has begun or completed.

Example Response

Same event structure as openers, with prices reflecting the final lines recorded before event start.
Returns the best moneyline, spread, and total across all tracked sportsbooks for an event. Compares prices across books and returns the most favorable line for each side.

Additional Parameters

Example Response

Returns events that have changed since your last request, identified by a cursor (last_id). Use this for efficient polling instead of re-fetching all events.

Parameters

Each delta payload contains the full event update as a JSON string. Parse the json field within each delta item to get the event data.

Example Response

Each delta entry’s data field is a serialized JSON string containing the full event update. Parse it to get the event object.

Opening & Closing Lines by Sport and Date

In addition to per-event openers/closing, you can fetch opening and closing lines for all events in a sport on a date:

Live Game State & Play-by-Play

Live game state and play-by-play require an Ultra plan or higher. Keys on lower tiers do not receive the live_game_state field, and requests to the plays endpoint return a 403.
For entitled keys, live event payloads embed a live_game_state snapshot with the current period, the last play, and sport-specific detail:
  • MLB — balls, strikes, outs, base runners, current batter and pitcher
  • NFL / NCAAF — possession, down & distance, yard line, red-zone flag, timeouts
  • NBA / WNBA / NCAAB — possession, timeouts, bonus status
  • NHL — possession, skater strength, power-play team, shots on goal, goalie-pulled flags
  • Soccer — period, half indicator, and last play
The full play timeline is available at GET /api/v2/events/{eventID}/plays — one entry per play with description, period, game clock, running score, and (as attribution rolls out) the players involved. Responses return up to 500 plays per request; page backwards through long games with before_sequence. For streaming delivery, subscribe to the plays channel on the V2 WebSocket. Coverage spans MLB, NBA (including Summer League), WNBA, NCAAB, NFL, NCAAF, NHL, and soccer, with per-play player attribution rolling out progressively by sport.

Off-the-Board Sentinel

A price value of 0.0001 means the line is “off the board” — the sportsbook has temporarily removed pricing (e.g., pending injury news). This is not an error. Display it as “OTB” or “N/A” in your UI.