ShotTracker Event API Overview

The ShotTracker Event API consists of REST endpoints and websockets to deliver data in realtime. The API reference is broken down into the following sections:

Use Cases

Access to ShotTracker data can drive applications and solutions that do the following:

  • Display a leaderboard for team and player stats over the course of a season or a real time event.

  • Analyze stats and shots to reflect trends over the course of a season or a real time event.

  • Show live player movement in applications, broadcast or augmented reality solutions.

  • Analyze team and player movement for trends.

Authentication

All requests to the REST API must be signed using the ShotTracker issued username and secret. A ShotTracker API username/secret pair contains specific privileges; be sure to keep both secured.

Signing a request is done using HMAC. The following headers are needed for signing and required to be sent with each request.

Header Name Description
date Standard UTC date; be sure to keep the current time as the clock must not skew more than 5 minutes
host The servers host
Authorization The full hmac value with signature; see example below

Below is a nodejs example illustrating the data required and how to formulate the data into the signing stream.

var crypto = require("crypto");

var userName = 'ShotTracker supplied user name here';
var secret = 'ShotTracker supplied secret here';
var host = 'devapi-shottracker.ddsports.com';
var pathUriWithoutQueryString = '/v1/data/live/_search';
var method = 'GET';
var date = new Date().toUTCString();

var requestLine = method + ' ' + pathUriWithoutQueryString + ' HTTP/1.1';
var stringToSign = 'date: ' + date.trim() + '\n'
                 + 'host: ' + host + '\n'
                 + requestLine;
var encodedSignature = crypto.createHmac("sha1", secret).update(stringToSign).digest("base64");
var hmacAuth = 'hmac username="' + userName + '",algorithm="hmac-sha1",headers="date host request-line",signature="' + encodedSignature + '"';

console.log('date: ' + date);
console.log('Authorization: ' + hmacAuth);

Note Only the API (REST Resources) require a signed request. Authentication to the websocket is done by only providing the acquired subscription token.

Environment Endpoints

Development/ShotTracker Lab

Production

Data Overview

ShotTracker is a sensor based system that captures team and player stats in real time. The data that ShotTracker captures is used to build box scores, plot shots and show player and ball movement. ShotTracker data is broken down into 3 main categories, box score and possession stats, shots and locations.

Box Score Stats

The system will emit all box score stats under the following abbreviations:

Stat Name Description
FGA field goal attempt
FG field goal
FGA3 3 point field goal attempt
FG3 3 point field goal
FGA2 2 point field goal attempt
FG2 2 point field goal
FGA_CAS catch and shoot field goal attempt
FG_CAS catch and shoot field goal
FGA3_CAS catch and shoot 3 point field goal attempt
FG3_CAS catch and shoot 3 point field goal
FGA2_CAS catch and shoot 2 point field goal attempt
FG2_CAS catch and shoot 2 point field goal
FGA_OTD off the dribble field goal attempt
FG_OTD off the dribble field goal
FGA3_OTD off the dribble 3 point field goal attempt
FG3_OTD off the dribble 3 point field goal
FGA2_OTD off the dribble 2 point field goal attempt
FG2_OTD off the dribble 2 point field goal
FGA_GUARDED guarded field goal attempt
FG_GUARDED guarded field goal
FGA3_GUARDED guarded 3 point field goal attempt
FG3_GUARDED guarded 3 point field goal
FGA2_GUARDED guarded 2 point field goal attempt
FG2_GUARDED guarded 2 point field goal
FGA_UNGUARDED unguarded field goal attempt
FG_UNGUARDED unguarded field goal
FGA3_UNGUARDED unguarded 3 point field goal attempt
FG3_UNGUARDED unguarded 3 point field goal
FGA2_UNGUARDED unguarded 2 point field goal attempt
FG2_UNGUARDED unguarded 2 point field goal
FTA free throw attempt
FT free throw
PTS points
AST assist
TO turnover
STL steal
REB rebound
OFFENSIVE_REB offensive rebound; typically paired with a REB to give more context
DEFENSIVE_REB defensive rebound; typically paired with a REB to give more context
DIST distance traveled in cm
FL foul
BLK block
TEAM_SCORE the current team score for the given team_id; only included for scoring stat in games
OPPOSING_TEAM_SCORE the current opposing team score from the team_id; only included for scoring stat in games

In most cases, the stats will be paired together to represent the most current value(s) on the box score for the given player. Stats data will be paired together in single response; the example JSON snippet below represents a made field goal attempt:

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

The values in the above example reflect the most current stat values that would be reflective on the players box score.

Stats can also change with a manual correction. This means the example above would change to the following if the shot is deleted:

{“type”:“stats”,“data”:{“occurred_at”:1500571319432,“team_id”:461,“player_id”:2623,“stats”:{“FGA”:14.0,“FG”:7.0,“PTS”:15.0},“classification”:“DELETED_TWO_POINT_MAKE”,“version”:1942}}

Both adding and deleting of the field goal looks the same in the paired together stats response. As a result a classification field is added to each stats response to give more context around what the collected stats values represent. The following are the general the classification values but do not represent the full list. Stats can be custom made by teams which can also be updatable. Some non-shooting stats are update from one type to another which can also be reflected in the classification.

Classification Value Description
FREE_THROW_MISS Missed free throw
FREE_THROW_MAKE Made free throw
TWO_POINT_MISS Missed field goal
TWO_POINT_MAKE Made field goal
THREE_POINT_MISS Missed 3 point field goal
THREE_POINT_MAKE Made 3 point field goal
ASSIST Assist
TURNOVER Turnover
STEAL Steal
REBOUND Rebound
OFFENSIVE_REBOUND Offensive rebound
DEFENSIVE_REBOUND Defensive rebound
DISTANCE Distance traveled
DELETED_FREE_THROW_MISS Deleted missed free throw
DELETED_FREE_THROW_MAKE Deleted made free throw
UPDATED_FREE_THROW_MAKE_TO_MISS Updated free throw make to miss
UPDATED_FREE_THROW_MISS_TO_MAKE Updated free throw miss to make
DELETED_TWO_POINT_MISS Deleted missed field goal
DELETED_TWO_POINT_MAKE Deleted made field goal
UPDATED_TWO_POINT_MAKE_TO_MISS Updated field goal from make to miss
UPDATED_TWO_POINT_MISS_TO_MAKE Updated field goal from miss to make
DELETED_THREE_POINT_MISS Deleted missed 3 point field goal
DELETED_THREE_POINT_MAKE Deleted made 3 point field goal
UPDATED_THREE_POINT_MAKE_TO_MISS Updated 3 point field goal from make to miss
UPDATED_THREE_POINT_MISS_TO_MAKE Updated 3 point field goal from miss to make
DELETED_ASSIST Deleted assist
DELETED_TURNOVER Deleted turnover
DELETED_STEAL Deleted steal
DELETED_REBOUND Deleted rebound
DELETED_OFFENSIVE_REBOUND Deleted offensive rebound
DELETED_DEFENSIVE_REBOUND Deleted defensive rebound

Possession Stats

Possession stats are grouped together into the following ball movement groups:

Possession Group Abbreviation Description
HC half court
PT0_BR0 0 paint touch; 0 ball reversals
PT1_BR0 1 paint touch; 0 ball reversals
PT0_BR1 0 paint touch; 1 ball reversal
PT0_BR2 0 paint touch; 2 ball reversals
PT1_BR1 1 paint touch; 1 ball reversal
PT1_BR2 1 paint touch; 2 ball reversals
TRANSITION transition
PASS0_2 0-2 passes
PASS3_5 3-5 passes
PASS6 6+ passes
BS0 0 ball screens
BS_ALL all ball screens
BS1 1 ball screen
BS2 2 ball screens
BS3 3+ ball screens
BS_LW ball screen possessions on the left wing
BS_MW ball screen possessions on the middle wing
BS_RW ball screen possessions on the right wing
BS_PNP pick and pop ball screen possessions
BS_PNR pick and roll ball screen possessions
BS_SS screened shot ball screen possessions
BS_HANDOFF handoff ball screen possessions
BS_DRAG drag ball screen possessions
BS_SLIP slip ball screen possessions
BS_SHORT_ROLL short roll ball screen possessions
BS_REJECT reject ball screen possessions
BS_RE_SCREEN re-screen ball screen possessions
BS_STAY stay ball screen possessions
BS_STEP_UP step-up ball screen possessions
BS_SNAKE snake ball screen possessions
BS_SPLIT split ball screen possessions
BS_OTHER other ball screen possessions

Each group could contain the following calculated stat summaries:

Possession Summary Stat Name Description
POSS number of possessions
POSS_PCT percent of possessions
PTS points
PPP points per possession
2PTM 2 point makes
2PTA 2 point attempts
2PT_PCT 2 point percent
3PTM 3 point makes
3PTA 3 point attempts
3PT_PCT 3 point percent
TO turnovers
TO_PCT turnover percent
EFG effective field goal

Shots

Shots are location data for each made and missed shot including the ShotTracker zones. Below is an example shot:

{“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”}}

See the shot zones layouts below.

Note: All xy data is returned as mm.

Shots can have the following attributes.

Shot Attribute Name Description
CAS Catch and Shoot
OTD Off the Dribble
GUARDED Guarded shot
UNGUARDED Un-guarded shot
CLEAN Made shot without touching the rim
DIRTY Made shot that touched the rim
BANKSHOT Made shot that hit the backboard
DUNK Dunk
LAYUP Layup
FADEAWAY Fade away
TIPIN Tip in
JUMPSHOT Jump shot
ALLEYOOP Allyoop
DRIVINGLAYUP Driving layup
HOOKSHOT Hook shot
FLOATINGJUMPSHOT Floating jump shot
STEPBACKJUMPSHOT Stepback jump shot
PULLUPJUMPSHOT Pullup jump shot
TURNAROUNDJUMPSHOT Turnaround jump shot
WRONGBASKET Wrong basket
ONEOFONE Free throw 1 of 1
ONEOFTWO Free throw 1 of 2
ONEOFTHREE Free throw 1 of 3
TWOOFTWO Free throw 2 of 2
TWOOFTHREE Free throw 2 of 3
THREEOFTHREE Free throw 3 of 3
SIDESTEPJUMPSHOT Side step jump
DIRECTIONLEFT Shot left
DIRECTIONRIGHT Shot right
LITTLEOVERBIG Little man over big
EXPLOSIVERATING1 Explosive rating 1
EXPLOSIVERATING2 Explosive rating 2
EXPLOSIVERATING3 Explosive rating 3
SHOTALTERED Shot altered

Locations

The location data contains plotable xyz data for each player and ball on the court. Below are a few examples:

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

{“type”:“location”,“data”:{“occurred_at”:1500571321532,“type”:“BALL”,“id”:2147549498,“x”:-6039,“y”:-8833,“z”:1705,“speed”:0.1}}

The type denotes what sensor; either the player or ball. The id in the PLAYER event relates to the player list from the subscription request. The xyz reflects the current location of the sensor at the given occurred_at. Lastly, the speed (m/s) and distance (km) reflect the current movement speed and total distance traveled by the sensor.

Note: All xyz data is returned as mm.

Data Plotting Concepts

Locations XY Orientation

fullcourtxydirections

Zone Map Locations

Shots are assigned a zone number 1 - 14 that represents the specific location around the hoop the shot occurred. The map below shows the shot zones.

zonemap

Advanced Zone Map Locations

Shots are assigned an advanced zone number 1 - 23 that represents the specific location around the hoop the shot occurred. The map below shows the shot advanced zone.

advzonemap

Shot Chart Plotting

Shot data contains a hoop_player_x and hoop_player_y that represents the xy location of the shot from the hoop. Representing a shot from the hoop assumes that the positive y runs from the hoop to the center of the court and positive x runs from the hoop to the right.

halfcourtxydirections

Team Events And Schedules

Search Team Events

Search Team Events
GET/v1/data/teams/{team_id}/events{?from,to,gamesonly}

The response will include both practice and/or game events. If the event is a game, additional fields are returned; game_type, is returned in the event node to indicate whether the game is halves (HALF) or quarters (QUARTER); and totals which will include links to the full game stats.

