Appearance
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.
