Skip to main content

Overview

The stats endpoints provide statistical data at multiple levels: a reference catalog of all stat definitions, team-level game stats per event, and player-level game stats per event. Season-level stats are available through the Teams endpoints. For supported live games, changed box-score rows also stream over the V2 WebSocket.

Live Game Stats over WebSocket

On Ultra plans and higher, subscribe to the stats channel on the multiplexed endpoint:
For supported live games, team and player changes stream at play latency — typically within a few seconds of the corresponding play-by-play update. Like all live game data (plays included), stats trail the on-field action by roughly 15–20 seconds, in line with the typical broadcast delay. The frames are row-level deltas, not full boxes: each team_stats[].stats or player_stats[].stats entry contains one changed value and its stat dictionary. Keep value as a string and upsert by owner ID plus stat_id. Because stats has no snapshot or replay source, use this sequence on first connect, reconnect (including a buffer_overflow:reconnect_and_catchup close), or a detected gap:
  1. Subscribe and buffer incoming game_stats frames.
  2. Fetch the current team box from GET /api/v2/events/{eventID}/stats and player box from GET /api/v2/events/{eventID}/players/stats.
  3. Replace your local baseline, then merge the buffered deltas in order.
  4. Continue merging live deltas. A zero-row frame with complete: true is the terminal completion marker; mark the cached box complete and treat repeats as idempotent. A zero-row frame without complete: true is an invalidation fallback; refetch both REST resources.
The combined live channel includes the same game_stats frames alongside scores and plays. Each changed nested stat row costs one stats data point; a zero-row completion marker or invalidation fallback costs one. See the WebSocket reference for the full payload, filters, completion and fallback shapes, and recovery rules.

Endpoints

Returns the catalog of all available stat definitions, including IDs, names, and associated sports. Use this to discover which stats_ids are valid for filtering.

Parameters

Example Response

Returns team-level statistics for a specific event (game). Includes box score data like points, rebounds, assists, etc.

Parameters

Example Response

Stats are only available for events that have started or completed. Requesting stats for a future event returns an empty array. The nested team identity includes canonical is_away and is_home flags.
Returns individual player statistics for a specific event. Includes per-player box score data.

Parameters

Example Response

Player REST rows omit IDs already represented by the group: use player.id for the owner, meta.event_id for the event, and stat.id for the stat key. Live WebSocket rows additionally carry explicit player_id and stat_id fields.
MLB game-stat definitions include startingPitcher and the sparse positionPlayerPitching flag. Query GET /api/v2/stats?sport_id=3 to discover their current IDs; do not hard-code IDs.

Stats at Different Levels