Example URI

GET /v1/data/teams/team_id/events?from=&to=&gamesonly=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

gamesonly
boolean (optional) 

If the field is present on the request only games will be returned

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "events": [
    {
      "id": "cf3ba789-06c4-11e8-bb65-0242286dfad2",
      "name": "TeamAppTeam vs TestTeamAlpha",
      "results": [
        {
          "id": "cf56d0aa-06c4-11e8-bb65-0242286dfad2",
          "name": null,
          "type": "GAME_ROUND",
          "started_at": 1517430299810,
          "ended_at": 1517431728868,
          "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/stats",
          "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/stats/details",
          "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/shots",
          "_locations": [
            "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=cf56d0aa-06c4-11e8-bb65-0242286dfad2&from=1517430299810&to=1517431728868"
          ],
          "_possessions": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/possessions",
          "_possessions_summary": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/possessions/summary"
        },
        {
          "id": "23d3344b-06c8-11e8-bb65-0242286dfad2",
          "name": null,
          "type": "GAME_ROUND",
          "started_at": 1517431730064,
          "ended_at": 1517431732978,
          "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/stats",
          "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/stats/details",
          "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/shots",
          "_locations": [
            "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=23d3344b-06c8-11e8-bb65-0242286dfad2&from=1517431730064&to=1517431732978"
          ],
          "_possessions": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/possessions",
          "_possessions_summary": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/possessions/summary"
        }
      ],
      "is_practice_event": false,
      "is_game_event": true,
      "started_at": 1517430299810,
      "ended_at": 1517431732978,
      "game_type": "HALF",
      "_self": "https://api-shottracker.ddsports.com/v1/data/teams/12345/games/cf3ba789-06c4-11e8-bb65-0242286dfad2",
      "totals": {
        "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/games/cf3ba789-06c4-11e8-bb65-0242286dfad2/stats/details"
      },
      "game_attributes": {
        "home_team_id": 1,
        "home_team_name": "TestTeamAlpha",
        "away_team_id": 2,
        "away_team_name": "TeamAppTeam"
      }
    }
  ]
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Practice Subscription Token

Practice Subscription Token
GET/v1/data/live/{live_id}/_subscribe{?dt}

The live_id indicates the lowest level of an event. For a practice the live_id is a drill and for a game it is the specific live period. For practices consumers can only subscribe to each drill and follow the practice using this endpoint. As drills change in the practice the consumer will receive marker messages for the next live_id to subscribe to.

Example URI

GET /v1/data/live/live_id/_subscribe?dt=
URI Parameters
HideShow
live_id
string (required) 

ID of the live practice session

dt
string (optional) 

Subscribe to a specific data type. More than one data type can be passed using the &dt= notation. Possible values for this field are STATS, SHOTS, or LOCATIONS.

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "live_data_source": "SHOTTRACKER",
  "token": "6141681d-df46-11e6-a818-f20e96351dc1",
  "token_data_types": [
    "STATS",
    "SHOTS",
    "LOCATIONS"
  ],
  "active_state": "LIVE",
  "active_type": "GAME_ROUND",
  "active_team_colors": {
    "teams": [
      {
        "id": 1,
        "color": "FFFF00"
      },
      {
        "id": 2,
        "color": "00FFFF"
      }
    ]
  },
  "active_name": "H1",
  "teams": [
    {
      "id": 461,
      "name": "TeamAppTeam",
      "logo_image_link": "<image link>",
      "gender": "MEN",
      "conference_name": "ACC",
      "league_name": "NCAA",
      "sport": "BASKETBALL",
      "reference_id": "938104592",
      "players": [
        {
          "id": 123,
          "first_name": "John",
          "last_name": "Doe",
          "display_name": "John Doe",
          "jersey_number": 1,
          "jersey_number_str": "1",
          "position": "center",
          "profile_image_link": "<image link>",
          "is_active": true,
          "reference_id": "42589513"
        }
      ]
    }
  ],
  "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/6141681d-df46-11e6-a818-f20e96351dc1/stats",
  "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/6141681d-df46-11e6-a818-f20e96351dc1/stats/details",
  "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/6141681d-df46-11e6-a818-f20e96351dc1/shots",
  "_possession": "https://api-shottracker.ddsports.com/v1/data/stats/6141681d-df46-11e6-a818-f20e96351dc1/possessions",
  "_possession_summary": "http://api-shottracker.ddsports.com/v1/data/stats/6141681d-df46-11e6-a818-f20e96351dc1/possessions/summary",
  "event_completed_results": [
    {
      "id": "a59e3734-101f-11e8-be3e-0242286dfad2",
      "started_at": 123456789,
      "ended_at": 234567890,
      "type": "GAME_ROUND",
      "name": null,
      "_stats": "http://api-shottracker.ddsports.com/v1/data/stats/a59e3734-101f-11e8-be3e-0242286dfad2/stats",
      "_stats_details": "http://api-shottracker.ddsports.com/v1/data/stats/a59e3734-101f-11e8-be3e-0242286dfad2/stats/details",
      "_shots": "http://api-shottracker.ddsports.com/v1/data/stats/a59e3734-101f-11e8-be3e-0242286dfad2/shots",
      "_possession": "http://api-shottracker.ddsports.com/v1/data/stats/a59e3734-101f-11e8-be3e-0242286dfad2/possessions",
      "_possession_summary": "http://api-shottracker.ddsports.com/v1/data/stats/a59e3734-101f-11e8-be3e-0242286dfad2/possessions/summary"
    }
  ],
  "event_totals": {
    "team_scores": [
      {
        "id": 1,
        "score": 0
      },
      {
        "id": 2,
        "score": 0
      }
    ]
  }
}
Response  400
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 400,
  "message": "The live id is no longer active",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to LOCATIONS|STATS|SHOTS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Game Schedule Matchup

Game Schedule Matchup
GET/v1/data/schedule/games/matchup{?from,to,team_id,reference,gender}

The matchup endpoint is a more advanced way to find games using either the ShotTracker team ids or other supported identification systems. The endpoint requires the reference and gender query parameters are given for context.

Example URI

GET /v1/data/schedule/games/matchup?from=&to=&team_id=&reference=&gender=
URI Parameters
HideShow
from
number (required) 

starting event scheduled timestamp; epoch UTC milliseconds

to
number (optional) 

ending event schedule timestamp; epoch UTC milliseconds

team_id
string (required) 

ID of the team; more than one team query parameter is supported to indicate both teams in the game

reference
string (required) 

establishes the team_id context used by reference supported consumers

gender
string (required) 

the gender of the teams indicated in the team query parameter; values are MEN or WOMEN

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "games": [
    {
      "event_id": "062a3726-3b0f-11eb-86c4-02420043683b",
      "facility_name": "ShotTracker Lab",
      "court_name": "main court",
      "location_id": "/6e4118d4-2e50-11e6-b4a4-deecc6e6f586/6e4118d4-2e50-11e6-b4a4-deecc6e6f581",
      "tournament": null,
      "tipoff_at": 1604052000000,
      "gender": "MEN",
      "status": "ACTIVE",
      "home_team_id": 481,
      "home_team_name": "ShotTrackerW",
      "home_team_reference_id": "938104592",
      "away_team_id": 493,
      "away_team_name": "BWB",
      "away_team_reference_id": "938104593",
      "officials_team_id": 0,
      "_results": "https://api-shottracker.ddsports.com/v1/data/games/cf3ba789-06c4-11e8-bb65-0242286dfad2",
      "reference_id": "938104592",
      "fan_engagement_enabled": false
    }
  ]
}

Game Schedule

Game Schedule
GET/v1/data/schedule/games{?type,from,to,team_id,location_id}

Example URI

GET /v1/data/schedule/games?type=&from=&to=&team_id=&location_id=
URI Parameters
HideShow
type
string (optional) 

games by type (one of BASKETBALL, FOOTBALL - default: BASKETBALL)

from
number (required) 

starting event scheduled timestamp; epoch UTC milliseconds

to
number (optional) 

ending event schedule timestamp; epoch UTC milliseconds; if not provided the search range starting from the ‘from’ parameter will default to 1 day

team_id
number (optional) 

ID of the team

location_id
string (optional) 

composite location ID that consists of the court ID and facility ID separated by @

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "games": [
    {
      "event_id": "062a3726-3b0f-11eb-86c4-02420043683b",
      "facility_name": "ShotTracker Lab",
      "court_name": "main court",
      "location_id": "6e4118d4-2e50-11e6-b4a4-deecc6e6f586@6e4118d4-2e50-11e6-b4a4-deecc6e6f581",
      "tournament": null,
      "tipoff_at": 1604052000000,
      "gender": "MEN",
      "status": "ACTIVE",
      "type": "BASKETBALL",
      "home_team_id": 481,
      "home_team_name": "ShotTrackerW",
      "home_team_reference_id": "938104592",
      "away_team_id": 493,
      "away_team_name": "BWB",
      "away_team_reference_id": "938104593",
      "officials_team_id": 0,
      "_results": "https://api-shottracker.ddsports.com/v1/data/games/cf3ba789-06c4-11e8-bb65-0242286dfad2",
      "reference_id": "938104592",
      "fan_engagement_enabled": false
    }
  ]
}

Update Season Game Schedule

Update Season Game Schedule
PUT/v1/data/schedule/games

Create/update a list of games

Example URI

PUT /v1/data/schedule/games
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "league": "LEAGUE_NAME",
  "games": [
    {
      "id": "abc-123",
      "home_team_id": "abc-123",
      "visitor_team_id": "abc-123",
      "home_team_name": "Team 1",
      "visitor_team_name": "Team 2",
      "gender": "MENS|WOMENS",
      "round_type": "QUARTER|HALF",
      "type": "BASKETBALL|FOOTBALL",
      "label": "Game 1",
      "scheduled_start_timestamp": 1570769231000,
      "season_type": "PRE|REG|POST",
      "week_number": 2
    }
  ]
}
Response  204
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Team or league not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Gamecast Subscription Token

Gamecast Subscription Token
GET/v1/data/schedule/games/{event_id}/_subscribe_gamecast

Used by the ShotTracker gamecast SDK to subscribe to a game.

Example URI

GET /v1/data/schedule/games/event_id/_subscribe_gamecast
URI Parameters
HideShow
event_id
string (required) 

ID of the event

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "live_data_source": "SHOTTRACKER",
  "token": "6141681d-df46-11e6-a818-f20e96351dc1",
  "token_data_types": [
    "STATS",
    "SHOTS",
    "LOCATIONS"
  ],
  "active_state": null,
  "active_type": null,
  "active_team_colors": null,
  "active_name": null,
  "teams": [
    {
      "id": 461,
      "name": "TeamAppTeam",
      "logo_image_link": "<image link>",
      "gender": "MEN",
      "conference_name": "ACC",
      "league_name": "NCAA",
      "sport": "BASKETBALL",
      "reference_id": "938104592",
      "players": [
        {
          "id": 123,
          "first_name": "John",
          "last_name": "Doe",
          "display_name": "John Doe",
          "jersey_number": 1,
          "jersey_number_str": "1",
          "position": "center",
          "profile_image_link": "<image link>",
          "is_active": true,
          "reference_id": "42589513"
        }
      ]
    }
  ],
  "_stats": null,
  "_stats_details": null,
  "_shots": null,
  "_possession": null,
  "_possession_summary": null,
  "event_totals": {
    "team_scores": []
  }
}
Response  400
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 400,
  "message": "The game is no longer active",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to LOCATIONS|STATS|SHOTS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Game Subscription Token

Game Subscription Token
GET/v1/data/schedule/games/{event_id}/_subscribe{?dt}

When a game is not yet live, it might be necessary to subscribe to the game. This endpoint allows a consumer to subscribe to a scheduled or an already active game with only the games event_id returned from the game scheduler.

Example URI

GET /v1/data/schedule/games/event_id/_subscribe?dt=
URI Parameters
HideShow
event_id
string (required) 

ID of the event

dt
string (optional) 

