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
GET /api/v2/sports/{sportID}/events/{date} — Events by sport and date
GET /api/v2/sports/{sportID}/events/{date} — Events by sport and date
GET /api/v2/events/{eventID} — Single event
GET /api/v2/events/{eventID} — Single event
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_TEAM—idis the normalized team ID, stable across seasons, and matchesevent.teams[].team_id. Full record atGET /api/v2/teams/{team_id}.TYPE_PLAYER—idis the player ID. Full record (team, names, position) atGET /api/v2/players/{player_id}.TYPE_RESULT—idis a small outcome index (e.g.0/1for Over/Under), not a team or player resource key.
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.GET /api/v2/events/{eventID}/openers — Opening prices
GET /api/v2/events/{eventID}/openers — Opening prices
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 asGET /events/{eventID}, with prices reflecting the first recorded lines from each sportsbook.GET /api/v2/events/{eventID}/closing — Closing prices
GET /api/v2/events/{eventID}/closing — Closing prices
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.GET /api/v2/events/{eventID}/best-line — Best available line
GET /api/v2/events/{eventID}/best-line — Best available line
GET /api/v2/delta — Event delta feed
GET /api/v2/delta — Event delta feed
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
Example Response
Each delta entry’sdata 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.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
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.