Skip to content

Interior Shots

The interior_shots section in the markings response contains mechanics data for shots that are not jump shots or heaves.

Overview

Interior shots are any shots not classified as jump shots or heaves. This includes:

  • Layups — Shots near the basket that aren't dunks, lobs, or tips
  • Dunks — Any dunk or dunk attempt that isn't a lob
  • Floaters — One-handed overhand shots near the rim while facing the basket
  • Hooks — One-handed shots with back/side turned toward basket
  • Tips — One-handed redirections after a missed shot
  • Putbacks — Shots immediately after an offensive rebound without landing
  • Lobs — Shots where shooter receives a pass and shoots without landing

Sample Response

json
{
  "markings": {
    "interior_shots": [
      {
        "ball_release_height_in": 126.23,
        "ball_rim_distance_at_release_in": 16.22,
        "closest_toe_takeoff_distance_in": 86.84,
        "event_pbp_id": 7,
        "first_ball_in_hands_he_frame": 692,
        "first_ball_in_hands_wall_clock": "2025-12-23T01:10:45.989+00:00",
        "game_id_nba": "0022500404",
        "hand_to_hoop_center_distance": 18.7,
        "landing_feet": "left",
        "last_ball_in_hands_he_frame": 756,
        "last_ball_in_hands_wall_clock": "2025-12-23T01:10:47.056+00:00",
        "last_hand_to_touch_ball": "left",
        "last_left_foot_on_floor_he_frame": 730,
        "last_left_foot_on_floor_wall_clock": "2025-12-23T01:10:46.623+00:00",
        "last_right_foot_on_floor_he_frame": 725,
        "last_right_foot_on_floor_wall_clock": "2025-12-23T01:10:46.539+00:00",
        "neck_relative_to_feet_midpoint_xy_distance_in": 12.46,
        "neck_relative_to_knee_midpoint_xy_distance_in": 8.67,
        "neck_relative_to_mid_hip_xy_distance_in": 2.49,
        "pbp_event_id": 7,
        "shooter_id_nba": 203076,
        "shot_id_ctg": "shot_105f89542695fcebf740bb7c426ac4c3",
        "takeoff_feet": "both"
      }
    ]
  }
}

Fields

Identifiers

game_id_nba

Type: string

NBA game ID


shot_id_ctg

Type: string

CTG-generated unique shot ID (can join with shots)


shooter_id_nba

Type: integer

NBA player ID of the shooter


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

Checkpoints are key frames in the shooting motion. Fields ending in _he_frame are Hawk-Eye frame numbers (60 FPS).

first_ball_in_hands_he_frame

Type: integer

The first frame where the shooter is touching the ball with both hands and doesn't take both hands off the ball until the release of the shot.

NOTE

If the ball is never in both hands and only in one hand (for example, the shooter only gathers the ball with one hand and shoots it without putting the second hand on it, or they tip the ball with one hand) this will be the frame where the shooter's last continuous touch of the ball started before the release. If the data does not show any touch of the ball (because the data is bad or the player never touched the ball, like when a defender tips the ball in but someone else gets credit for the shot), this field will be null.


first_ball_in_hands_wall_clock

Type: string

UTC timestamp corresponding to first_ball_in_hands_he_frame. This field can be null for the same reasons as first_ball_in_hands_he_frame.


last_ball_in_hands_he_frame

Type: integer

Our estimate for the "release point" of the shot. This is the first frame where we are confident the ball is not touching either hand.

NOTE

This field can be null when our ball touch detection algorithm cannot identify the shooter's touch of the ball prior to release (e.g. due to missing or inconsistent tracking data).


last_ball_in_hands_wall_clock

Type: string

UTC timestamp corresponding to last_ball_in_hands_he_frame. This field can be null when upstream data issues prevent detection of the shooter's touch of the ball.


last_left_foot_on_floor_he_frame

Type: integer

Frame when left foot leaves floor. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


last_left_foot_on_floor_wall_clock

Type: string

UTC timestamp corresponding to last_left_foot_on_floor_he_frame. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


last_right_foot_on_floor_he_frame

Type: integer

Frame when right foot leaves floor. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


last_right_foot_on_floor_wall_clock

Type: string

UTC timestamp corresponding to last_right_foot_on_floor_he_frame. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


Shot Mechanics

last_hand_to_touch_ball

Type: string

Which hand the player shot with: right, left, or both (for two-handed dunks).

NOTE

This field can be null due to upstream data errors or if the player never touches the ball.


ball_release_height_in

Type: float | Unit: inches

Height of ball center above ground at release.

NOTE

This field can be null when the release frame is unknown.


ball_rim_distance_at_release_in

Type: float | Unit: inches

Distance from ball center to rim center at release.

NOTE

This field can be null when the release frame is unknown.


closest_toe_takeoff_distance_in

Type: float | Unit: inches

Distance from shooter's closest toe to the center of the basket at takeoff. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


hand_to_hoop_center_distance

Type: float | Unit: inches | Nullable: Yes

3D distance from shooting hand (thumb) to rim center at release. This field can be null when upstream data issues prevent proper identification of the release frame.


Footwork

takeoff_feet

Type: string

Which foot the shooter jumped from: right, left, or both. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


landing_feet

Type: string

Which foot landed first: right, left, or both. This field can be null when we do not detect the shooter's feet leaving the ground for the shot (either because the player does not jump or our methods are not sensitive to detect them).


Balance Metrics

These fields measure how balanced the shooter was at release.

A player standing straight up would have values close to 0. A player leaning significantly (e.g., extending for a layup) would have higher values.

neck_relative_to_feet_midpoint_xy_distance_in

Type: float | Unit: inches

Imagine looking at a player from straight overhead as they release their shot. This field measures the left-to-right distance (i.e. ignoring the height distance) between the player's neck and the point in between their left and right ankles.

This field can be null when upstream data issues prevent proper identification of the release frame.


neck_relative_to_knee_midpoint_xy_distance_in

Type: float | Unit: inches

Imagine looking at a player from straight overhead as they release their shot. This field measures the left-to-right distance (i.e. ignoring the height distance) between the player's neck and the point in between their left and right knees.

This field can be null when upstream data issues prevent proper identification of the release frame.


neck_relative_to_mid_hip_xy_distance_in

Type: float | Unit: inches

Imagine looking at a player from straight overhead as they release their shot. This field measures the left-to-right distance (i.e. ignoring the height distance) between the player's neck and their mid hip.

This field can be null when upstream data issues prevent proper identification of the release frame.