Subscribe to a specific data type. More than one data type can be passed using the &dt= notation. Possible values for this field are STATS, SHOTS, or LOCATIONS.

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "live_data_source": "SHOTTRACKER",
  "token": "6141681d-df46-11e6-a818-f20e96351dc1",
  "token_data_types": [
    "STATS",
    "SHOTS",
    "LOCATIONS"
  ],
  "active_state": null,
  "active_type": null,
  "active_team_colors": null,
  "active_name": null,
  "teams": [
    {
      "id": 461,
      "name": "TeamAppTeam",
      "logo_image_link": "<image link>",
      "gender": "MEN",
      "conference_name": "ACC",
      "league_name": "NCAA",
      "sport": "BASKETBALL",
      "reference_id": "938104592",
      "players": [
        {
          "id": 123,
          "first_name": "John",
          "last_name": "Doe",
          "display_name": "John Doe",
          "jersey_number": 1,
          "jersey_number_str": "1",
          "position": "center",
          "profile_image_link": "<image link>",
          "is_active": true,
          "reference_id": "42589513"
        }
      ]
    }
  ],
  "_stats": null,
  "_stats_details": null,
  "_shots": null,
  "_possession": null,
  "_possession_summary": null,
  "event_totals": {
    "team_scores": []
  }
}
Response  400
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 400,
  "message": "The game is no longer active",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to LOCATIONS|STATS|SHOTS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Practice Event

Practice Event
GET/v1/data/teams/{team_id}/practices/{event_id}

A self reference to a specific teams practice event.

Example URI

GET /v1/data/teams/team_id/practices/event_id
URI Parameters
HideShow
team_id
number (required) 

ID of the team

event_id
string (required) 

The specific event id for the practice

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": "cf3ba789-06c4-11e8-bb65-0242286dfad2",
  "name": "Team Practice",
  "results": [
    {
      "id": "cf56d0aa-06c4-11e8-bb65-0242286dfad2",
      "name": "Scrimmage Drill 1",
      "type": "SCRIMMAGE",
      "started_at": 1517430299810,
      "ended_at": 1517431728868,
      "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/stats",
      "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/stats/details",
      "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/shots",
      "_locations": [
        "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=cf56d0aa-06c4-11e8-bb65-0242286dfad2&from=1517430299810&to=1517431728868"
      ],
      "_possessions": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/possessions",
      "_possessions_summary": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/possessions/summary"
    },
    {
      "id": "23d3344b-06c8-11e8-bb65-0242286dfad2",
      "name": "Scrimmage Drill 2",
      "type": "SCRIMMAGE",
      "started_at": 1517431730064,
      "ended_at": 1517431732978,
      "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/stats",
      "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/stats/details",
      "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/shots",
      "_locations": [
        "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=23d3344b-06c8-11e8-bb65-0242286dfad2&from=1517431730064&to=1517431732978"
      ],
      "_possessions": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/possessions",
      "_possessions_summary": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/possessions/summary"
    }
  ],
  "is_practice_event": true,
  "is_game_event": false,
  "started_at": 1517430299810,
  "ended_at": 1517431732978,
  "_self": "https://api-shottracker.ddsports.com/v1/data/teams/12345/practices/cf3ba789-06c4-11e8-bb65-0242286dfad2"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "practice event not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Game Event

Game Event
GET/v1/data/games/{event_id}

A self reference to a specific game event.

Example URI

GET /v1/data/games/event_id
URI Parameters
HideShow
event_id
string (required) 

The specific event id for the game

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": "cf3ba789-06c4-11e8-bb65-0242286dfad2",
  "name": "TeamAppTeam vs TestTeamAlpha",
  "results": [
    {
      "id": "cf56d0aa-06c4-11e8-bb65-0242286dfad2",
      "name": null,
      "type": "GAME_ROUND",
      "started_at": 1517430299810,
      "ended_at": 1517431728868,
      "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/stats",
      "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/stats/details",
      "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/shots",
      "_locations": [
        "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=cf56d0aa-06c4-11e8-bb65-0242286dfad2&from=1517430299810&to=1517431728868"
      ],
      "_possessions": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/possessions",
      "_possessions_summary": "https://api-shottracker.ddsports.com/v1/data/stats/cf56d0aa-06c4-11e8-bb65-0242286dfad2/possessions/summary"
    },
    {
      "id": "23d3344b-06c8-11e8-bb65-0242286dfad2",
      "name": null,
      "type": "GAME_ROUND",
      "started_at": 1517431730064,
      "ended_at": 1517431732978,
      "_stats": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/stats",
      "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/stats/details",
      "_shots": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/shots",
      "_locations": [
        "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=23d3344b-06c8-11e8-bb65-0242286dfad2&from=1517431730064&to=1517431732978"
      ],
      "_possessions": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/possessions",
      "_possessions_summary": "https://api-shottracker.ddsports.com/v1/data/stats/23d3344b-06c8-11e8-bb65-0242286dfad2/possessions/summary"
    }
  ],
  "is_practice_event": false,
  "is_game_event": true,
  "started_at": 1517430299810,
  "ended_at": 1517431732978,
  "game_type": "HALF",
  "_self": "https://api-shottracker.ddsports.com/v1/data/games/cf3ba789-06c4-11e8-bb65-0242286dfad2",
  "totals": {
    "_stats_details": "https://api-shottracker.ddsports.com/v1/data/stats/games/cf3ba789-06c4-11e8-bb65-0242286dfad2/stats/details"
  },
  "reference_id": "8c6cdaf4-b4dd-11ec-a865-02a7227af969",
  "game_attributes": {
    "home_team_id": 461,
    "home_team_name": "TeamAppTeam",
    "away_team_id": 469,
    "away_team_name": "TestTeamAlpha"
  }
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "game event not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Player Lineups

Player Lineups
GET/v1/data/games/{event_id}/lineups{?at}

Returns players in lineups for a given game and at a specific timestamp.

Example URI

GET /v1/data/games/event_id/lineups?at=
URI Parameters
HideShow
event_id
string (required) 

ID of the game

at
number (required) 

The epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "player_ids": [
    "123",
    "456",
    "789"
  ]
}
Response  400
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 400,
  "message": "Parameter 'at' must be greater than 0 | Parameter 'at' is invalid",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Game not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Sensor Assignments History

Sensor Assignments History
GET/v1/data/games/{event_id}/sensor/assignments/history

Returns the sensor assignment history during the certain game. The timestamp in the response indicates the sensor was assigned to the player_id at that time for the game. Multiple sensor assignments will be seen for the same player indicating the assignment at the start of each quarter or half and at time when the sensor was changed.

Example URI

GET /v1/data/games/event_id/sensor/assignments/history
URI Parameters
HideShow
event_id
string (required) 

ID of the game

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "sensor_assignments_history": [
    {
      "sensor_id": "456",
      "player_id": "123",
      "team_id": "461",
      "timestamp": 1620135099
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Game not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Game Video Adjustment Actions

Game Video Adjustment Actions
PUT/v1/data/games/{event_id}/video/_action

Video adjustment commands for live game video streams.

Actions Description
CLIP Generate a clip; example request body {“action”:“CLIP”,“start”:<start timestamp; epoch ms>,“end”:<end timestamp; epoch ms>}; returns a url to the video clip in the response.
DISCOVER_STREAMS Discover supported streams; example request body {“action”:“DISCOVER_STREAMS”}; returns an array of objects that have the id and name of all discovered streams.

Example URI

PUT /v1/data/games/event_id/video/_action
URI Parameters
HideShow
event_id
string (required) 

ID of the game

Request  Action Request
HideShow
Headers
Content-Type: application/json
Body
{
  "action": "<selected action>"
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{"response":{“action”:”<requested action>”,“data”:<variable response based on action>}}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Game not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Live Data V2

All live data is delivered over a websocket, a long lived connection between the DDSports servers and the client application. All websockets require a subscription token which is first obtained by subscripting to the specific game or practice drill.

Important: Websocket tokens are issued for the specific game or drill. A new token must be obtained to subscribe to another game or practice drill.

Connection Request

wss://api-shottracker.ddsports.com/live/v2/games?token=[subscription token]&source=[source]&broadcast_summary_level=[summary level]&last_seq=[sequence number]

Query Parameters

Parameter Parameter Description
token string (required) Subscription token
source string (optional) Filter the response to specific data sources; see Sources. Multiple source parameters are supported; example source=broadcastsummary&source=clock. If no sources are provided all client accessible sources will be provided.
broadcast_summary_level string (optional) See !Broadcast API Stats
last_seq number (optional) Certain data sources pass back a sequence number; see Sources. All sequence supported sources share the same sequence system. Each sequence supported source will increment the sequence number that is returned. The last received sequence number can be returned when reconnecting and the websocket will start streaming all sequence ordered sources after the last sequence value. If no last_seq value is provided the websocket will provide all sequence supported sources starting from the beginning of the event. Non sequence supported sources will automatically send the last value or the next value for the live event.

Keep Alives

Clients must send a ping request every minute to ensure the connection stays open when no data is received. The server will send back a corresponding pong response.

  • Ping Request (application/json)

    {"action":"ping"}
  • Pong Response (application/json)

    {"action":"pong"}

Sources

Source Value Sequence Support Description
marker true
broadcastsummary false The broadcaster full summary file offered on the broadcast API
boxscorestatsv2 true The play by play stats for all players and team
chart true The shot chart details for every shot
possessions true Each teams possession; updated for each stat
possessionstats true Advanced stat totals for all grouped possessions
lineupstats true Stat totals for all grouped lineups
location false All player and ball xyz locations
clock false Game clock and shot clock ticks (2hz)

Marker Source

Game Status Markers

Status / Type Data Description
PREGAME Start of pregame
PLAY_START Start of official play
END_FIRST_HALF End of first half
END_FIRST_QUARTER End of first quarter
END_SECOND_QUARTER End of second quarter
END_THIRD_QUARTER End of third quarter
END_OVER_TIME End of over time
START_SECOND_HALF Start of second half
START_SECOND_QUARTER Start of second quarter
START_THIRD_QUARTER Start of third quarter
START_FOURTH_QUARTER Start of fourth quarter
START_OVER_TIME Start of over time
PLAY_END End of game
  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1665763312858,"gameId":"f29b2985-4bd7-11ed-9596-0242e9e2912e","status":"PLAY_START"}}

Game State Markers

Status / Type Description
LIVE Game/Practice auto system is active
PAUSED Game/Practice auto system is non-active
FOUL Game/Practice auto system is in foul mode
  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1676998850203,"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","status":"LIVE"}}

Game Lineup Markers

The ShotTracker system uses auto detection for active players who are on court in practice scrimmages and games.

The lineup message will contain the following status:

Status Description
ADDED The player_id has been added to the active lineup
REMOVED The player_id has been removed from the active lineup
RESET There is a substitution and all on-court players will be sent again; player_id will be 0
  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1676998850359,"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","status":"LINEUP","data":{"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","sessionId":"46408f6c-b205-11ed-b27e-0242e9e2912e","pid":"7091","status":"ADDED"}}}

Game Jersey Color Markers

When a game starts or while the game is running, an update will be sent when the jersey colors for the teams are initially set or changed. This will typically only happen before play starts but should be considered if the consumer subscribes to the game before it is started.

  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1676998226493,"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","status":"JERSEY_COLOR","data":{"facilityId":"35f20157-ee24-11e9-bcab-06a15c73f3c3","courtId":"5dd7ff0b-ee24-11e9-bcab-06a15c73f3c3","gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","status":"JERSEY_COLOR_UPDATED","team1Id":552,"team1JerseyColor":"0000FF","team2Id":526,"team2JerseyColor":"FFFB00"}}}

Broadcast Summary Source

  • Example broadcastsummary (application/json)

    {"type":"data","source":"broadcastsummary","data":{"<see broadcast api>"}}

