Appearance
Interior Shot Contests
The interior_shot_contests section in the markings response contains defensive contest information for interior shots.
Overview
A "contester" for interior shots is any defender within 5 feet of the shooter at release AND within 7.5 feet at the shooter's jump start.
If a shot has multiple contesters, there will be multiple records—one for each contester.
Sample Response
json
{
"markings": {
"interior_shot_contests": [
{
"angle_relative_to_shooter_at_ball_in_hands": -18.06,
"angle_relative_to_shooter_at_release": -66.99,
"angle_relative_to_shooter_at_shooter_jump_start": -38.72,
"closest_hand_above_head_at_ball_in_hands": false,
"closest_hand_above_head_at_release": false,
"closest_hand_above_head_at_shooter_jump_start": false,
"closest_hand_ball_dist_at_ball_in_hands_in": 140.73,
"closest_hand_ball_dist_at_release_in": 55.39,
"closest_hand_ball_dist_at_shooter_jump_start_in": 53.03,
"closest_hand_ball_height_diff_at_ball_in_hands_in": -14.23,
"closest_hand_ball_height_diff_at_release_in": -54.21,
"closest_hand_ball_height_diff_at_shooter_jump_start_in": -45.38,
"closest_hand_ball_hoop_angle_at_ball_in_hands": -18.22,
"closest_hand_ball_hoop_angle_at_release": -121.84,
"closest_hand_ball_hoop_angle_at_shooter_jump_start": -51.92,
"closest_hand_ball_vertical_angle_at_ball_in_hands": -5.8,
"closest_hand_ball_vertical_angle_at_release": -78.16,
"closest_hand_ball_vertical_angle_at_shooter_jump_start": -58.83,
"contester_id_nba": 1630530,
"contester_jump_distance_in": null,
"defender_distance_at_ball_in_hands_in": 166.83,
"defender_distance_at_release_in": 42.79,
"defender_distance_at_shooter_jump_start_in": 58.88,
"did_contester_jump": false,
"event_pbp_id": 7,
"game_id_nba": "0022500404",
"interior_shot_contest_id_ctg": "interior_shot_contest_d1d5c77f3c8fe13a8ba7ebc290e81b03",
"is_verticality": false,
"left_hand_above_head_at_ball_in_hands": false,
"left_hand_above_head_at_release": false,
"left_hand_above_head_at_shooter_jump_start": false,
"left_hand_ball_dist_at_ball_in_hands_in": 156.01,
"left_hand_ball_dist_at_release_in": 55.39,
"left_hand_ball_dist_at_shooter_jump_start_in": 53.03,
"left_hand_ball_height_diff_at_ball_in_hands_in": -16.83,
"left_hand_ball_height_diff_at_release_in": -54.21,
"left_hand_ball_height_diff_at_shooter_jump_start_in": -45.38,
"left_hand_ball_hoop_angle_at_ball_in_hands": -26.06,
"left_hand_ball_hoop_angle_at_release": -121.84,
"left_hand_ball_hoop_angle_at_shooter_jump_start": -51.92,
"left_hand_ball_vertical_angle_at_ball_in_hands": -6.19,
"left_hand_ball_vertical_angle_at_release": -78.16,
"left_hand_ball_vertical_angle_at_shooter_jump_start": -58.83,
"left_hand_eye_height_diff_at_max_jump_in": null,
"pbp_event_id": 7,
"position_relative_to_shooter_at_ball_in_hands": "front",
"position_relative_to_shooter_at_release": "right",
"position_relative_to_shooter_at_shooter_jump_start": "front",
"right_hand_above_head_at_ball_in_hands": false,
"right_hand_above_head_at_release": false,
"right_hand_above_head_at_shooter_jump_start": false,
"right_hand_ball_dist_at_ball_in_hands_in": 140.73,
"right_hand_ball_dist_at_release_in": 87.18,
"right_hand_ball_dist_at_shooter_jump_start_in": 55.28,
"right_hand_ball_height_diff_at_ball_in_hands_in": -14.23,
"right_hand_ball_height_diff_at_release_in": -82.75,
"right_hand_ball_height_diff_at_shooter_jump_start_in": -41.86,
"right_hand_ball_hoop_angle_at_ball_in_hands": -18.22,
"right_hand_ball_hoop_angle_at_release": -85.36,
"right_hand_ball_hoop_angle_at_shooter_jump_start": -26.55,
"right_hand_ball_vertical_angle_at_ball_in_hands": -5.8,
"right_hand_ball_vertical_angle_at_release": -71.66,
"right_hand_ball_vertical_angle_at_shooter_jump_start": -49.23,
"right_hand_eye_height_diff_at_max_jump_in": null,
"shooter_id_nba": 203076,
"shot_id_ctg": "shot_105f89542695fcebf740bb7c426ac4c3"
}
]
}
}Fields
Identifiers
interior_shot_contest_id_ctg
Type: string
CTG-generated unique identifier for this interior shot contest event
game_id_nba
Type: string
NBA game ID
shot_id_ctg
Type: string
CTG-generated shot ID (can join with shots and interior_shots)
shooter_id_nba
Type: integer
NBA player ID of the shooter
contester_id_nba
Type: integer
NBA player ID of the defender
pbp_event_id
Type: integer
Play-by-play event ID (i.e. NGSS ID) for this shot
event_pbp_id deprecated
Type: integer
Play-by-play event ID (i.e. NGSS ID) for this shot
Deprecated
Use pbp_event_id instead. This field will be removed in a future version.
Checkpoints
Contest data is captured at three checkpoints:
| Checkpoint | Description |
|---|---|
release | 3 frames before the ball leaves the shooter's hands |
shooter_jump_start | 1 frame after the shooter's feet leave the floor |
ball_in_hands | When shooter first touches the ball in the gather |
Ball in Hands Checkpoint Availability
All *_at_ball_in_hands fields can be null when the ball in hands checkpoint is unavailable. This occurs when the tracking data doesn't detect a clear two-handed ball touch during the gather phase—most commonly on tip attempts where the shooter tips the ball directly without a traditional gather.
Contest Classification
did_contester_jump
Type: boolean
true if the defender jumped to contest
is_verticality
Type: boolean
true if defender was in front with both hands above head. null for tip attempts
contester_jump_distance_in
Type: float
2D distance traveled by defender during their contest jump, i.e. measuring the distance along the floor from the jump takeoff point to jump landing point. null if no jump
Defender Position
Angle Relative to Shooter
The 2D angle (viewed from overhead) formed by the contester's mid hip, the shooter's mid hip, and the rim. Positive = left of shooter (from behind), negative = right.
angle_relative_to_shooter_at_release
Type: float | Unit: degrees
Defender angle at release
angle_relative_to_shooter_at_shooter_jump_start
Type: float | Unit: degrees
Defender angle at jump start
angle_relative_to_shooter_at_ball_in_hands
Type: float | Unit: degrees
Defender angle at ball in hands. null if ball in hands checkpoint unavailable
Position Relative to Shooter
Uses the angle to categorize the defender's position relative to the shooter-to-rim line (i.e. as viewed from behind the shooter, looking at the basket). For interior shots, hand placement is also considered—see note below.
NOTE
Defining angles and positioning around the rim can get tricky. There are many contests where a defender’s body is to the side of the shooter, but their hand gets between the shooter and the rim.
This field uses the hand placement to help determine this angle, so on a play like the one below, when Naz Reid’s hand gets between Kuminga and the basket on release, we would mark Reid as being in front of Kuminga for the contest, even though his body is to the side.

