Appearance
Shots
The shots section in the markings response contains an object for each official field goal attempt in a game.
Overview
This data set provides complete shot information including timing, location, outcome, and classification. Every shot from the play by play data will appear here, and can be joined with more detailed mechanics data in jump_shots or interior_shots depending on the shot type.
Sample Response
json
{
"markings": {
"shots": [
{
"blocker_player_id_nba": null,
"chance_id_ctg": "chance_51bfc1fda2cc0deb125bee9988859667",
"end_game_clock": 708,
"end_he_frame": 761,
"end_shot_clock": 13,
"end_wall_clock": "2025-12-23T01:10:47.139+00:00",
"event_pbp_id": 7,
"game_id_nba": "0022500404",
"is_and_one": false,
"is_bank": false,
"is_blocked": false,
"is_fouled": false,
"is_made": true,
"is_three": false,
"is_tip": false,
"loc_x": 460.5,
"loc_y": 13.91,
"pbp_event_id": 7,
"period": 1,
"possession_id_ctg": "possession_640fb5737252cbe98b4f4a70dcee9d8f",
"shooter_id_nba": 203076,
"shot_distance_in": 42.82,
"shot_id_ctg": "shot_105f89542695fcebf740bb7c426ac4c3",
"shot_type": "layup",
"start_game_clock": 708,
"start_he_frame": 749,
"start_shot_clock": 14,
"start_wall_clock": "2025-12-23T01:10:46.939+00:00",
"team_id_nba": 1610612742
}
]
}
}Fields
Identifiers
shot_id_ctg
Type: string
CTG-generated unique shot ID
game_id_nba
Type: string
NBA game ID
chance_id_ctg
Type: string
CTG chance ID in which the shot occurred
possession_id_ctg
Type: string
CTG possession ID in which the shot occurred
shooter_id_nba
Type: integer
NBA player ID of the shooter
team_id_nba
Type: integer
NBA team ID of the shooting team
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.
Timing
period
Type: integer
Period in which the shot occurred (1-4 for regulation, 5+ for OT)
Shot Start
The shot start is defined as the first frame after the player releases the ball.
start_game_clock
Type: float
Game clock (seconds remaining in period) at shot start
start_shot_clock
Type: float
Shot clock at shot start
start_he_frame
Type: integer
Hawk-Eye frame at shot start
start_wall_clock
Type: string
UTC timestamp at shot start
Shot End
The shot end is defined as the first frame where the ball reaches basket height after the shot's peak. Specifically, it's the earliest of:
- Close to hoop: The first frame where the center of the ball is within 16 inches of the center of the hoop and at basket height (between 118-125 inches / ~10 feet)
- Below 10 feet: The first frame where the ball drops below 10 feet after reaching its peak
The shot's "peak" is the frame where the ball reaches its highest point and begins descending.
If neither condition is met within 5 seconds of the shot release, the peak frame itself is used as the shot end. (This can happen when a shot is blocked out of bounds, for example, so there is no ball tracking data with the ball below 10 feet.)
Nullable Fields
The shot end fields (end_game_clock, end_he_frame, end_shot_clock, end_wall_clock) can be null in rare cases where upstream HawkEye data has timing issues. When shot end cannot be determined, is_tip and shot_type will also be null.
end_game_clock
Type: float
Game clock at shot end. Can be null if shot end detection fails due to upstream data issues (see note above).
end_shot_clock
Type: float
Shot clock at shot end. Can be null if shot end detection fails due to upstream data issues (see note above).
end_he_frame
Type: integer
Hawk-Eye frame at shot end. Can be null if shot end detection fails due to upstream data issues (see note above).
end_wall_clock
Type: string
UTC timestamp at shot end. Can be null if shot end detection fails due to upstream data issues (see note above).
Shot Location
The shot location is defined as the shooter's centroid at the shot release frame.
shot_distance_in
Type: float | Unit: inches
Distance from the shot location (as defined above) to the center of the basket at the shot release frame. This distance is measured in 2D, i.e. as if you marked a spot on the floor where shooter's centroid was and then measured along the floor to the spot directly under the center of the basket.
loc_x
Type: float | Unit: inches
X coordinate of the shot location on the court
loc_y
Type: float | Unit: inches
Y coordinate of the shot location on the court
Shot Details
shot_type
Type: string
The shot_type field classifies the shot using 3D tracking data to analyze movement and release style. Can be null if shot end detection fails due to upstream data issues.
dunk: A dunk or dunk attempt that is not a lob.floater: A floater would be a shot taken near the rim and uses one hand to shoot overhand with the player largely facing the basket. A baby hook shot or push shot with the player's shoulder mostly turned to the basket would be different (see below). This also includes runners and shots from further away that are taken without a normal jump shot shooting motion, almost always with a one-handed push shooting motion.heave: A shot from very far away taken up against the end of the shot/game clock.hook: A shot taken primarily with one hand and with the back or side turned toward the basket, usually not moving toward the basket.jumper: A jump shot with two hands on the ball until pushing to release. This includes a large variety of jump shots like a standard jumper, a fadeaway out of the post, a pull up, etc.layup: Any shot near the basket that is not a dunk, lob, or tip. Layups and floaters can sometimes be difficult to distinguish. More weight is given to a shot being classified as a layup over a floater if it uses the backboard.lob: A shot near the basket where shooter receives a pass and shoots without landing first. Includes lob dunks.lost_ball_on_way_up: A shot where the ball is blocked or the player is fouled and loses the ball such that you can’t actually tell which type of shot it was going to be.putback: Player dunks or shoots immediately after an offensive rebound without landing.tip: Player hits the ball with one hand after a missed shot to tip it in without landing from their jump first. This does not include tips from passes, which would be considered lobs.
Jump Shots vs Interior Shots
In other sections of our markings, we separate jump shots from interior shots. jumper shots have detailed mechanics in the jump_shots section, while other shot types have their mechanics in interior_shots.
is_three
Type: boolean
true if the shot was a three-point attempt
is_tip
Type: boolean
true if the shot was a tip-in attempt. Can be null if shot end detection fails due to upstream data issues.
is_made
Type: boolean
true if the shot was made
is_bank
Type: boolean
The is_bank field indicates whether the ball hit the front side of the backboard and changed trajectory before hitting the rim.
- Returns
trueonly if the ball hits the front of the backboard first - Returns
falseif the ball hits the side, back, or top of the backboard first - Returns
falseif the ball hits the rim first - Returns
falseif the ball never gets near the backboard before the shot end frame (e.g. an airball) - Returns
nullif the shot is blocked (since we can't determine if it would have been a bank)
is_blocked
Type: boolean
true if the shot was blocked
blocker_player_id_nba
Type: integer
NBA player ID of the blocker. null if not blocked
is_fouled
Type: boolean
true if the shooter was fouled during the shot
is_and_one
Type: boolean
true if the shot was made and the shooter was fouled