Boxscore Stats Version 2 Source

  • Example boxscorestatsv2 (application/json)

    {"seq":"25","type":"data","source":"boxscorestatsv2","data":{"classification":"THREE_POINT_MAKE","act":"PLAYER","eid":"43d32b49-39c0-11ed-abe8-0242e9e2912e","tid":"526","st":"GAME_ROUND","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","t":1663773345277,"gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","stats":{"FG":1.0,"OPPOSING_TEAM_SCORE":2.0,"FGA_CAS":1.0,"GAME_LEAD_CHANGES":2.0,"TEAM_SCORE":5.0,"PTS":3.0,"FG3":1.0,"FG3_CAS":1.0,"FG_CAS":1.0,"FGA3":1.0,"FG_STREAK":1.0,"FGA3_CAS":1.0,"FGA":1.0},"totalStats":{"FG":1.0,"OPPOSING_TEAM_SCORE":2.0,"FGA_CAS":1.0,"GAME_LEAD_CHANGES":2.0,"TEAM_SCORE":5.0,"PTS":3.0,"FG3":1.0,"FG3_CAS":1.0,"FG_CAS":1.0,"FGA3":1.0,"FG_STREAK":1.0,"FGA3_CAS":1.0,"FGA":1.0},"v":143,"c":false,"gc":null,"sc":null,"prd":"Q1","px":-6467,"py":-13317,"hex":-6513,"hey":-751,"pid":"7088"}}

Chart Source

  • Example chart (application/json)

    {"seq":"26","type":"data","source":"chart","data":{"label":null,"eid":"43d32b49-39c0-11ed-abe8-0242e9e2912e","t":1663773345277,"pid":"7088","tid":"526","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","sst":"GAME_ROUND","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","st":"MAKE","is3":true,"pts":3,"z":14,"az":22,"px":-6467,"py":-13317,"pz":30,"hx":46,"hy":-12566,"hz":2990,"hsx":-6513,"hsy":-751,"s":"RECORDED","drb":0,"dd":null,"fid":"35f20157-ee24-11e9-bcab-06a15c73f3c3","hid":"7332db6d-ee25-11e9-bcab-06a15c73f3c3","gc":null,"sc":null,"prd":"Q1","attributes":["CAS"],"players":["7088","7089","7090","7091","7092","7093","7096","7097","7098","7099","7288"],"d":655.615512324106,"shotDefenders":[7092]}}

Possessions Source

  • Example possessions (application/json)

    {"seq":"30","type":"data","source":"possessions","data":{"state":"SAVED","possession":{"supervision":"SYSTEM","startTimestamp":1663773326618,"teamId":"526","lineupName":"ONE","sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e","practiceId":null,"drillDefinitionId":null,"practiceDefinitionId":null,"gameId":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","lineupPlayers":["7089","7088","7097","7091","7092"],"opponentLineupPlayers":["7271","7273","7265","7269","7263"],"screenPlayers":[],"corrected":false,"deleted":false,"version":1,"startGameClock":null,"period":"Q1","facilityId":"35f20157-ee24-11e9-bcab-06a15c73f3c3","courtId":"5dd7ff0b-ee24-11e9-bcab-06a15c73f3c3","possessions":[{"sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e","teamId":"526","playerId":"7092","lineup":"ONE","possessionType":"DEFENSIVE_REB","3Point":false,"shotDistance":0.0,"x":0,"y":0,"z":0,"zone":0,"advancedZone":0,"timestamp":1663773326618,"gameClock":null,"shotClock":null,"scoring":false,"nonScoring":true},{"sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e","teamId":"526","playerId":"7089","lineup":"ONE","possessionType":"AST","3Point":false,"shotDistance":0.0,"x":0,"y":0,"z":0,"zone":0,"advancedZone":0,"timestamp":1663773345276,"gameClock":null,"shotClock":null,"scoring":false,"nonScoring":true},{"sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e","teamId":"526","playerId":"7088","lineup":"ONE","possessionType":"FG","3Point":true,"shotDistance":0.0,"x":0,"y":0,"z":0,"zone":0,"advancedZone":0,"timestamp":1663773345277,"gameClock":null,"shotClock":null,"scoring":true,"nonScoring":false}],"shotDistance":[0.0],"resultedStats":{},"id":"baa97fee-6858-43dd-ad2d-2c99dcf25e78","possessionTime":18659,"endTimestamp":1663773345277,"endPossession":{"present":true},"locationsPreview":[],"stats":{"turnover":0,"shotType":3,"shotValue":3,"points":3,"passes":3,"halfCourt":true,"paintTouch":false,"ballReversals":1,"ballScreens":0,"ballScreensLeftWing":0,"ballScreensMiddleWing":0,"ballScreensRightWing":0,"ballScreensPickAndPop":0,"ballScreensPickAndRoll":0,"ballScreensPickAndShortRoll":0,"ballScreensScreenedShot":0,"ballScreensHandoff":0,"ballScreensDrag":0,"ballScreensPop":0,"ballScreensRoll":0,"ballScreensSlip":0,"ballScreensShortRoll":0,"ballScreensReject":0,"ballScreensReScreen":0,"ballScreensStay":0,"ballScreensStepUp":0,"ballScreensSnake":0,"ballScreensSplit":0,"ballScreensOther":0},"endGameClock":null,"clipId":null,"videoAttributes":{"facilityId":"35f20157-ee24-11e9-bcab-06a15c73f3c3","courtId":"5dd7ff0b-ee24-11e9-bcab-06a15c73f3c3","sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e"},"manuallySupervised":false,"scoring":true,"nonScoring":false,"fieldGoalShotType":3,"valid":true},"responseView":{"id":"baa97fee-6858-43dd-ad2d-2c99dcf25e78","teamId":"526","sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e","gameId":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","startTimestamp":1663773326618,"endTimestamp":1663773345277,"possessionTimeMs":18659,"possessionTimeSeconds":18,"possessions":[{"timestamp":1663773326618,"possessionType":"DEFENSIVE_REB","playerId":"7092","actorType":"PLAYER","lineup":"ONE","x":0,"y":0,"z":0,"is3Point":false},{"timestamp":1663773345276,"possessionType":"AST","playerId":"7089","actorType":"PLAYER","lineup":"ONE","x":0,"y":0,"z":0,"is3Point":false},{"timestamp":1663773345277,"possessionType":"FG","playerId":"7088","actorType":"PLAYER","lineup":"ONE","x":0,"y":0,"z":0,"is3Point":true}],"shotDistanceCm":[0.0],"shotDistanceFt":[0],"locationsPreview":[],"period":"Q1","events":{"turnover":0,"shotType":3,"shotValue":3,"points":3,"passes":3,"halfCourt":true,"paintTouch":false,"ballReversals":1,"ballScreens":0,"ballScreensLeftWing":0,"ballScreensMiddleWing":0,"ballScreensRightWing":0,"ballScreensPickAndPop":0,"ballScreensPickAndRoll":0,"ballScreensPickAndShortRoll":0,"ballScreensScreenedShot":0,"ballScreensHandoff":0,"ballScreensDrag":0,"ballScreensPop":0,"ballScreensRoll":0,"ballScreensSlip":0,"ballScreensShortRoll":0,"ballScreensReject":0,"ballScreensReScreen":0,"ballScreensStay":0,"ballScreensStepUp":0,"ballScreensSnake":0,"ballScreensSplit":0,"ballScreensOther":0},"lineupPlayers":[7089,7088,7097,7091,7092],"opponentLineupPlayers":[7271,7273,7265,7269,7263]}}}