position_relative_to_shooter_at_release
Type: string
front, back, left, or right
position_relative_to_shooter_at_shooter_jump_start
Type: string
Position at jump start
position_relative_to_shooter_at_ball_in_hands
Type: string
Position at ball in hands. null if ball in hands checkpoint unavailable
Defender Distance
defender_distance_at_release_in
Type: float | Unit: inches
2D distance from defender's mid hip to shooter's mid hip at release
defender_distance_at_shooter_jump_start_in
Type: float | Unit: inches
Distance at jump start
defender_distance_at_ball_in_hands_in
Type: float | Unit: inches
Distance at ball in hands. null if ball in hands checkpoint unavailable
Jump Metrics
left_hand_eye_height_diff_at_max_jump_in
Type: float | Unit: inches
Left hand height above left eye at peak of jump. null if no jump
right_hand_eye_height_diff_at_max_jump_in
Type: float | Unit: inches
Right hand height above right eye at peak of jump. null if no jump
Hand Position Data
Hand position is measured as the midpoint between thumb and pinky (since we don't currently have joint data for any other parts of the hand). Data is provided for left hand, right hand, and the closest hand to the ball at each checkpoint.
Hand-to-Ball Distance
left_hand_ball_dist_at_release_in
Type: float | Unit: inches
Left hand distance to ball at release
right_hand_ball_dist_at_release_in
Type: float | Unit: inches
Right hand distance to ball at release
closest_hand_ball_dist_at_release_in
Type: float | Unit: inches
Closest hand distance to ball at release
left_hand_ball_dist_at_shooter_jump_start_in
Type: float | Unit: inches
Left hand distance at jump start
right_hand_ball_dist_at_shooter_jump_start_in
Type: float | Unit: inches
Right hand distance at jump start
closest_hand_ball_dist_at_shooter_jump_start_in
Type: float | Unit: inches
Closest hand distance at jump start
left_hand_ball_dist_at_ball_in_hands_in
Type: float | Unit: inches
Left hand distance at ball in hands. null if ball in hands checkpoint unavailable
right_hand_ball_dist_at_ball_in_hands_in
Type: float | Unit: inches
Right hand distance at ball in hands. null if ball in hands checkpoint unavailable
closest_hand_ball_dist_at_ball_in_hands_in
Type: float | Unit: inches
Closest hand distance at ball in hands. null if ball in hands checkpoint unavailable
Hand Above Head
true if hand is at least 4 inches above the defender's eye on that side.
left_hand_above_head_at_release
Type: boolean
Left hand above head at release
right_hand_above_head_at_release
Type: boolean
Right hand above head at release
closest_hand_above_head_at_release
Type: boolean
Closest hand above head at release
left_hand_above_head_at_shooter_jump_start
Type: boolean
Left hand above head at jump start
right_hand_above_head_at_shooter_jump_start
Type: boolean
Right hand above head at jump start
closest_hand_above_head_at_shooter_jump_start
Type: boolean
Closest hand above head at jump start
left_hand_above_head_at_ball_in_hands
Type: boolean
Left hand above head at ball in hands. null if ball in hands checkpoint unavailable
right_hand_above_head_at_ball_in_hands
Type: boolean
Right hand above head at ball in hands. null if ball in hands checkpoint unavailable
closest_hand_above_head_at_ball_in_hands
Type: boolean
Closest hand above head at ball in hands. null if ball in hands checkpoint unavailable
Hand-to-Ball Vertical Angle
The vertical angle from hand to ball. Higher values mean the shooter would need to shoot at a higher angle to get over the defender's hand. Positive = hand above ball center, negative = below.
left_hand_ball_vertical_angle_at_release
Type: float | Unit: degrees
Left hand vertical angle at release
right_hand_ball_vertical_angle_at_release
Type: float | Unit: degrees
Right hand vertical angle at release
closest_hand_ball_vertical_angle_at_release
Type: float | Unit: degrees
Closest hand vertical angle at release
left_hand_ball_vertical_angle_at_shooter_jump_start
Type: float | Unit: degrees
Left hand vertical angle at jump start
right_hand_ball_vertical_angle_at_shooter_jump_start
Type: float | Unit: degrees
Right hand vertical angle at jump start
closest_hand_ball_vertical_angle_at_shooter_jump_start
Type: float | Unit: degrees
Closest hand vertical angle at jump start
left_hand_ball_vertical_angle_at_ball_in_hands
Type: float | Unit: degrees
Left hand vertical angle at ball in hands. null if ball in hands checkpoint unavailable
right_hand_ball_vertical_angle_at_ball_in_hands
Type: float | Unit: degrees
Right hand vertical angle at ball in hands. null if ball in hands checkpoint unavailable
closest_hand_ball_vertical_angle_at_ball_in_hands
Type: float | Unit: degrees
Closest hand vertical angle at ball in hands. null if ball in hands checkpoint unavailable
Hand-to-Ball Height Difference
Height difference between hand and ball center. Positive = hand higher than ball.
left_hand_ball_height_diff_at_release_in
Type: float | Unit: inches
Left hand height diff at release
right_hand_ball_height_diff_at_release_in
Type: float | Unit: inches
Right hand height diff at release
closest_hand_ball_height_diff_at_release_in
Type: float | Unit: inches
Closest hand height diff at release
left_hand_ball_height_diff_at_shooter_jump_start_in
Type: float | Unit: inches
Left hand height diff at jump start
right_hand_ball_height_diff_at_shooter_jump_start_in
Type: float | Unit: inches
Right hand height diff at jump start
closest_hand_ball_height_diff_at_shooter_jump_start_in
Type: float | Unit: inches
Closest hand height diff at jump start
left_hand_ball_height_diff_at_ball_in_hands_in
Type: float | Unit: inches
Left hand height diff at ball in hands. null if ball in hands checkpoint unavailable
right_hand_ball_height_diff_at_ball_in_hands_in
Type: float | Unit: inches
Right hand height diff at ball in hands. null if ball in hands checkpoint unavailable
closest_hand_ball_height_diff_at_ball_in_hands_in
Type: float | Unit: inches
Closest hand height diff at ball in hands. null if ball in hands checkpoint unavailable
Hand-to-Ball Horizontal Angle (relative to hoop)
The 2D angle (as if looking from overhead) formed by the hand, the ball, and the rim. Positive = left of shooter, negative = right. 180° = directly behind ball.
left_hand_ball_hoop_angle_at_release
Type: float | Unit: degrees
Left hand horizontal angle at release
right_hand_ball_hoop_angle_at_release
Type: float | Unit: degrees
Right hand horizontal angle at release
closest_hand_ball_hoop_angle_at_release
Type: float | Unit: degrees
Closest hand horizontal angle at release
left_hand_ball_hoop_angle_at_shooter_jump_start
Type: float | Unit: degrees
Left hand horizontal angle at jump start
right_hand_ball_hoop_angle_at_shooter_jump_start
Type: float | Unit: degrees
Right hand horizontal angle at jump start
closest_hand_ball_hoop_angle_at_shooter_jump_start
Type: float | Unit: degrees
Closest hand horizontal angle at jump start
left_hand_ball_hoop_angle_at_ball_in_hands
Type: float | Unit: degrees
Left hand horizontal angle at ball in hands. null if ball in hands checkpoint unavailable
right_hand_ball_hoop_angle_at_ball_in_hands
Type: float | Unit: degrees
Right hand horizontal angle at ball in hands. null if ball in hands checkpoint unavailable
closest_hand_ball_hoop_angle_at_ball_in_hands
Type: float | Unit: degrees
Closest hand horizontal angle at ball in hands. null if ball in hands checkpoint unavailable
