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