ShotTracker Developer

Unparalleled data set + realtime API = future of sports. Build with live tracking, stats, and broadcast-ready endpoints.

Event API

Basketball API — Data and Field Reference

Field definitions and example payloads from the ShotTracker Event API (basketball). Use this when parsing responses or building integrations.

Box score stats

The system emits box score stats under these abbreviations. Stats are paired together to represent the most current values for the given player.

Stat nameDescription
FGAfield goal attempt
FGfield goal
FGA33 point field goal attempt
FG33 point field goal
FGA22 point field goal attempt
FG22 point field goal
FTAfree throw attempt
FTfree throw
PTSpoints
ASTassist
TOturnover
STLsteal
REBrebound
OFFENSIVE_REBoffensive rebound; typically paired with REB
DEFENSIVE_REBdefensive rebound; typically paired with REB
DISTdistance traveled in cm
FLfoul
BLKblock
TEAM_SCOREcurrent team score for the given team_id; only for scoring stat in games
OPPOSING_TEAM_SCOREcurrent opposing team score; only for scoring stat in games

Stats classification values

Each stats response includes a classification field describing what the stat values represent (e.g. make, miss, deleted, updated).

ValueDescription
FREE_THROW_MISSMissed free throw
FREE_THROW_MAKEMade free throw
TWO_POINT_MISSMissed field goal
TWO_POINT_MAKEMade field goal
THREE_POINT_MISSMissed 3 point field goal
THREE_POINT_MAKEMade 3 point field goal
ASSISTAssist
TURNOVERTurnover
STEALSteal
REBOUNDRebound
OFFENSIVE_REBOUNDOffensive rebound
DEFENSIVE_REBOUNDDefensive rebound
DISTANCEDistance traveled
DELETED_TWO_POINT_MAKEDeleted made field goal
UPDATED_TWO_POINT_MAKE_TO_MISSUpdated field goal from make to miss

Shot attributes

Shots can have the following attributes (used in shot data).

AttributeDescription
CASCatch and shoot
OTDOff the dribble
GUARDEDGuarded shot
UNGUARDEDUnguarded shot
CLEANMade shot without touching the rim
DUNKDunk
LAYUPLayup
JUMPSHOTJump shot
FADEAWAYFade away
HOOKSHOTHook shot
STEPBACKJUMPSHOTStepback jump shot
PULLUPJUMPSHOTPullup jump shot

Example payloads (live / websocket)

Stats (live / websocket)

Box score stats update. Values reflect the most current stat values for the player.

{"type":"stats","data":{"occurred_at":1500571319432,"team_id":461,"player_id":2623,"stats":{"FGA":15.0,"FG":8.0,"PTS":17.0},"classification":"TWO_POINT_MAKE","version":1941}}

Fields

  • typeAlways "stats" for this payload.
  • data.occurred_at(number)Epoch timestamp in milliseconds when the stat occurred.
  • data.team_id(number)ShotTracker team ID.
  • data.player_id(number)Player ID.
  • data.stats(object)Key-value of stat abbreviation to current value (e.g. FGA, FG, PTS).
  • data.classification(string)What the stat change represents (e.g. TWO_POINT_MAKE, DELETED_TWO_POINT_MAKE).
  • data.version(number)Version number for this stat update.

Shot (live / websocket)

Location data for a made or missed shot, including ShotTracker zones. All xy data is in mm.

{"type":"shot","data":{"occurred_at":1500571319432,"team_id":461,"player_id":2623,"is_make":true,"is_3point":false,"zone":1,"hoop_player_x":685,"hoop_player_y":-475,"status":"RECORDED"}}

Fields

  • typeAlways "shot" for this payload.
  • data.occurred_at(number)Epoch timestamp in milliseconds.
  • data.team_id(number)Team ID.
  • data.player_id(number)Player ID.
  • data.is_make(boolean)True if the shot was made.
  • data.is_3point(boolean)True if a 3-point attempt.
  • data.zone(number)ShotTracker zone ID (see zone maps in docs).
  • data.hoop_player_x(number)X position in mm (hoop-relative).
  • data.hoop_player_y(number)Y position in mm (hoop-relative).
  • data.status(string)e.g. RECORDED.

Location (live / websocket)

Plotable xyz data for a player or the ball. Type denotes sensor (PLAYER or BALL). xyz in mm; speed in m/s; dist in km.

{"type":"location","data":{"occurred_at":1500571321532,"type":"PLAYER","id":2942,"x":2314,"y":-8635,"z":69,"speed":0.1,"dist":1.3}}

Fields

  • typeAlways "location" for this payload.
  • data.occurred_at(number)Epoch timestamp in milliseconds.
  • data.type(string)"PLAYER" or "BALL".
  • data.id(number)For PLAYER: player list ID from subscription; for BALL: ball sensor ID.
  • data.x(number)X position in mm.
  • data.y(number)Y position in mm.
  • data.z(number)Z position in mm.
  • data.speed(number)Current movement speed in m/s.
  • data.dist(number)Total distance traveled in km (players only).

Common response shapes

Events list (e.g. GET /v1/data/teams/{team_id}/events)

  • events(array)List of practice and/or game events.
  • events[].id(string)Event UUID.
  • events[].name(string)Event name (e.g. "TeamAppTeam vs TestTeamAlpha").
  • events[].results(array)Game rounds or drill results with _stats, _shots, _possessions links.
  • events[].is_practice_event(boolean)True if practice.
  • events[].is_game_event(boolean)True if game.
  • events[].started_at(number)Epoch ms when event started.
  • events[].ended_at(number)Epoch ms when event ended.
  • events[].game_type(string)HALF or QUARTER for games.
  • events[]._self(string)Self link for the event.
  • events[].totals(object)Links to full game stats (e.g. _stats_details).
  • events[].game_attributes(object)home_team_id, away_team_id, home_team_name, away_team_name.

Subscription token response

  • live_data_source(string)e.g. "SHOTTRACKER".
  • token(string)Subscription token for websocket or API access.
  • token_data_types(array)["STATS","SHOTS","LOCATIONS"].
  • home_team_id(number)Home Team ID.
  • teams(array)Team list with id, name, players.
  • teams[].id(number)Team ID.
  • teams[].name(string)Team name.
  • teams[].players(array)Players with id, first_name, last_name, jersey_number, position, is_active, reference_id.
  • _stats(string)URL to stats endpoint (or null).
  • _shots(string)URL to shots endpoint (or null).
  • event_totals(object)e.g. team_scores.

Error response (4xx/5xx)

  • status(number)HTTP-like status (e.g. 422, 403, 404, 500).
  • message(string)Human-readable error message.
  • shottrackerRequestId(string)Request ID for support.