Skip to content

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:

CheckpointDescription
release3 frames before the ball leaves the shooter's hands
shooter_jump_start1 frame after the shooter's feet leave the floor
ball_in_handsWhen 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.

Naz Red contest

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