Possession Stats Source

  • Example possessionstats (application/json)

    {"seq":"33","type":"data","source":"possessionstats","data":{"t":1663773345456,"scope":"SESSION","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","st":"GAME_ROUND","tid":"526","summary":[{"type":"OVERALL","POSS":4,"POSS_PCT":80.0,"PTS":5,"PPP":1.25,"2PTM":1,"2PTA":1,"2PT_PCT":100.0,"3PTM":1,"3PTA":2,"3PT_PCT":50.0,"TO":1,"TO_PCT":25.0,"EFG":83.0},{"type":"PT0_BR0","POSS":2,"POSS_PCT":50.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":1,"3PT_PCT":0.0,"TO":1,"TO_PCT":50.0,"EFG":0.0},{"type":"PT1_BR0","POSS":1,"POSS_PCT":25.0,"PTS":2,"PPP":2.0,"2PTM":1,"2PTA":1,"2PT_PCT":100.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":100.0},{"type":"PT0_BR1","POSS":1,"POSS_PCT":25.0,"PTS":3,"PPP":3.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":1,"3PTA":1,"3PT_PCT":100.0,"TO":0,"TO_PCT":0.0,"EFG":150.0},{"type":"PT0_BR2","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"PT1_BR1","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"PT1_BR2","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"TRANSITION","POSS":1,"POSS_PCT":20.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":1,"TO_PCT":100.0,"EFG":0.0},{"type":"PASS0_2","POSS":3,"POSS_PCT":75.0,"PTS":2,"PPP":0.67,"2PTM":1,"2PTA":1,"2PT_PCT":100.0,"3PTM":0,"3PTA":1,"3PT_PCT":0.0,"TO":1,"TO_PCT":33.3,"EFG":50.0},{"type":"PASS3_5","POSS":1,"POSS_PCT":25.0,"PTS":3,"PPP":3.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":1,"3PTA":1,"3PT_PCT":100.0,"TO":0,"TO_PCT":0.0,"EFG":150.0},{"type":"PASS6","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS0","POSS":5,"POSS_PCT":100.0,"PTS":5,"PPP":1.0,"2PTM":1,"2PTA":1,"2PT_PCT":100.0,"3PTM":1,"3PTA":2,"3PT_PCT":50.0,"TO":2,"TO_PCT":40.0,"EFG":83.0},{"type":"BS_ALL","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS1","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS2","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS3","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_LW","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_MW","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_RW","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_PNP","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_PNR","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_SS","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_HANDOFF","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_DRAG","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_SLIP","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_SHORT_ROLL","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_REJECT","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_RE_SCREEN","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_STAY","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_STEP_UP","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_SNAKE","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_SPLIT","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0},{"type":"BS_OTHER","POSS":0,"POSS_PCT":0.0,"PTS":0,"PPP":0.0,"2PTM":0,"2PTA":0,"2PT_PCT":0.0,"3PTM":0,"3PTA":0,"3PT_PCT":0.0,"TO":0,"TO_PCT":0.0,"EFG":0.0}]}}

Lineup Stats Source

  • Example lineupstats (application/json)

    {"seq":"31","type":"data","source":"lineupstats","data":{"tid":"526","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","stats":{"FG_RATE":66.67,"REB_RATE":50.0,"TOTAL_POINTS_SCORED":5.0,"TOTAL_TURNOVERS":2.0,"TOTAL_OFFENSIVE_POSSESSIONS":7.0,"DEF_FG_RATE":25.0,"DPPP":0.29,"AST_RATE":100.0,"TO_RATE":28.57,"TOTAL_DEFENSIVE_POSSESSIONS":7.0,"PPP":0.42,"OPPP":0.71,"PLUS_MINUS":3.0,"TOTAL_POINTS_ALLOWED":2.0,"FG3_RATE":50.0},"players":["7088","7089","7091","7092","7097"]}}

Location Source

  • Example location (application/json)

    {"type":"data","source":"location","data":{"gcms":0,"scms":0,"cr":false,"period":"Q1","facilityId":"35f20157-ee24-11e9-bcab-06a15c73f3c3","courtId":"5dd7ff0b-ee24-11e9-bcab-06a15c73f3c3","sessionId":"4c298764-39bf-11ed-bbae-0242e9e2912e","locations":[{"t":1663773891625,"tag":"200003","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7089,"tid":526,"x":-9084,"y":1117,"z":138,"speed":0.777628,"dist":0.92102,"vx":-0.576889,"vy":-0.232025,"vz":0.129625},{"t":1663773891625,"tag":"200002","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7288,"tid":526,"x":-133,"y":-8847,"z":95,"speed":3.353453,"dist":0.529648,"vx":3.215284,"vy":-0.397222,"vz":0.065104},{"t":1663773891625,"tag":"200024","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7274,"tid":552,"x":-8294,"y":-15242,"z":322,"speed":0.196576,"dist":0.165341,"vx":-0.043643,"vy":0.058021,"vz":0.093917},{"t":1663773891625,"tag":"200021","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7271,"tid":552,"x":-7535,"y":-16712,"z":0,"speed":0.203159,"dist":0.940941,"vx":0.015162,"vy":0.073334,"vz":-0.021697},{"t":1663773891625,"tag":"200023","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7273,"tid":552,"x":-8595,"y":-12440,"z":6,"speed":0.451124,"dist":0.750029,"vx":-0.08,"vy":-0.07458,"vz":-0.120639},{"t":1663773891625,"tag":"200004","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7090,"tid":526,"x":1559,"y":-2384,"z":45,"speed":0.317927,"dist":0.523592,"vx":-0.011481,"vy":-0.141197,"vz":0.040384},{"t":1663773891625,"tag":"200020","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7270,"tid":552,"x":-8913,"y":-13879,"z":228,"speed":0.500529,"dist":0.134989,"vx":-0.046544,"vy":-0.222355,"vz":0.260521},{"t":1663773891625,"tag":"200011","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7099,"tid":526,"x":-9141,"y":13619,"z":427,"speed":0.2988,"dist":0.210371,"vx":-0.165552,"vy":0.026651,"vz":0.022272},{"t":1663773891625,"tag":"200001","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7088,"tid":526,"x":-8799,"y":11076,"z":137,"speed":0.483392,"dist":0.978312,"vx":0.099216,"vy":-0.12158,"vz":0.061723},{"t":1663773891625,"tag":"200017","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7265,"tid":552,"x":995,"y":-4705,"z":370,"speed":0.403067,"dist":0.823304,"vx":0.030394,"vy":0.05128,"vz":-0.166337},{"t":1663773891625,"tag":"200014","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7261,"tid":552,"x":4451,"y":-10148,"z":351,"speed":0.332753,"dist":0.363516,"vx":-0.089798,"vy":-2.67E-4,"vz":-0.1516},{"t":1663773891625,"tag":"200022","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7272,"tid":552,"x":-8806,"y":-14846,"z":0,"speed":0.443454,"dist":0.199899,"vx":-0.098755,"vy":0.004689,"vz":-0.0},{"t":1663773891625,"tag":"200012","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7259,"tid":552,"x":-8864,"y":-11741,"z":0,"speed":0.404919,"dist":0.688971,"vx":0.019898,"vy":0.083356},{"t":1663773891625,"tag":"200019","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7269,"tid":552,"x":-1242,"y":-9487,"z":76,"speed":1.925896,"dist":1.020535,"vx":1.462376,"vy":-0.376558,"vz":0.045931},{"t":1663773891625,"tag":"200018","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7267,"tid":552,"x":-9728,"y":-14671,"z":557,"speed":0.14137,"dist":0.164881,"vx":-0.027158,"vy":0.04874,"vz":-0.068781},{"t":1663773891625,"tag":"200013","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7260,"tid":552,"x":-464,"y":-7131,"z":234,"speed":1.001474,"dist":0.855718,"vx":-0.014116,"vy":-0.37648,"vz":0.168946},{"t":1663773891625,"tag":"200016","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7263,"tid":552,"x":330,"y":-7954,"z":311,"speed":0.569265,"dist":0.765461,"vx":0.260113,"vy":0.007804,"vz":0.239178},{"t":1663773891625,"tag":"200015","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7262,"tid":552,"x":-9017,"y":-12204,"z":1147,"speed":0.958868,"dist":0.126015,"vx":-0.251233,"vy":0.735995,"vz":0.701144},{"t":1663773891625,"tag":"200010","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7098,"tid":526,"x":-8738,"y":12785,"z":528,"speed":0.146344,"dist":0.26941,"vx":-0.02187,"vy":-0.01748,"vz":-0.038595},{"t":1663773891625,"tag":"200009","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7097,"tid":526,"x":1191,"y":-7233,"z":190,"speed":0.520334,"dist":1.172094,"vx":0.057488,"vy":0.017637,"vz":-0.096307},{"t":1663773891625,"tag":"200008","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7096,"tid":526,"x":-883,"y":-6343,"z":394,"speed":1.472018,"dist":0.48701,"vx":-0.561989,"vy":-0.674352,"vz":-1.026403},{"t":1663773891625,"tag":"200005","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7091,"tid":526,"x":6984,"y":-11868,"z":256,"speed":0.703452,"dist":1.210522,"vx":-0.022807,"vy":-0.024237,"vz":0.128032},{"t":1663773891625,"tag":"200007","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7093,"tid":526,"x":-9157,"y":14063,"z":1,"speed":0.520848,"dist":0.223269,"vx":0.100052,"vy":0.021815,"vz":-0.051862},{"t":1663773891625,"tag":"200006","sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"PLAYER","pid":7092,"tid":526,"x":-9121,"y":12061,"z":404,"speed":0.294251,"dist":1.02405,"vx":-0.004419,"vy":0.015697,"vz":0.037251},{"t":1663773891625,"sid":"4c298764-39bf-11ed-bbae-0242e9e2912e","gid":"4bb6ef73-39bf-11ed-bbae-0242e9e2912e","type":"BALL","bid":"2147568693","x":1073,"y":-2675,"z":1195,"speed":0.935029,"vx":0.458586,"vy":-0.814848,"vz":-0.277803}]}}

Clock Source

The clock message is automatically emitted for games only.

The clock message will contain the following period labels:

Period Description
PRE Pre game
H1 First half
H2 Second half
Q1 First quarter
Q2 Second quarter
Q3 Third quarter
Q4 Fourth quarter
OT Over time

The clock message will contain the following types:

Type Description
GAME_CLOCK Game clock
SHOT_CLOCK Shot clock
GAME_SHOT_CLOCK Both game and shot clocks

The clock message will contain the following sources:

Source Description
OFFICIAL Data directly from the scoreboard controller
LOCAL_SERVER Data directly from the DDSports in facility server. This clock source will be seen when the facility does not have an official clock source.
APP The DDSports app can emulate the clock or indicate clock adjustments to the DDSports facility server.
UNDEFINED Less used; for testing purposes
  • Example clock (application/json)

    {"type":"data","source":"clock","data":{"gid":"f29b2985-4bd7-11ed-9596-0242e9e2912e","period":"OT","type":"GAME_SHOT_CLOCK","state":"STARTED","source":"OFFICIAL","min":"81","sec":"53","subSec":"0","shotSec":null,"shotSubSec":null,"controllerId":null}}

Live Data V1 **DEPRECATED**

NOTICE: live data v1 is documented for legacy support and will eventually be deprecated. All new developement should be done using the live data v2

All live data is delivered over a websocket, a long lived connection between the DDSports servers and the client application. All websockets require a subscription token which is first obtained by subscripting to the specific game or practice drill.

Important: Websocket tokens are issued for the specific game or drill. A new token must be obtained to subscribe to another game or practice drill.

Connection Request

ws://live.shottracker.com?token=[subscription token]

Example Connection Response

  • Ack Response (application/json)

    {"data":{"socketSessionId":"2edbccd1","serverAttributes":{"maxInputBufferSizeInBytes":8192,"connectionTimeoutInMs":120000}},"action":"subscribe","type":"ack"}

Keep Alives

The Ack response indicates how long the connection will stay open before timing out when no data is traveling over the connection (connectionTimeoutInMs). Clients should send a ping request to ensure the connection stays open when no data is received. The server will send back a corresponding pong response.

  • Ping Request (application/json)

    {"action":"ping"}
  • Pong Response (application/json)

    {"action":"pong"}

Data Type Responses

  • Stats Response (application/json)

    {"type":"stats","data":{"occurred_at":1484865816836,"team_id":461,"player_id":123,"stats":{"FGA":4.0,"PTS":4.0,"FG":2.0},"event_total_stats":{"FGA":8.0,"PTS":6.0,"FG":3.0},"classification":"TWO_POINT_MAKE","version":317,"game_clock":"1:2.3","shot_clock":"4.5","period":"Q1"}}
  • Shots Response (application/json)

    {"type":"shot","data":{"occurred_at":1484865816836,"team_id":461,"player_id":123,"is_make":true,"is_3point":true,"zone":1,"advanced_zone":2,"hoop_x":10,"hoop_y":11669,"hoop_player_x":12,"hoop_player_y":3,"status":"RECORDED","game_clock":"1:2.3","shot_clock":"4.5","period":"Q1","attributes":["JUMPSHOT"]}}
  • Location Response (application/json)

    {"type":"location","data":{"locations":[{"occurred_at":1478800197342,"type":"PLAYER","id":123,"x":123,"y":456,"z":789,"speed":0.1,"dist":1.3,"vx":1.2,"vy":3.4,"vz":5.6},{"occurred_at":1478800197342,"type":"PLAYER","id":456,"x":456,"y":789,"z":123,"speed":0.1,"dist":1.3,"vx":1.2,"vy":3.4,"vz":5.6},{"occurred_at":1478800197342,"type":"BALL","id":9456,"x":456,"y":789,"z":123,"speed":0.2,"vx":1.2,"vy":3.4,"vz":5.6},{"occurred_at":1478800197342,"type":"OFFICIAL","id":789,"x":123,"y":456,"z":789,"speed":0.1,"dist":1.3,"vx":1.2,"vy":3.4,"vz":5.6}]}}
  • Possession Response (application/json)

    {"type":"possession","data":{"state":"SAVED","possession":{"stats":[{"timestamp":1638481004439,"possession_type":"LBTO","player_id":1,"game_clock":"12:34.5","shot_clock":"09.1"}],"start_timestamp":1638481003439,"end_timestamp":1638481004439,"team_id":1,"player_ids":[1,2,3,4,5],"opposing_player_ids":[6,7,8,9,10],"start_game_clock":"12:34.5","end_game_clock":"12:34.5","period":"Q1","possession_attributes":{"turnover":1,"passes":5,"half_court":true,"paint_touch":false,"ball_reversals":6,"ball_screens":7,"ball_screens_left_wing":8,"ball_screens_middle_wing":9,"ball_screens_right_wing":10,"ball_screens_pick_n_pop":11,"ball_screens_pick_n_roll":12,"ball_screens_pick_n_short_roll":13,"ball_screens_screened_shot":14,"ball_screens_handoff":15,"ball_screens_drag":16,"ball_screens_pop":0,"ball_screens_roll":0,"ball_screens_slip":0,"ball_screens_short_roll":0,"ball_screens_reject":0,"ball_screens_re_screen":0,"ball_screens_stay":0,"ball_screens_step_up":0,"ball_screens_snake":0,"ball_screens_split":0,"ball_screens_other":0}}}}

Marker Type Responses

Markers are multi-purpose messages emitted to indicate the period change in games or drill changes in practice, updates in game to jersey colors or which players are currently active on the floor. Some marker messages contain an additional data field depending on their type; the PLAY_NEXT and DRILL_NEXT markers are the exception to this rule.

Game State Markers

Game Status Markers

Status / Type Data Description
PREGAME Start of pregame
PLAY_START Start of official play
END_FIRST_HALF End of first half
END_FIRST_QUARTER End of first quarter
END_SECOND_QUARTER End of second quarter
END_THIRD_QUARTER End of third quarter
END_OVER_TIME End of over time
START_SECOND_HALF Start of second half
START_SECOND_QUARTER Start of second quarter
START_THIRD_QUARTER Start of third quarter
START_FOURTH_QUARTER Start of fourth quarter
START_OVER_TIME Start of over time
PLAY_END End of game
  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1665763312858,"gameId":"f29b2985-4bd7-11ed-9596-0242e9e2912e","status":"PLAY_START"}}
  • Marker Response (application/json)

    {"type":"marker","data":{"occurred_at":1478800197300,"type":"<data value>"}}

If subscribing to the live_id the following marker will be sent to indicate the next live id.

  • Play Next Marker Response (application/json)

    {"type":"marker","data":{"occurred_at":1478800197339,"live_id":"a1140480-e1d5-4684-a619-402984b5c9ba","type":"PLAY_NEXT"}}

Game Jersey Color Marker

When a game starts or while the game is running, an update will be sent when the jersey colors for the teams are initially set or changed. This will typically only happen before play starts but should be considered if the consumer subscribes to the game before it is started.

  • Jersey Color Marker Response (application/json)

    {"type":"marker","data":{"occurred_at":1616535390628,"type":"JERSEY_COLOR","data":{"teams":[{"id":461,"color":"0DDAFF"},{"id":493,"color":"00FF09"}]}}}

Practice State Markers

Practice Marker Descriptions

Data Value Data Description
DRILL_START Start of drill
DRILL_END End of drill
DRILL_NEXT Next started drill
PRACTICE_END End of practice
  • Marker Response (application/json)

    {"type":"marker","data":{"occurred_at":1478800197300,"type":"<data value>"}}

System State Markers

Game State Markers

Status / Type Description
LIVE Game/Practice auto system is active
PAUSED Game/Practice auto system is non-active
FOUL Game/Practice auto system is in foul mode
  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1676998850203,"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","status":"LIVE"}}
  • Marker Response (application/json)

    {"type":"marker","data":{"occurred_at":1478800197300,"type":"<data value>"}}

