Appearance
Contested Rebound Touches
The contested_rebound_touches section in the markings response gives more detail around “contested rebounds”, i.e. rebounds where at least one player from each team is near the ball when the ball was touched.
NOTE
Due to imprecision in finger tracking data, this data can have a higher error rate than other markings.
Overview
For each contested rebound, we look at each time the ball was touched. For each of these touches, we give details about what the nearby players were doing: how close they were to the ball, whether they jumped, how high they jumped, etc.
NOTE
Instead of identifying every individual touch, we group close touches together into a single “touch group”. This helps deal with situations such as when a player bobbles the ball, and so they touch the ball many times in a very short window, but in reality we want to treat it like a single touch. Or when multiple players touch the ball at the same time — we track that as a single event and show multiple players touching the ball.
Each object in this data represents one player who is nearby a given touch during the rebound.
This gives much more resolution around the “jump ball” aspect of rebounding, where multiple players jump for the ball and it matters who gets a hand on it. It should also be helpful in modeling the probabilities around securing a rebound in these kinds of contested situations.
NOTE
Currently only includes rebounds from field goal attempts where the shot was not blocked.
Sample Response
json
{
"markings": {
"contested_rebound_touches": [
{
"ball_height_at_touch_in": 23.83,
"ball_rim_distance_at_touch_in": 221.45,
"chance_id_ctg": "chance_63aea33af0863ea15ce93e7bb2511140",
"contested_rebound_touch_id_ctg": "contested_rebound_touch_4eba3843c64c495c7a25719b2425993e",
"did_jump_close_to_touch": false,
"did_touch_ball": false,
"game_id_nba": "0022500404",
"is_rebounder": false,
"jump_max_neck_height_in": null,
"jump_max_wrist_height_in": null,
"left_hand_dist_to_ball_at_touch_in": 68.92,
"nba_game_id": "0022500404",
"nba_player_id": 1630180,
"nearest_jump_start_he_frame_after_touch": null,
"nearest_jump_start_he_frame_before_touch": null,
"nearest_jump_start_wall_clock_after_touch": null,
"nearest_jump_start_wall_clock_before_touch": null,
"player_id_nba": 1630180,
"rebound_he_frame": 10245,
"rebound_id_ctg": "rebound_8eb2b107cd90818e262d339fd3003e60",
"rebound_wall_clock": "2025-12-23T01:13:25.211+00:00",
"right_hand_dist_to_ball_at_touch_in": 59.85,
"touch_group_end_he_frame": 10244,
"touch_group_end_wall_clock": "2025-12-23T01:13:25.194+00:00",
"touch_group_start_he_frame": 10244,
"touch_group_start_wall_clock": "2025-12-23T01:13:25.194+00:00"
}
]
}
}Fields
Identifiers
contested_rebound_touch_id_ctg
Type: string
CTG-generated unique identifier for this contested rebound touch event
game_id_nba
Type: string
NBA game ID
nba_game_id deprecated
Type: string
NBA game ID
Deprecated
Use game_id_nba instead. This field will be removed in a future version.
player_id_nba
Type: integer
NBA player ID of the nearby player
nba_player_id deprecated
Type: integer
NBA player ID of the nearby player
Deprecated
Use player_id_nba instead. This field will be removed in a future version.
rebound_id_ctg
Type: string
CTG-generated rebound ID
chance_id_ctg
Type: string
CTG chance ID of the chance that the rebound started
Timing
rebound_he_frame
Type: integer
Hawk-Eye frame of the rebound
rebound_wall_clock
Type: string
UTC timestamp corresponding to rebound_he_frame.
touch_group_start_he_frame
Type: integer
First frame when a player touched the ball in this touch group
touch_group_start_wall_clock
Type: string
UTC timestamp corresponding to touch_group_start_he_frame.
touch_group_end_he_frame
Type: integer
Last frame when a player touched the ball in this touch group
touch_group_end_wall_clock
Type: string
UTC timestamp corresponding to touch_group_end_he_frame.
Touch Data
is_rebounder
Type: boolean
true if this player received credit for the rebound
did_touch_ball
Type: boolean
true if this player touched the ball between shot end and rebound
Hand Distance to Ball
left_hand_dist_to_ball_at_touch_in
Type: float | Unit: inches
Distance from left hand (midpoint of thumb/pinky) to ball center at touch
right_hand_dist_to_ball_at_touch_in
Type: float | Unit: inches
Distance from right hand to ball center at touch
Ball Position
ball_height_at_touch_in
Type: float | Unit: inches
Ball height above floor at touch group start
ball_rim_distance_at_touch_in
Type: float | Unit: inches
Distance from ball center to rim center at touch group start
Jump Data
did_jump_close_to_touch
Type: boolean
true if the player jumped near this touch
nearest_jump_start_he_frame_before_touch
Type: integer
Hawk-Eye frame of nearest jump start before touch (if near). null otherwise
nearest_jump_start_wall_clock_before_touch
Type: string
UTC timestamp corresponding to nearest_jump_start_he_frame_before_touch. null if no jump.
nearest_jump_start_he_frame_after_touch
Type: integer
Hawk-Eye frame of nearest jump start after touch (if near). null otherwise
nearest_jump_start_wall_clock_after_touch
Type: string
UTC timestamp corresponding to nearest_jump_start_he_frame_after_touch. null if no jump.
Jump Height (when did_jump_close_to_touch is true)
jump_max_neck_height_in
Type: float | Unit: inches
Max neck height during the jump. null if no jump
jump_max_wrist_height_in
Type: float | Unit: inches
Max wrist height during the jump. null if no jump
