Skip to content

Passes

The passes section in the markings response contains an object for every pass that we detect in the game.

Overview

We attempt to detect both completed and incomplete passes. Incomplete passes can be difficult to differentiate from other situations where a player loses the ball, but we use a combination of ball trajectory and player position to make a best guess.

We also try to include controlled tips or "touch passes", where a player intentionally deflects the ball to a teammate. This includes rebound tip outs to teammates. But once again, this is an area that can be difficult to accurately differentiate from uncontrolled tips.

We filter out passes that occur after a made basket before the ball is inbounded, for example when one teammate collects the ball after it goes through the net and tosses it to a teammate to inbound.

Sample Response

json
{
  "markings": {
    "passes": [
      {
        "ball_hit_ground_during_completed_pass": false,
        "catch_distance_forward_in": 23.68,
        "catch_distance_from_mid_chest_in": 35.37,
        "catch_distance_left_right_in": 17.8,
        "catch_height_above_mid_hip_in": 31.74,
        "catch_height_above_standing_hip_in": 32.98,
        "catch_height_in": 75.18,
        "chance_id_ctg": "chance_e9d3153f5458a3aa36815fc17753fd89",
        "game_id_nba": "0022500404",
        "intended_receiver_id_ctg": 1629023,
        "intended_receiver_id_nba": 1629023,
        "is_jump_pass": false,
        "is_one_handed_pass": true,
        "nba_game_id": "0022500404",
        "pass_handedness": "right",
        "pass_id_ctg": "pass_0079826aceb4eba4ac64d619ed795067",
        "pass_release_he_frame": 298364,
        "pass_release_wall_clock": "2025-12-23T02:49:05.174+00:00",
        "passer_id_ctg": 1630314,
        "passer_id_nba": 1630314,
        "receiver_jumped_for_touch": false,
        "receiver_touch_start_he_frame": 298392,
        "receiver_touch_start_wall_clock": "2025-12-23T02:49:05.641+00:00",
        "receiver_touched_ball": true
      }
    ]
  }
}

Fields

Identifiers

game_id_nba

Type: string

NBA game ID


nba_game_id deprecated

Type: string

NBA game ID

Deprecated

Use game_id_nba instead. This field will be removed in a future version.


pass_id_ctg

Type: string

CTG-generated unique pass ID.


chance_id_ctg

Type: string

CTG chance ID for the offensive opportunity this pass occurred in. null if no matching chance is found within 3 seconds of the pass (which may indicate a data error with a missing chance).


passer_id_nba

Type: integer

NBA player ID of the passer.


passer_id_ctg deprecated

Type: integer

NBA player ID of the passer

Deprecated

Use passer_id_nba instead. This field will be removed in a future version.


intended_receiver_id_nba

Type: integer

NBA player ID of the intended receiver. For a completed pass, this is the player who next touches the ball. For an incomplete pass, we use ball trajectory and player position data to make our best guess at who the pass was intended for.


intended_receiver_id_ctg deprecated

Type: integer

NBA player ID of the intended receiver

Deprecated

Use intended_receiver_id_nba instead. This field will be removed in a future version.


Pass Timing

pass_release_he_frame

Type: integer

Hawk-Eye frame when the pass left the passer's hands.


pass_release_wall_clock

Type: string

UTC timestamp corresponding to pass_release_he_frame.


receiver_touch_start_he_frame

Type: integer

Hawk-Eye frame when the intended receiver first touched the ball. null if the receiver never touched the ball (e.g. on an incomplete pass)


receiver_touch_start_wall_clock

Type: string

UTC timestamp corresponding to receiver_touch_start_he_frame. null if the receiver never touched the ball.


Pass Style

is_one_handed_pass

Type: boolean

true if the pass was thrown with only one hand on the ball for a meaningful portion of the throw. null if player pose data is unavailable for the passer at the time of the pass


pass_handedness

Type: string

Which hand primarily threw the pass:

  • right
  • left
  • both
  • null if player pose data is unavailable for the passer at the time of the pass

NOTE

A pass that is not one-handed can still be primarily thrown with either the right or left hand if both hands are on the ball close to the release of the pass but one hand does the pushing.


is_jump_pass

Type: boolean

true if the passer was in the air when the ball was released. null if player pose data is unavailable for the passer at the time of the pass


Reception Data

receiver_touched_ball

Type: boolean

true if the intended receiver touched the ball at any point near the end of the pass (including incomplete passes).


receiver_jumped_for_touch

Type: boolean

true if the receiver's first touch occurred while they were in the air. null if the receiver never touched the ball (e.g. on an incomplete pass)


ball_hit_ground_during_completed_pass

Type: boolean

true if the ball hit the ground between release and the receiver's first touch. null if the receiver never touched the ball (e.g. on an incomplete pass)

NOTE

Usually the ball hitting the ground on a completed pass is intentional, like a bounce pass, but because we can't easily infer intention from the tracking data this field is intentionally named to describe what we're measuring: whether the ball hit the ground between release and the receiver's first touch, not whether it was a bounce pass.


Catch Location

These fields measure where the receiver caught the ball relative to their body.

catch_height_in

Type: float | Unit: inches

Ball height above the floor at the receiver's first touch. null if the receiver never touched the ball (e.g. on an incomplete pass)


catch_height_above_mid_hip_in

Type: float | Unit: inches

Ball height above the receiver's mid hip at first touch. null if the receiver never touched the ball (e.g. on an incomplete pass)


catch_height_above_standing_hip_in

Type: float | Unit: inches

Ball height above the receiver's estimated standing hip height at first touch. This helps adjust for receivers bending down to catch low passes. null if the receiver never touched the ball (e.g. on an incomplete pass)


catch_distance_from_mid_chest_in

Type: float | Unit: inches

Distance from the ball center to the receiver's mid-chest point at first touch. We compute the mid-chest as the midpoint between the mid hip and neck. null if the receiver never touched the ball (e.g. on an incomplete pass)


catch_distance_left_right_in

Type: float | Unit: inches

How many inches to the left/right the center of the ball is from the center of the player’s chest (based on which way the shoulders are facing). This is an absolute value, i.e. it does not indicate direction only the magnitude. A value close to 0 would indicate the ball is caught in the middle of the player’s body, while a high value would indicate it is way off to the side of the player (again, based on which way the player’s shoulders are facing when the ball is first touched). null if the receiver never touched the ball (e.g. on an incomplete pass)


catch_distance_forward_in

Type: float | Unit: inches

How many inches in front of the player the center of the ball is when it is first touched. A value close to 0 would indicate the ball is first touched very close to the player’s body, while a high value would indicate it is touched far out in front of a player’s body. null if the receiver never touched the ball (e.g. on an incomplete pass)