Lineup Detection Marker

Game Lineup Markers

The ShotTracker system uses auto detection for active players who are on court in practice scrimmages and games.

The lineup message will contain the following status:

Status Description
ADDED The player_id has been added to the active lineup
REMOVED The player_id has been removed from the active lineup
RESET There is a substitution and all on-court players will be sent again; player_id will be 0
  • Example marker (application/json)

    {"seq":"5","type":"data","source":"marker","data":{"t":1676998850359,"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","status":"LINEUP","data":{"gameId":"45a64b38-b205-11ed-b27e-0242e9e2912e","sessionId":"46408f6c-b205-11ed-b27e-0242e9e2912e","pid":"7091","status":"ADDED"}}}
  • Lineup Marker Response (application/json)

    {"type":"marker","data":{"occurred_at":1616535390628,"type":"LINEUP","data":{"player_id":123456,"status":"<Status>"}}}

Game Clock Response

The clock message is automatically emitted for games only.

The clock message will contain the following period labels:

Period Description
PRE Pre game
H1 First half
H2 Second half
Q1 First quarter
Q2 Second quarter
Q3 Third quarter
Q4 Fourth quarter
OT Over time

The clock message will contain the following types:

Type Description
GAME_CLOCK Game clock
SHOT_CLOCK Shot clock
GAME_SHOT_CLOCK Both game and shot clocks

The clock message will contain the following sources:

Source Description
OFFICIAL Data directly from the scoreboard controller
LOCAL_SERVER Data directly from the DDSports in facility server. This clock source will be seen when the facility does not have an official clock source.
APP The DDSports app can emulate the clock or indicate clock adjustments to the DDSports facility server.
UNDEFINED Less used; for testing purposes

The clock message contains both the game and shot clock values. Each clock is broken down to the specific minutes (min), seconds (sec) and sub seconds (sub_sec) values. The values can return as null; specifically the sub_sec. In the event a clock is not detected the object will be empty: example “shot_clock”:{}.

  • Response (application/json)

    {"type":"clock","data":{"period":"H1","type":"GAME_SHOT_CLOCK","game_clock":{"min":"9","sec":"39","sub_sec":null},"shot_clock":{"sec":"12","sub_sec":null}}}

Teams

List Teams

List Teams
GET/v1/data/teams

Example URI

GET /v1/data/teams
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 46,
      "name": "Test Team",
      "gender": "MEN",
      "conference_name": "ACC",
      "league_name": "NCAA",
      "sport": "BASKETBALL",
      "reference_id": "938104592"
    }
  ]
}

Team Roster

Team Roster
GET/v1/data/teams/{team_id}{?game_event_id},{reference}

The current active players on the team. The game_event_id parameter can be used to look up all of the players on the team at the time of a game. Players who are no longer on the team will have an ‘is_active’ false. The special_services field returns items for specific special events; possible type values are MIC, VIDEO.

Basketball Player Positions

Abbreviation Description
G GUARD
F FORWARD
C CENTER

Example URI

GET /v1/data/teams/team_id?game_event_id=,reference
URI Parameters
HideShow
team_id
number (required) 

ID of the team

game_event_id
string (optional) 

ID of the game

reference
string (optional) 

indicates the system of origin for IDs passed in the query; default: SHOTTRACKER

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 46,
  "name": "Test Team",
  "gender": "MEN",
  "conference_name": "ACC",
  "league_name": "NCAA",
  "sport": "BASKETBALL",
  "reference_id": "938104592",
  "logo_image_link": "...",
  "team_images": {
    "logo_small_light": "...",
    "logo_small_dark": "...",
    "logo_small_light_transparent": "...",
    "logo_small_dark_transparent": "...",
    "logo_light": "...",
    "logo_dark": "...",
    "logo_light_transparent": "...",
    "logo_dark_transparent": "..."
  },
  "players": [
    {
      "id": 1,
      "first_name": "john",
      "last_name": "doe",
      "jersey_number": 1,
      "jersey_number_str": "1",
      "position": "center",
      "profile_image_link": "...",
      "display_name": "john doe",
      "is_active": true,
      "special_services": [
        {
          "type": "MIC",
          "value": "mic6"
        }
      ],
      "reference_id": "42589513",
      "sensor": 100630,
      "is_starter": true,
      "is_scout": false,
      "team_player_images": {
        "image_light": "...",
        "image_dark": "...",
        "image_light_transparent": "...",
        "image_dark_transparent": "...",
        "headshot_light": "...",
        "headshot_dark": "...",
        "headshot_transparent": "...",
        "image_profile": "..."
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Game not found | Team not found in game",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Replace Team Roster

Replace Team Roster
PUT/v1/data/teams/roster

Replace the current player roster for a specific team.

Example URI

PUT /v1/data/teams/roster
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "league": "LEAGUE_NAME",
  "team_id": "abc-123",
  "players": [
    {
      "id": "abc-123",
      "first_name": "John",
      "last_name": "Doe",
      "jersey_number": "42",
      "position": "F"
    }
  ]
}
Response  204
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Team or league not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

List Officials Teams

List Officials Teams
GET/v1/data/officials/teams

Example URI

GET /v1/data/officials/teams
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 99,
      "name": "Officials Team",
      "conference_name": "ACC",
      "league_name": "NCAA",
      "sport": "BASKETBALL"
    }
  ]
}

Officials Team Roster

Officials Team Roster
GET/v1/data/officials/teams/{team_id}

The special_services field returns items for specific special events; possible type values are MIC, VIDEO.

Example URI

GET /v1/data/officials/teams/team_id
URI Parameters
HideShow
team_id
number (required) 

