Appearance
Double Teams
The double_teams section in the markings response contains one row for each time a secondary defender commits to the ballhandler when it's not a reaction to an attack or a screen. So this excludes situations where the ballhandler is driving and the secondary defender is helping, or when the secondary defender is trapping off of a screen. It includes situations where the secondary defender is initiating a double, whether that's a backcourt trap in a press or a double to get the ball out of the ballhandler's hands or a double in the post.
Overview
A double team begins when a defender leaves their existing matchup and proactively commits to the player with the ball while another defender is already guarding that player. The defender does not need to get all the way to the ballhandler before they pass the ball as long as it is clear the defender was committing to the ballhandler.
In the case where a secondary defender comes over toward the ballhandler to overload the strong side of the floor but does not fully commit to the ballhandler, we do not count that as a double team in this data set. For example, here, Joel Embiid overloads the ball side of the floor, but we would not count this as a double team:
However, there are times where this "overload" coverage can create situations where the defender gets close enough to the ballhandler that it is difficult to distinguish between the overload and a true double team, and those cases may be included in this data set.
Sample Response
json
{
"markings": {
"double_teams": [
{
"double_team_id_ctg": "double_team_20fe242aeff5fd00e903f772077c3842",
"game_id_nba": "0022500404",
"chance_id_ctg": "chance_c4ed1838eb3166c707182e13c83",
"possession_touch_id_ctg": "possession_touch_5cc8c170e139e0fdfdf30fccfe15c0fc",
"ball_handler_id_nba": 203076,
"primary_defender_id_nba": 1642852,
"doubler_id_nba": 1629028,
"period": 1,
"start_he_frame": 5450,
"end_he_frame": 5512,
"start_wall_clock": "2025-12-23T01:12:05.301+00:00",
"end_wall_clock": "2025-12-23T01:12:06.334+00:00",
"start_game_clock": 676.0,
"end_game_clock": 675.0,
"start_shot_clock": 12.0,
"end_shot_clock": 11.0
}
]
}
}Fields
Identifiers
double_team_id_ctg
Type: string
CTG-generated unique identifier for the double team.
game_id_nba
Type: string
NBA game ID.
chance_id_ctg
Type: string
CTG chance ID during which the double team occurred.
possession_touch_id_ctg
Type: string
CTG possession touch ID for the ballhandler's touch during the double team.
Players
ball_handler_id_nba
Type: integer
NBA player ID of the player being double teamed.
primary_defender_id_nba
Type: integer
NBA player ID of the defender already guarding the ballhandler.
doubler_id_nba
Type: integer
NBA player ID of the secondary defender who commits to the ballhandler.
Timing
period
Type: integer
Period in which the double team began.
start_he_frame
Type: integer
Hawk-Eye frame when the second defender begins their movement toward the ballhandler.
end_he_frame
Type: integer
Hawk-Eye frame when the double team is determined to have ended. This is the earliest of:
- the ball handler's possession touch ending
- the doubler's commitment to the ballhandler ending
start_wall_clock
Type: string
UTC timestamp at the start frame.
end_wall_clock
Type: string
UTC timestamp at the end frame.
start_game_clock
Type: float
Game clock in seconds remaining in the period at the start frame.
end_game_clock
Type: float
Game clock in seconds remaining in the period at the end frame.
start_shot_clock
Type: float | Nullable
Shot clock in seconds at the start frame.
end_shot_clock
Type: float | Nullable
Shot clock in seconds at the end frame.
