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
-
Development Service API Environment - https://devapi-shottracker.ddsports.com
-
Development Websocket - wss://devapi-shottracker.ddsports.com/live/v2/games
Production
-
Production Service API Environment - https://api-shottracker.ddsports.com
-
Production Websocket - wss://api-shottracker.ddsports.com/live/v2/games
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
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.
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.
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.
Team Events And Schedules ¶
Search Team Events ¶
Search Team EventsGET/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
- 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
200
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"
}
}
]
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Practice Subscription Token ¶
Practice Subscription TokenGET/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
- 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.
200
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
}
]
}
}
400
Headers
Content-Type: application/json
Body
{
"status": 400,
"message": "The live id is no longer active",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to LOCATIONS|STATS|SHOTS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Game Schedule Matchup ¶
Game Schedule MatchupGET/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
- 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
200
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 ScheduleGET/v1/data/schedule/games{?type,from,to,team_id,location_id}
Example URI
- 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 @
200
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 SchedulePUT/v1/data/schedule/games
Create/update a list of games
Example URI
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
}
]
}
204
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Team or league not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Gamecast Subscription Token ¶
Gamecast Subscription TokenGET/v1/data/schedule/games/{event_id}/_subscribe_gamecast
Used by the ShotTracker gamecast SDK to subscribe to a game.
Example URI
- event_id
string
(required)ID of the event
200
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": []
}
}
400
Headers
Content-Type: application/json
Body
{
"status": 400,
"message": "The game is no longer active",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to LOCATIONS|STATS|SHOTS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Game Subscription Token ¶
Game Subscription TokenGET/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
- 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.
200
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": []
}
}
400
Headers
Content-Type: application/json
Body
{
"status": 400,
"message": "The game is no longer active",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to LOCATIONS|STATS|SHOTS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Practice Event ¶
Practice EventGET/v1/data/teams/{team_id}/practices/{event_id}
A self reference to a specific teams practice event.
Example URI
- team_id
number
(required)ID of the team
- event_id
string
(required)The specific event id for the practice
200
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"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "practice event not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Game Event ¶
Game EventGET/v1/data/games/{event_id}
A self reference to a specific game event.
Example URI
- event_id
string
(required)The specific event id for the game
200
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"
}
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "game event not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Player Lineups ¶
Player LineupsGET/v1/data/games/{event_id}/lineups{?at}
Returns players in lineups for a given game and at a specific timestamp.
Example URI
- event_id
string
(required)ID of the game
- at
number
(required)The epoch timestamp (in milliseconds)
200
Headers
Content-Type: application/json
Body
{
"player_ids": [
"123",
"456",
"789"
]
}
400
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"
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Game not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Sensor Assignments History ¶
Sensor Assignments HistoryGET/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
- event_id
string
(required)ID of the game
200
Headers
Content-Type: application/json
Body
{
"sensor_assignments_history": [
{
"sensor_id": "456",
"player_id": "123",
"team_id": "461",
"timestamp": 1620135099
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Game not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
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 ActionsPUT/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
- event_id
string
(required)ID of the game
Action Request
Headers
Content-Type: application/json
Body
{
"action": "<selected action>"
}
200
Headers
Content-Type: application/json
Body
{"response":{“action”:”<requested action>”,“data”:<variable response based on action>}}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Game not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
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 TeamsGET/v1/data/teams
Example URI
200
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 RosterGET/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
- 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
200
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": "..."
}
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Game not found | Team not found in game",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Replace Team Roster ¶
Replace Team RosterPUT/v1/data/teams/roster
Replace the current player roster for a specific team.
Example URI
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"
}
]
}
204
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Team or league not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
List Officials Teams ¶
List Officials TeamsGET/v1/data/officials/teams
Example URI
200
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 RosterGET/v1/data/officials/teams/{team_id}
The special_services field returns items for specific special events; possible type values are MIC, VIDEO.
Example URI
- team_id
number
(required)ID of the team
200
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"
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Restricted resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Game not found | Team not found in game",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Practice Stats ¶
Team Stats ¶
Team StatsGET/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
- 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)
200
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
}
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Team Scrimmage Stats ¶
Team Scrimmage StatsGET/v1/data/teams/{team_id}/players/practice/scrimmage/stats{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
422
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"
}
500
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 StatsGET/v1/data/teams/{team_id}/players/practice/shooting/stats{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Team Shots ¶
Team ShotsGET/v1/data/teams/{team_id}/players/practice/shots{?from,to}
Example URI
- 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)
200
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"
]
}
]
}
]
}
403
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"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Team Shots Summary ¶
Team Shots SummaryGET/v1/data/teams/{team_id}/players/practice/shots/summary{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
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"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Team Scrimmage Shots ¶
Team Scrimmage ShotsGET/v1/data/teams/{team_id}/players/practice/scrimmage/shots{?from,to}
Example URI
- 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)
200
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"
]
}
]
}
]
}
403
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"
}
422
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"
}
500
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 SummaryGET/v1/data/teams/{team_id}/players/practice/scrimmage/shots/summary{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
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"
}
422
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"
}
500
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 ShotsGET/v1/data/teams/{team_id}/players/practice/shooting/shots{?from,to}
Example URI
- 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)
200
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"
]
}
]
}
]
}
403
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"
}
422
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"
}
500
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 SummaryGET/v1/data/teams/{team_id}/players/practice/shooting/shots/summary{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
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"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Game Stats ¶
Stats ¶
StatsGET/v1/data/stats/games/{event_id}/stats
Example URI
- event_id
string
(required)ID of the game event
200
Headers
Content-Type: application/json
Body
{
"stats": [
{
"totalStats": {
"AST": 1
},
"act": "PLAYER",
"tid": "552",
"pid": "7263"
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Access denied to resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Player Presence Stats ¶
Player Presence StatsGET/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
- event_id
string
(required)ID of the game event
200
Headers
Content-Type: application/json
Body
{
"stats": [
{
"totalStats": {
"MIN": 20,
"TOTAL_OFFENSIVE_POSSESSIONS": 58,
"TOTAL_DEFENSIVE_POSSESSIONS": 56
},
"act": "PLAYER",
"tid": "552",
"pid": "7263"
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Access denied to resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Play-By-Play ¶
Play-By-PlayGET/v1/data/stats/games/{event_id}/details
Example URI
- event_id
string
(required)ID of the game event
200
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"
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Access denied to resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Shots ¶
ShotsGET/v1/data/stats/games/{event_id}/shots
Example URI
- event_id
string
(required)ID of the game event
200
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
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Access denied to resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Catch Up ¶
Catch UpGET/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
- event_id
string
(required)ID of the game event
- resources
string
(required)comma separated list of resources; possible values stats, details, shots
200
Headers
Content-Type: application/json
Body
{
"stats": [
{}
],
"details": [
{}
],
"shots": [
{}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "Access denied to resource",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Season Stats ¶
Season StatsGET/v1/data/teams/{team_id}/players/game/stats{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Season Shots ¶
Season ShotsGET/v1/data/teams/{team_id}/players/game/shots{?from,to}
Example URI
- 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)
200
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
]
}
]
}
]
}
403
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"
}
422
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"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Season Shots Summary ¶
Season Shots SummaryGET/v1/data/teams/{team_id}/players/game/shots/summary{?from,to}
Example URI
- 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)
200
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
}
}
]
}
403
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"
}
422
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"
}
500
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
- event_id
string
(required)ID of the game event
200
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
}
]
}
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Specific Period / Drill Stats ¶
Stats ¶
StatsGET/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
- id
string
(required)ID of the session
200
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
}
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Stats Details ¶
Stats DetailsGET/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
- id
string
(required)ID of the session
200
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
}
]
}
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Shots ¶
ShotsGET/v1/data/stats/{id}/shots
Example URI
- id
string
(required)ID of the session
200
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"
]
}
]
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to SHOTS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Stats Possessions ¶
Stats PossessionsGET/v1/data/stats/{id}/possessions
Example URI
- id
string
(required)ID of the session
200
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
}
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Stats Possessions Summary ¶
Stats Possessions SummaryGET/v1/data/stats/{id}/possessions/summary
Example URI
- id
string
(required)ID of the session
200
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
}
]
}
]
}
]
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Sensors Locations ¶
Sensor Locations ¶
Sensor LocationsGET/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
- 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)
200
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
}
]
}
]
400
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"
}
403
Headers
Content-Type: application/json
Body
{
"status": 403,
"message": "No access to STATS data",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
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 CommandPOST/v1/data/dda
Example URI
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"
}
201
Headers
X-DDA_ID: 1ae80480-e1d5-4684-a619-402984b5a9ba
Location: http://localhost/v1/data/dda/1ae80480-e1d5-4684-a619-402984b5a9ba
403
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
500
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 CommandsGET/v1/data/dda{?type,reference,id}
Example URI
- 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.
200
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"
}
]
}
403
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
500
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 staticPUT/v1/data/{dda_id}/_static
Example URI
- dda_id
string
(required)the dda id
204
403
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
422
Body
{
"status": 422,
"message": "DDA id not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
DDA Operations ¶
Retrieve DDA CommandGET/v1/data/dda/{dda_id}
Example URI
- dda_id
string
(required)the dda id
200
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"
}
403
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Delete DDA CommandDELETE/v1/data/dda/{dda_id}
Example URI
- dda_id
string
(required)the dda id
204
403
Headers
Content-Type: application/json
Body
{"status": 403,"message": "Restricted resource | Access denied to resource": "f1e80480-e1d5-4684-a619-402984b5c9ba"}
404
Headers
Content-Type: application/json
Body
{
"status": 404,
"message": "Invalid id",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
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 NotifiesGET/v1/data/live/notify
Example URI
200
Headers
Content-Type: application/json
Body
{
"notifications": [
{
"id": "abc-123",
"action": "LIVE",
"url": "http://localhost",
"end_notification": false
}
]
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Create LIVE Notify ¶
Create LIVE NotifyPUT/v1/data/live/notify{?url}
Example URI
- url
string
(required)Consumer provided url that will be called with the notification
204
Headers
X-ShotTracker-Notify-Id: <Live notify_id>
500
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 URLPUT/v1/data/live/notify/{notify_id}{?url}
Example URI
- 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
204
422
Body
{
"status": 422,
"message": "Notify id not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
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 NotifyPUT/v1/data/live/notify/{notify_id}/_enableEndNotify
Example URI
- notify_id
string
(required)Specific id for the notify to update
204
422
Body
{
"status": 422,
"message": "Notify id not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
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 NotifyPUT/v1/data/live/notify/{notify_id}/_disableEndNotify
Example URI
- notify_id
string
(required)Specific id for the notify to update
204
422
Body
{
"status": 422,
"message": "Notify id not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
Delete LIVE Notify ¶
Delete LIVE NotifyDELETE/v1/data/live/notify/{notify_id}
Example URI
- notify_id
string
(required)Specific id for the notify to update
204
422
Body
{
"status": 422,
"message": "Notify id not found",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "<General System Error Message>",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
ShotTracker Facilities ¶
List Locations ¶
List LocationsGET/v1/data/locations
Example URI
200
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 LayoutGET/v1/data/locations/{location_id}/courtlayout
Example URI
- location_id
string
(required)ID of the live session
200
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}]}
500
Headers
Content-Type: application/json
Body
{
"status": 500,
"message": "Error obtaining court info",
"shottrackerRequestId": "f1e80480-e1d5-4684-a619-402984b5c9ba"
}
List Nearest Locations ¶
List Nearest LocationsGET/v1/data/locations/nearest/latlong/{latitude}/{longitude}{?radius,unit}
Example URI
- 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
200
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 StatsGET/v1/data/system/stats
Example URI
200
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"
]
}