ID of the team

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 99,
  "name": "Official Team",
  "conference_name": "ACC",
  "league_name": "NCAA",
  "sport": "BASKETBALL",
  "members": [
    {
      "id": 1,
      "first_name": "john",
      "last_name": "doe",
      "jersey_number": 1,
      "jersey_number_str": "1",
      "position": "center",
      "profile_image_link": "...",
      "display_name": "john doe",
      "is_active": true,
      "special_services": [
        {
          "type": "MIC",
          "value": "mic6"
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Restricted resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Game not found | Team not found in game",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Practice Stats

Team Stats

Team Stats
GET/v1/data/teams/{team_id}/players/practice/stats{?from,to}

A practice can consist of a team practice with shooting and scrimmage drills or a players individual workout. This endpoint will return team players stats that include both team practice drills (shooting and scrimmage) and workouts.

Example URI

GET /v1/data/teams/team_id/players/practice/stats?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_stats": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "version": 1,
      "stats": {
        "FG": 1,
        "FGA": 2,
        "PTS": 2
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Scrimmage Stats

Team Scrimmage Stats
GET/v1/data/teams/{team_id}/players/practice/scrimmage/stats{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/scrimmage/stats?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_stats": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "version": 1,
      "stats": {
        "FG": 1,
        "FGA": 2,
        "PTS": 2
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Shooting Drill Stats

Team Shooting Drill Stats
GET/v1/data/teams/{team_id}/players/practice/shooting/stats{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/shooting/stats?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_stats": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "version": 1,
      "stats": {
        "FG": 1,
        "FGA": 2,
        "PTS": 2
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Shots

Team Shots
GET/v1/data/teams/{team_id}/players/practice/shots{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/shots?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_shots": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "shots": [
        {
          "occurred_at": 123456789,
          "is_make": true,
          "is_3point": true,
          "zone": 1,
          "advanced_zone": 2,
          "hoop_player_x": 12,
          "hoop_player_y": 3,
          "status": "RECORDED",
          "game_clock": "1:2.3",
          "shot_clock": "4.5",
          "period": "Q1",
          "attributes": [
            "DUNK"
          ]
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Shots Summary

Team Shots Summary
GET/v1/data/teams/{team_id}/players/practice/shots/summary{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/shots/summary?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "basic": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 13,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ],
  "advanced": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 21,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Scrimmage Shots

Team Scrimmage Shots
GET/v1/data/teams/{team_id}/players/practice/scrimmage/shots{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/scrimmage/shots?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_shots": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "shots": [
        {
          "occurred_at": 123456789,
          "is_make": true,
          "is_3point": true,
          "zone": 1,
          "advanced_zone": 2,
          "hoop_player_x": 12,
          "hoop_player_y": 3,
          "status": "RECORDED",
          "game_clock": "1:2.3",
          "shot_clock": "4.5",
          "period": "Q1",
          "attributes": [
            "DUNK"
          ]
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Scrimmage Shots Summary

Team Scrimmage Shots Summary
GET/v1/data/teams/{team_id}/players/practice/scrimmage/shots/summary{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/scrimmage/shots/summary?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "basic": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 13,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ],
  "advanced": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 21,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Shooting Drill Shots

Team Shooting Drill Shots
GET/v1/data/teams/{team_id}/players/practice/shooting/shots{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/shooting/shots?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_shots": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "shots": [
        {
          "occurred_at": 123456789,
          "is_make": true,
          "is_3point": true,
          "zone": 1,
          "advanced_zone": 2,
          "hoop_player_x": 12,
          "hoop_player_y": 3,
          "status": "RECORDED",
          "game_clock": "1:2.3",
          "shot_clock": "4.5",
          "period": "Q1",
          "attributes": [
            "DUNK"
          ]
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Team Shooting Drill Shots Summary

Team Shooting Drill Shots Summary
GET/v1/data/teams/{team_id}/players/practice/shooting/shots/summary{?from,to}

Example URI

GET /v1/data/teams/team_id/players/practice/shooting/shots/summary?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "basic": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 13,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ],
  "advanced": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 21,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Game Stats

Stats

Stats
GET/v1/data/stats/games/{event_id}/stats

Example URI

GET /v1/data/stats/games/event_id/stats
URI Parameters
HideShow
event_id
string (required) 

ID of the game event

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "stats": [
    {
      "totalStats": {
        "AST": 1
      },
      "act": "PLAYER",
      "tid": "552",
      "pid": "7263"
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Access denied to resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Player Presence Stats

Player Presence Stats
GET/v1/data/stats/games/{event_id}/stats/presence

Presence stats are the players involvement in play; minutes played (MIN) and count of possessions.

Example URI

GET /v1/data/stats/games/event_id/stats/presence
URI Parameters
HideShow
event_id
string (required) 

ID of the game event

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "stats": [
    {
      "totalStats": {
        "MIN": 20,
        "TOTAL_OFFENSIVE_POSSESSIONS": 58,
        "TOTAL_DEFENSIVE_POSSESSIONS": 56
      },
      "act": "PLAYER",
      "tid": "552",
      "pid": "7263"
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Access denied to resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Play-By-Play

Play-By-Play
GET/v1/data/stats/games/{event_id}/details

Example URI

GET /v1/data/stats/games/event_id/details
URI Parameters
HideShow
event_id
string (required) 

ID of the game event

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "details": [
    {
      "type": "ACTUAL",
      "eventId": "6a92509b-3aa2-11ed-9843-0242e9e2912e",
      "timestamp": 1663870476541,
      "teamId": "526",
      "sessionType": "GAME_ROUND",
      "sessionId": "587af773-3aa2-11ed-a78a-0242e9e2912e",
      "practiceId": null,
      "practiceDefinitionId": null,
      "drillDefinitionId": null,
      "gameId": "5806b1d1-3aa2-11ed-a78a-0242e9e2912e",
      "stats": {
        "LBTO": 1,
        "TO": 1
      },
      "corrected": false,
      "facilityId": "35f20157-ee24-11e9-bcab-06a15c73f3c3",
      "courtId": "5dd7ff0b-ee24-11e9-bcab-06a15c73f3c3",
      "gameClock": null,
      "shotClock": null,
      "period": "Q1",
      "playerX": -2516,
      "playerY": -2511,
      "playerZ": 326,
      "hoopToEventX": -2562,
      "hoopToEventY": 10055,
      "clipId": null,
      "classification": "LIVE_BALL_TURNOVER",
      "description": "John Doe live ball turnover",
      "videoAttributes": {
        "facilityId": "35f20157-ee24-11e9-bcab-06a15c73f3c3",
        "courtId": "5dd7ff0b-ee24-11e9-bcab-06a15c73f3c3",
        "sessionId": "587af773-3aa2-11ed-a78a-0242e9e2912e"
      },
      "baseStats": "TO",
      "actualStats": "LBTO",
      "key": {
        "actorId": "7097",
        "timestamp": 1663870476541
      },
      "act": "PLAYER",
      "pid": "7097"
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Access denied to resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Shots

Shots
GET/v1/data/stats/games/{event_id}/shots

Example URI

GET /v1/data/stats/games/event_id/shots
URI Parameters
HideShow
event_id
string (required) 

ID of the game event

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "shots": [
    {
      "label": null,
      "t": 1663870491879,
      "pid": "7269",
      "tid": "552",
      "sid": "587af773-3aa2-11ed-a78a-0242e9e2912e",
      "sst": "GAME_ROUND",
      "gid": "5806b1d1-3aa2-11ed-a78a-0242e9e2912e",
      "st": "MISS",
      "is3": false,
      "pts": -1,
      "z": 8,
      "az": 12,
      "px": 3117,
      "py": 7899,
      "pz": 444,
      "hx": -44,
      "hy": 12783,
      "hz": 2990,
      "hsx": -3160,
      "hsy": 4884,
      "s": "RECORDED",
      "drb": 1,
      "dd": null,
      "fid": "35f20157-ee24-11e9-bcab-06a15c73f3c3",
      "hid": "730724a2-ee25-11e9-bcab-06a15c73f3c3",
      "gc": null,
      "sc": null,
      "prd": "Q1",
      "attributes": [
        "OTD"
      ],
      "players": [
        "7259"
      ],
      "d": 581.7677973212337,
      "shotDefenders": [
        7092
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Access denied to resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Catch Up

Catch Up
GET/v1/data/stats/games/{event_id}/{resources}

The catch up endpoint is intended to be a single call that supports multiple resources. The Stats, Play-By-Play and Shots endpoints are avaliable in the catch up. Example multi-resource request ./games/{event_id}/shots,details,shots. The response will combind the response for each of the comma supplied resources.

Example URI

GET /v1/data/stats/games/event_id/resources
URI Parameters
HideShow
event_id
string (required) 

ID of the game event

resources
string (required) 

comma separated list of resources; possible values stats, details, shots

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "stats": [
    {}
  ],
  "details": [
    {}
  ],
  "shots": [
    {}
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "Access denied to resource",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Season Stats

Season Stats
GET/v1/data/teams/{team_id}/players/game/stats{?from,to}

Example URI

GET /v1/data/teams/team_id/players/game/stats?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_stats": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "version": 1,
      "games_played": 1,
      "stats": {
        "FG": 1,
        "FGA": 2,
        "PTS": 2
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Season Shots

Season Shots
GET/v1/data/teams/{team_id}/players/game/shots{?from,to}

Example URI

GET /v1/data/teams/team_id/players/game/shots?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "id": 461,
  "name": "team name",
  "logo_image_link": "<image link>",
  "player_shots": [
    {
      "id": 123,
      "player_details": {
        "id": 123,
        "firstname": "John",
        "lastname": "Doe",
        "profile_image_link": "<image link>"
      },
      "shots": [
        {
          "occurred_at": 123456789,
          "is_make": true,
          "is_3point": true,
          "zone": 1,
          "advanced_zone": 2,
          "hoop_player_x": 12,
          "hoop_player_y": 3,
          "status": "RECORDED",
          "game_clock": "1:2.3",
          "shot_clock": "4.5",
          "period": "Q1",
          "attributes": [
            "DUNK"
          ],
          "shotDefenders": [
            7092
          ]
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Season Shots Summary

Season Shots Summary
GET/v1/data/teams/{team_id}/players/game/shots/summary{?from,to}

Example URI

GET /v1/data/teams/team_id/players/game/shots/summary?from=&to=
URI Parameters
HideShow
team_id
number (required) 

ID of the team

from
number (required) 

The starting epoch timestamp (in milliseconds)

to
number (required) 

The ending epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "basic": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 13,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ],
  "advanced": [
    {
      "tid": 461,
      "pid": 123,
      "zone": 21,
      "totals": {
        "FG": 6,
        "FGA": 10,
        "FG2": 0,
        "FGA2": 0,
        "FG3": 6,
        "FGA3": 10
      }
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data | Access denied to resource | Access denied to team_id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  422
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 422,
  "message": "Both from and to must be greater than 0 | from timestamp must be less than to timestamp | Request may not exceed more than 8 months",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Grouped Stats Details **DEPRECATED**

Grouped Stats Details **DEPRECATED**
GET/v1/data/stats/games/{event_id}/stats/details

Returns all team and player stat details for the whole game. Team stats are included under player_stats with an id of 0.

Example URI

GET /v1/data/stats/games/event_id/stats/details
URI Parameters
HideShow
event_id
string (required) 

ID of the game event

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 461,
      "name": "team name",
      "logo_image_link": "<image link>",
      "player_stats": [
        {
          "id": 123,
          "player_details": {
            "id": 123,
            "firstname": "John",
            "lastname": "Doe",
            "profile_image_link": "<image link>"
          },
          "stats": {
            "FGA": [
              {
                "occurred_at": 123456789,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              },
              {
                "occurred_at": 234567890,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ],
            "FG": [
              {
                "occurred_at": 123456789,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ],
            "PTS": [
              {
                "occurred_at": 123456789,
                "value": 2,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ]
          }
        },
        {
          "id": 0,
          "player_details": null,
          "stats": {
            "TO": [
              {
                "occurred_at": 123456789,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ]
          }
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Specific Period / Drill Stats

Stats

Stats
GET/v1/data/stats/{id}/stats

Returns all team and player box score stats. Team stats are included under player_stats with an id of 0.

Example URI

GET /v1/data/stats/id/stats
URI Parameters
HideShow
id
string (required) 

ID of the session

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 461,
      "name": "team name",
      "logo_image_link": "<image link>",
      "player_stats": [
        {
          "id": 123,
          "player_details": {
            "id": 123,
            "firstname": "John",
            "lastname": "Doe",
            "profile_image_link": "<image link>"
          },
          "version": 1,
          "stats": {
            "FG": 1,
            "FGA": 2,
            "PTS": 2
          }
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Stats Details

Stats Details
GET/v1/data/stats/{id}/stats/details

Returns all team and player stat details. Team stats are included under player_stats with an id of 0.

Example URI

GET /v1/data/stats/id/stats/details
URI Parameters
HideShow
id
string (required) 

ID of the session

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 461,
      "name": "team name",
      "logo_image_link": "<image link>",
      "player_stats": [
        {
          "id": 123,
          "player_details": {
            "id": 123,
            "firstname": "John",
            "lastname": "Doe",
            "profile_image_link": "<image link>"
          },
          "stats": {
            "FGA": [
              {
                "occurred_at": 123456789,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              },
              {
                "occurred_at": 234567890,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ],
            "FG": [
              {
                "occurred_at": 123456789,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ],
            "PTS": [
              {
                "occurred_at": 123456789,
                "value": 2,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ]
          }
        },
        {
          "id": 0,
          "player_details": null,
          "stats": {
            "TO": [
              {
                "occurred_at": 123456789,
                "value": 1,
                "game_clock": "1:2.3",
                "shot_clock": "4.5",
                "period": "Q1",
                "x": 30,
                "y": 20,
                "z": 10,
                "hoop_to_event_x": 50,
                "hoop_to_event_y": 60
              }
            ]
          }
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Shots

Shots
GET/v1/data/stats/{id}/shots

Example URI

GET /v1/data/stats/id/shots
URI Parameters
HideShow
id
string (required) 

ID of the session

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 461,
      "name": "team name",
      "logo_image_link": "<image link>",
      "player_shots": [
        {
          "id": 123,
          "player_details": {
            "id": 123,
            "firstname": "John",
            "lastname": "Doe",
            "profile_image_link": "<image link>"
          },
          "shots": [
            {
              "occurred_at": 123456789,
              "is_make": true,
              "is_3point": true,
              "zone": 1,
              "advanced_zone": 2,
              "player_x": 123,
              "player_y": 30,
              "player_z": 10,
              "hoop_x": 0,
              "hoop_y": 14000,
              "hoop_z": 3048,
              "hoop_player_x": 12,
              "hoop_player_y": 3,
              "status": "RECORDED",
              "game_clock": "1:2.3",
              "shot_clock": "4.5",
              "period": "Q1",
              "attributes": [
                "DUNK"
              ]
            }
          ]
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to SHOTS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Stats Possessions

Stats Possessions
GET/v1/data/stats/{id}/possessions

Example URI

GET /v1/data/stats/id/possessions
URI Parameters
HideShow
id
string (required) 

ID of the session

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 515,
      "name": "STQA",
      "team_player_details": [
        {
          "id": 3403,
          "first_name": "John",
          "last_name": "Doe",
          "profile_image_link": ""
        },
        {
          "id": 3932,
          "first_name": "Jim",
          "last_name": "Doe",
          "profile_image_link": ""
        }
      ],
      "possessions": [
        {
          "_locations": "https://api-shottracker.ddsports.com/v1/data/sensors/locations?id=abc-123&from=1580408461984&to=1580408463984",
          "start_timestamp": 1580408461984,
          "end_timestamp": 1580408463984,
          "start_game_clock": "12:30.0",
          "end_game_clock": "12:25.0",
          "period": "Q1",
          "player_ids": [
            3065,
            3403,
            3531,
            3532,
            3932
          ],
          "opposing_player_ids": [
            6833,
            6835,
            6836,
            6837,
            6838
          ],
          "stats": [
            {
              "timestamp": 1580408461984,
              "possession_type": "DEFENSIVE_REB",
              "details": [
                "DEFENSIVE_REB",
                "REB"
              ],
              "player_id": 3403
            },
            {
              "timestamp": 1580408463984,
              "game_clock": "12:30.0",
              "shot_clock": "10.0",
              "possession_type": "FGA",
              "details": [
                "FGA",
                "FGA3",
                "FGA_OTD",
                "FGA3_OTD"
              ],
              "player_id": 3932,
              "shot_attributes": {
                "shot_distance_cm": 755.0178607158906,
                "x": 4096,
                "y": 5320,
                "z": -1,
                "zone": 12,
                "advanced_zone": 18,
                "is_3point": true
              }
            }
          ],
          "possession_attributes": {
            "turnover": 0,
            "passes": 1,
            "half_court": false,
            "paint_touch": true,
            "ball_reversals": 1,
            "ball_screens": 1,
            "ball_screens_left_wing": 1,
            "ball_screens_middle_wing": 0,
            "ball_screens_right_wing": 0,
            "ball_screens_pick_n_pop": 1,
            "ball_screens_pick_n_roll": 0,
            "ball_screens_pick_n_short_roll": 0,
            "ball_screens_screened_shot": 0,
            "ball_screens_handoff": 0,
            "ball_screens_drag": 0,
            "ball_screens_pop": 0,
            "ball_screens_roll": 0,
            "ball_screens_slip": 0,
            "ball_screens_short_roll": 0,
            "ball_screens_reject": 0,
            "ball_screens_re_screen": 0,
            "ball_screens_stay": 0,
            "ball_screens_step_up": 0,
            "ball_screens_snake": 0,
            "ball_screens_split": 0,
            "ball_screens_other": 0
          }
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Stats Possessions Summary

Stats Possessions Summary
GET/v1/data/stats/{id}/possessions/summary

Example URI

GET /v1/data/stats/id/possessions/summary
URI Parameters
HideShow
id
string (required) 

ID of the session

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "teams": [
    {
      "id": 1,
      "name": "shottracker team",
      "possession_summary": [
        {
          "summary": [
            {
              "type": "OVERALL",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT0_BR0",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT1_BR0",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT0_BR1",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT0_BR2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT1_BR1",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT1_BR2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "TRANSITION",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PASS0_2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PASS3_5",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PASS6",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS0",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS_ALL",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS1",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS3",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            }
          ]
        }
      ]
    },
    {
      "id": 2,
      "name": "shottracker team2",
      "possession_summary": [
        {
          "summary": [
            {
              "type": "OVERALL",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT0_BR0",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT1_BR0",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT0_BR1",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT0_BR2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT1_BR1",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PT1_BR2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "TRANSITION",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PASS0_2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PASS3_5",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "PASS6",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS0",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS_ALL",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS1",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS2",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            },
            {
              "type": "BS3",
              "POSS": 0,
              "POSS_PCT": 0,
              "PTS": 0,
              "PPP": 0,
              "2PTM": 0,
              "2PTA": 0,
              "2PT_PCT": 0,
              "3PTM": 0,
              "3PTA": 0,
              "3PT_PCT": 0,
              "TO": 0,
              "TO_PCT": 0
            }
          ]
        }
      ]
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Sensors Locations

Sensor Locations

Sensor Locations
GET/v1/data/sensors/locations{?id,from,to}

Returns an array of player and ball locations. The timeframe of the request should not exceed 30 minutes.

Example URI

GET /v1/data/sensors/locations?id=&from=&to=
URI Parameters
HideShow
id
string (required) 

Id of the session; either game half or quarter, or practice drill

from
number (required) 

The epoch timestamp (in milliseconds)

to
number (required) 

The epoch timestamp (in milliseconds)

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "locations": [
      {
        "x": 5785,
        "t": 163475794089,
        "z": 45,
        "type": "PLAYER",
        "sid": "649778d4-31db-11ec-942c-0242615ec82f",
        "y": 7930,
        "tag": "65575",
        "tid": 515,
        "speed": 0.238894,
        "pid": 6844
      }
    ]
  },
  {
    "locations": [
      {
        "x": 5785,
        "t": 163475794589,
        "z": 45,
        "type": "PLAYER",
        "sid": "649778d4-31db-11ec-942c-0242615ec82f",
        "y": 8000,
        "tag": "65575",
        "tid": 515,
        "speed": 0.238894,
        "pid": 6844
      }
    ]
  }
]
Response  400
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 400,
  "message": "Valid from and to timestamps are required | Locations must be requested in 30 min timeframes",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 403,
  "message": "No access to STATS data",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Data Driven Adjuster DDA

Create DDA Command

Create DDA Command
POST/v1/data/dda

Example URI

POST /v1/data/dda
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "event": {
    "type": "GAME",
    "reference": "SHOTTRACKER",
    "id": "f1e80480-e1d5-4684-a619-402984b5c9ba"
  },
  "when": {
    "actor": {
      "reference": "SHOTTRACKER",
      "type": "PLAYER",
      "id": "1"
    }
  },
  "has": [
    {
      "type": "STAT",
      "value": "FG"
    }
  ],
  "at": [],
  "adjust": [
    {
      "stat": "PTS",
      "operator": "ADD",
      "value": 2
    }
  ],
  "type": "DYNAMIC"
}
Response  201
HideShow
Headers
X-DDA_ID: 1ae80480-e1d5-4684-a619-402984b5a9ba
Location: http://localhost/v1/data/dda/1ae80480-e1d5-4684-a619-402984b5a9ba
Response  403
HideShow
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

List Game DDA Commands

List Game DDA Commands
GET/v1/data/dda{?type,reference,id}

Example URI

GET /v1/data/dda?type=&reference=&id=
URI Parameters
HideShow
type
string (optional) 

the type of reference id; GAME or PRACTICE

reference
string (optional) 

establishes the id context used by reference supported consumers

id
string (optional) 

the reference id for the specific type; the format of the id varies depending on the system of reference. If omitted, all static DDA commands will be returned.

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "ddas": [
    {
      "event": {
        "type": "GAME",
        "id": "f1e80480-e1d5-4684-a619-402984b5c9ba",
        "reference_id": "94829"
      },
      "when": {
        "actor": {
          "type": "PLAYER",
          "id": "1",
          "reference_id": "7589"
        }
      },
      "has": [
        {
          "type": "STAT",
          "value": "FG"
        }
      ],
      "at": [],
      "adjust": [
        {
          "stat": "PTS",
          "operator": "ADD",
          "value": 2
        }
      ],
      "type": "DYNAMIC"
    }
  ]
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Update DDA Command to static

Update DDA Command to static
PUT/v1/data/{dda_id}/_static

Example URI

PUT /v1/data/dda_id/_static
URI Parameters
HideShow
dda_id
string (required) 

the dda id

Response  204
Response  403
HideShow
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
Response  422
HideShow
Body
{
  "status": 422,
  "message": "DDA id not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

DDA Operations

Retrieve DDA Command
GET/v1/data/dda/{dda_id}

Example URI

GET /v1/data/dda/dda_id
URI Parameters
HideShow
dda_id
string (required) 

the dda id

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "event": {
    "type": "GAME",
    "id": "f1e80480-e1d5-4684-a619-402984b5c9ba",
    "reference_id": "79629"
  },
  "when": {
    "actor": {
      "type": "PLAYER",
      "id": "1",
      "reference_id": "7381"
    }
  },
  "has": [
    {
      "type": "STAT",
      "value": "FG"
    }
  ],
  "at": [],
  "adjust": [
    {
      "stat": "PTS",
      "operator": "ADD",
      "value": 2
    }
  ],
  "type": "DYNAMIC"
}
Response  403
HideShow
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Delete DDA Command
DELETE/v1/data/dda/{dda_id}

Example URI

DELETE /v1/data/dda/dda_id
URI Parameters
HideShow
dda_id
string (required) 

the dda id

Response  204
Response  403
HideShow
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 404,
  "message": "Invalid id",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Web Callbacks

A live notify allows a service to be invoked when a practice drill or game is started. This eliminates the need to poll the search resource for new live events. When a notify url is registered the service will be called with the following query parameters:

PUT https://{url}?notify_id={registered notify id}&action=LIVE&data={live id}&state=[START|END]&type=[SESSION|GAME|PRACTICE]

The notification state indicates either the START or END of a practice drill or game half, quarter, etc… The notification type indicates either a SESSION which is a drill in practice or half or quarter in a game or GAME or PRACTICE which represents when the actual game or practice starts or ends. When a notification is created end notifications are disabled by default. Use the enable or disable endpoints to toggle notifications for the end notification state.

List LIVE Notifies

List LIVE Notifies
GET/v1/data/live/notify

Example URI

GET /v1/data/live/notify
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "notifications": [
    {
      "id": "abc-123",
      "action": "LIVE",
      "url": "http://localhost",
      "end_notification": false
    }
  ]
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Create LIVE Notify

Create LIVE Notify
PUT/v1/data/live/notify{?url}

Example URI

PUT /v1/data/live/notify?url=
URI Parameters
HideShow
url
string (required) 

Consumer provided url that will be called with the notification

Response  204
HideShow
Headers
X-ShotTracker-Notify-Id: <Live notify_id>
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Update LIVE Notify URL

Update LIVE Notify URL
PUT/v1/data/live/notify/{notify_id}{?url}

Example URI

PUT /v1/data/live/notify/notify_id?url=
URI Parameters
HideShow
notify_id
string (required) 

Specific id for the notify to update

url
string (required) 

New consumer provided url that will be called with the notification

Response  204
Response  422
HideShow
Body
{
  "status": 422,
  "message": "Notify id not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Enable LIVE End Notify

Enable LIVE End Notify
PUT/v1/data/live/notify/{notify_id}/_enableEndNotify

Example URI

PUT /v1/data/live/notify/notify_id/_enableEndNotify
URI Parameters
HideShow
notify_id
string (required) 

Specific id for the notify to update

Response  204
Response  422
HideShow
Body
{
  "status": 422,
  "message": "Notify id not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Disable LIVE End Notify

Disable LIVE End Notify
PUT/v1/data/live/notify/{notify_id}/_disableEndNotify

Example URI

PUT /v1/data/live/notify/notify_id/_disableEndNotify
URI Parameters
HideShow
notify_id
string (required) 

Specific id for the notify to update

Response  204
Response  422
HideShow
Body
{
  "status": 422,
  "message": "Notify id not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

Delete LIVE Notify

Delete LIVE Notify
DELETE/v1/data/live/notify/{notify_id}

Example URI

DELETE /v1/data/live/notify/notify_id
URI Parameters
HideShow
notify_id
string (required) 

Specific id for the notify to update

Response  204
Response  422
HideShow
Body
{
  "status": 422,
  "message": "Notify id not found",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "<General System Error Message>",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

ShotTracker Facilities

List Locations

List Locations
GET/v1/data/locations

Example URI

GET /v1/data/locations
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "locations": [
    {
      "facility_name": "Test Facility",
      "court_name": "Test Facility Main Court",
      "location_id": "114118d4-2e50-11e6-b4a4-deecc6e6f111@9e4118d4-2e50-11e6-b4a4-deecc6e6f112"
    }
  ]
}

Location Court Layout

Location Court Layout
GET/v1/data/locations/{location_id}/courtlayout

Example URI

GET /v1/data/locations/location_id/courtlayout
URI Parameters
HideShow
location_id
string (required) 

ID of the live session

Response  200
HideShow
Headers
Content-Type: application/json
Body
{"xne":0,"yne":0,"xse":2,"yse":2,"xsw":4,"ysw":4,"xnw":6,"ynw":6,"hoops":[{"name":"North hoop",x":0,"y":0,"z":13},{"name":"South Hoop",x":10,"y":10,"z":23}]}
Response  500
HideShow
Headers
Content-Type: application/json
Body
{
  "status": 500,
  "message": "Error obtaining court info",
  "shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}

List Nearest Locations

List Nearest Locations
GET/v1/data/locations/nearest/latlong/{latitude}/{longitude}{?radius,unit}

Example URI

GET /v1/data/locations/nearest/latlong/latitude/longitude?radius=&unit=
URI Parameters
HideShow
latitude
number (required) 

Callers current latitude

longitude
number (required) 

Callers current longitude

radius
number (required) 

The radius to include facilities

unit
string (required) 

The unit of measure; either MILES or KILOMETERS

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "locations": [
    {
      "facility_name": "Joes Gym",
      "court_name": "main court",
      "location_id": "114118d4-2e50-11e6-b4a4-deecc6e6f112@9e4118d4-2e50-11e6-b4a4-deecc6e6f122",
      "distance": {
        "unit": "MILES",
        "value": 11.76
      }
    }
  ]
}

System Data

System Stats

System Stats
GET/v1/data/system/stats

Example URI

GET /v1/data/system/stats
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "systemStats": [
    {
      "abbr": "AST",
      "name": "AST",
      "custom": false,
      "enabled": true,
      "type": "COUNTER",
      "editable": false,
      "locationable": false,
      "group": null,
      "sportType": "BASKETBALL"
    },
    {
      "abbr": "DEF_AST",
      "name": "DEF_AST",
      "custom": false,
      "enabled": true,
      "type": "COUNTER",
      "editable": true,
      "locationable": true,
      "group": "DEFENSIVE",
      "sportType": "FOOTBALL"
    }
  ],
  "classifiers": [
    {
      "name": "FREE_THROW_MISS",
      "stats": [
        "FTA"
      ],
      "actualStats": "FTA"
    }
  ],
  "correctionClassifiers": [
    "DELETE_FREE_THROW_MISS"
  ],
  "possessionGroups": [
    {
      "displayName": "Half Court",
      "type": "OVERALL",
      "teamPossessionGroupName": "POSSESSION_TYPE_GROUP"
    }
  ],
  "shotAttributes": [
    "OTD"
  ]
}