Appearance
Data Sets Overview
The CTG Pro Data Feed includes data organized into several marking types. The API bundles these all within the markings object. The marking types that appear in the response are based on the API parameters you used. Within each of these markings objects is a list of objects, one for each instance of the given marking.
For example, within the shots object would be a list of objects, one for each shot taken in the game, with the data fields we have included to help describe what is going on in that instance.
json
{
"markings": {
"shots": [
{
"blocker_player_id_nba": null,
"chance_id_ctg": "chance_51bfc1fda2cc0deb125bee9988859667",
"end_game_clock": 708,
"end_he_frame": 761,
...
},
{
"blocker_player_id_nba": null,
"chance_id_ctg": "chance_4c33ded97f95174cc013b446c3981347",
"end_game_clock": 688,
"end_he_frame": 1971,
...
}
],
"jump_shots": [...],
"interior_shots": [...],
"chances": [...],
"possessions": [...],
...
}
}There is a section in these docs for each marking type available with detailed explanations of what that marking represents as well as all of the fields included with it.
Nullable Fields
A small set of fields is present in every row. You can safely enforce non-null constraints on these fields, where the data set has them:
game_id_nba- The row's key IDs. In most data sets, this is the data set's own
*_id_ctgfield, for exampleshot_id_ctg. The data sets in the table below have one row per player, side, or instance, so their key is more than one field. period- The start frame:
start_he_frame, orjump_start_he_framein Jumps,shot_start_he_framein Shots Location Velocity Defender, andtouch_start_he_framein Possession Touches Location Velocity Defender. Event frames such asfoul_he_frameandturnover_he_frameare not in this set.
Some fields can also be null by design, for example when the field does not apply to the row.
All other fields are intended to have a value when they apply, but can be null in rare cases when upstream tracking or event data is missing or wrong. Examples are a Hawk-Eye clock or tracking outage, or, during live processing, a shot so recent that its tracking and play-by-play have not fully arrived yet. Do not enforce non-null constraints on these fields, so that one bad value does not block the rest of a game.
| Data set | Key fields |
|---|---|
| After Shot Positioning | shot_id_ctg, player_id_nba |
| Anthro Measurements | game_id_nba, player_id_nba |
| Ball Screen Instances | ball_screen_id_ctg, instance_number |
| Ball Screens: Off-Ball Players | ball_screen_id_ctg, player_id_nba |
| Chance Matchups | chance_id_ctg, player_id_nba |
| Dribbles Location Velocity Defender | dribble_id_ctg, defender_id_nba |
| Drives: Off-Ball Players | drive_id_ctg, player_id_nba |
| Matchups | chance_id_ctg, defender_id_nba, start_he_frame |
| Possession Touches Location Velocity Defender | possession_touch_id_ctg, defender_id_nba |
| Shots Location Velocity Defender | shot_id_ctg, defender_id_nba |
| Transition Opportunities | chance_id_ctg, side |
| Transition Opportunities: Player | chance_id_ctg, player_id_nba |
| 1v1 Advantage Creation: Off-Ball Players | advantage_creation_1v1_id_ctg, player_id_nba |
