Skip to content

Transition Opportunities ​

The transition_opportunities section in the markings response contains one row per team-side for each transition opportunity.

Overview ​

A transition opportunity is defined as the first chance of a possession where it was not a sideline or baseline out of bounds, it was not after a timeout, and it was not an immediate turnover in the backcourt (e.g. a steal right after a rebound). In other words, this contains all chances where the offense could have possibly created an advantage before the defense was set after a change of possession that occurred on the other side of the court.

This data set provides team-level information for each transition opportunity, with one row per side (offense and defense).

For per-player transition data, see Transition Opportunities: Player.

This data uses the concept of a "scoring zone", which is defined as anywhere inside of a line 8 feet past halfcourt. In the image below, everything closer to the basket than the orange line is inside the scoring zone:

Scoring Zone

Sample Response ​

json
{
  "markings": {
    "transition_opportunities": [
      {
        "are_any_defenders_on_team_pressing": false,
        "avg_defender_speed": 5.21,
        "ball_distance_to_scoring_zone_x": 53.63,
        "ball_distance_to_three_point_zone_x": 67.63,
        "ball_in_paint_shot_clock": 12.0,
        "ball_seconds_to_paint": 8.27,
        "ball_seconds_to_scoring_zone": 6.13,
        "ball_seconds_to_three_point_zone": 10.7,
        "ball_speed_to_scoring_zone": 8.74,
        "ball_speed_to_three_point_zone": 6.32,
        "chance_id_ctg": "chance_6dda4f792e347155bb8d20ab207d75bd",
        "defensive_team_id_nba": 1610612740,
        "defenders_back": 5,
        "defenders_even": 0,
        "did_chance_continue": false,
        "game_id_nba": "0022500404",
        "halfcourt_start_frame": 18432,
        "is_defense_back": true,
        "is_transition": false,
        "num_backcourt_defenders": 0,
        "num_crashers_on_team": null,
        "num_opp_players_below_ft_extended": 0,
        "num_players_below_ft_extended": 0,
        "num_watchers_on_team": null,
        "offensive_team_id_nba": 1610612742,
        "outlet_height": 37.42,
        "pts_resulting_from_chance": 0,
        "scoring_zone_shot_clock": 19,
        "season": 2025,
        "season_type": "regular season",
        "sec_between_previous_chance_end_and_inbounds": 1.77,
        "side": "offense",
        "team_id_nba": 1610612742,
        "team_y_spread": 40.29,
        "widest_y_between_scoring_zones": 20.76,
        "widest_y_between_three_point_zones": 22.65
      }
    ]
  }
}

Fields ​

Identifiers ​

team_id_nba ​

Type: integer

NBA team ID


side ​

Type: string

Whether this row represents the offense or defense side


game_id_nba ​

Type: string

NBA game ID


chance_id_ctg ​

Type: string

CTG-generated chance ID


Context ​

season deprecated ​

Type: integer

Season year

Deprecated

This field is deprecated. It remains in the response for now. We plan to remove it during a later backfill.

Use game_id_nba with the Games endpoint (GET /pro/entities/games) to get season.


season_type deprecated ​

Type: string

Season type (e.g. regular season, playoff)

Deprecated

This field is deprecated. It remains in the response for now. We plan to remove it during a later backfill.

Use game_id_nba with the Games endpoint (GET /pro/entities/games) to get season_type. That endpoint uses NBA season types such as Regular Season and Playoffs.


offensive_team_id_nba ​

Type: integer

NBA team ID of the offensive team


defensive_team_id_nba ​

Type: integer

NBA team ID of the defensive team


is_transition ​

Type: boolean

true if we identify this chance as one that ended with the initial transition advantage still going. So if the defense is never able to get back and set or end the offense's transition advantage before the chance ending event (shot, turnover, etc.), this will be true.


halfcourt_start_frame ​

Type: integer | Nullable

For halfcourt transition opportunity rows, the frame when the chance stopped being treated as a transition opportunity. null for transition chances and cases where that timing is unavailable.


pts_resulting_from_chance ​

Type: integer

How many points were scored on this chance or putbacks that result from misses on this chance


did_chance_continue ​

Type: boolean | Nullable

true if the offense retains possession at the end of this chance (or at the end of a sequence of putbacks). For example, if the offense takes a shot, misses, gets an offensive rebound and attempts a putback, misses, attempts another putback, misses, and is fouled on the subsequent rebound, this would be true as they retain possession (though any points scored would no longer be attributed to transition). null if there is no following chance in the same period to compare against (e.g. the last chance of a quarter).


outlet_height ​

Type: float | Unit: feet | Nullable

The first-pass catch distance from the non-attacking baseline. This value is present only when the first pass goes to the primary transition initiator. A midcourt catch has a value of 47.


Ball Movement to Scoring Zone ​

ball_distance_to_scoring_zone_x ​

Type: float | Unit: feet | Nullable

When the new offense starts its transition, how far is the ball from the scoring zone along the x-coordinate dimension. For most chances this is the same as the chance start. On live-ball turnover starts, it is anchored at the new offense's first possession touch within the chance rather than the prior offense's losing event. null if the chance has no frontcourt_frame (the ball never crosses half-court during the chance).


scoring_zone_shot_clock ​

Type: integer | Nullable

The shot clock when the ball enters the scoring zone. null if the ball never enters the scoring zone during the chance, or if the chance has no frontcourt_frame.


ball_seconds_to_scoring_zone ​

Type: float | Unit: seconds | Nullable

How many seconds elapsed between the start of the transition and the ball entering the scoring zone. See ball_distance_to_scoring_zone_x for the exact anchor used. null if the ball never enters the scoring zone during the chance, or if the chance has no frontcourt_frame.


ball_speed_to_scoring_zone ​

Type: float | Unit: feet/sec | Nullable

ball_distance_to_scoring_zone_x / ball_seconds_to_scoring_zone. Measures how fast the ball reached the scoring zone accounting for distance, not actual ball speed. null if the ball never enters the scoring zone, if the chance has no frontcourt_frame, or if the ball is already in the scoring zone when the new offense starts its transition (zero elapsed time).


Ball Movement to Three-Point Zone ​

ball_distance_to_three_point_zone_x ​

Type: float | Unit: feet | Nullable

Same as ball_distance_to_scoring_zone_x, except using the top of the 3pt arc extended instead of the scoring zone. null under the same conditions (chance has no frontcourt_frame).


ball_seconds_to_three_point_zone ​

Type: float | Unit: seconds | Nullable

Same as ball_seconds_to_scoring_zone, except using the top of the 3pt arc extended instead of the scoring zone. null if the ball never reaches the three-point zone during the chance, or if the chance has no frontcourt_frame.


ball_speed_to_three_point_zone ​

Type: float | Unit: feet/sec | Nullable

Same as ball_speed_to_scoring_zone, except using the top of the 3pt arc extended instead of the scoring zone. null if the ball never reaches the three-point zone, if the chance has no frontcourt_frame, or if the ball is already past the three-point line when the new offense starts its transition.


Ball Movement to Paint ​

ball_in_paint_shot_clock ​

Type: float | Nullable

The shot clock at the first frame when a player paint touch is identified. A qualifying paint touch is counted if the ball and both feet are in the paint during the touch or shortly after it ends (to capture in air passes or fouls while driving). null if no qualifying paint touch occurs during the chance, or if the chance has no frontcourt_frame.


ball_seconds_to_paint ​

Type: float | Unit: seconds | Nullable

The amount of time from chance_start_frame to the first frame when a player paint touch is identified. A qualifying paint touch is counted if the ball and both feet are in the paint during the touch or shortly after it ends (to capture in air passes or fouls while driving). null if no qualifying paint touch occurs.


Defensive Readiness ​

defenders_back ​

Type: integer | Nullable

How many defenders would be judged as having gotten back (i.e. reasonably ahead of the ball) when the ball entered the frontcourt during a player's possession touch. If the ball is passed ahead into the frontcourt and the receiver is inside the scoring zone at pass reception, any players inside the scoring zone are counted as back. null for chances where the ball never enters the frontcourt during a player's possession touch.


defenders_even ​

Type: integer | Nullable

How many defenders are roughly even with the ball when it enters the frontcourt during a player's possession touch. null for chances where the ball never enters the frontcourt during a player's possession touch.


avg_defender_speed ​

Type: float | Unit: feet/sec | Nullable

The average speed of the 5 defensive players when the ball is first in the frontcourt during a player's possession touch. null for chances where the ball never enters the frontcourt during a player's possession touch.


is_defense_back ​

Type: boolean | Nullable

true if the defense has 5 defenders back or 4 defenders back with a low average speed. null under the same conditions as defenders_back.


are_any_defenders_on_team_pressing ​

Type: boolean

true if any defender on the team is judged as applying backcourt pressure.


num_backcourt_defenders ​

Type: integer | Nullable

Number of defenders that are judged as applying backcourt pressure on this chance.


Team Composition ​

num_watchers_on_team ​

Type: integer | Nullable

How many players on the team didn't move much between the shot release and the rebound on the previous shot (i.e. stood and watched). Only available for the team that transitions to defense; null for the team that transitions to offense.


num_crashers_on_team ​

Type: integer | Nullable

How many players on the team crashed in for the offensive rebound on the previous shot. Only available for the team that transitions to defense; null for the team that transitions to offense.


num_players_below_ft_extended ​

Type: integer

How many players on this team were below the free throw line extended at the start of this chance.


num_opp_players_below_ft_extended ​

Type: integer

How many opposing players were below the free throw line extended at the start of this chance.


team_y_spread ​

Type: float | Unit: feet | Nullable

A measurement of how wide the team gets in transition, measured by finding the distance between the widest any player gets on either side of the court when running between the two scoring zones. null if the chance has no frontcourt_frame.


widest_y_between_scoring_zones ​

Type: float | Unit: feet | Nullable

The widest y-coordinate reached by any player on this team when running between the scoring zones. null if the chance has no frontcourt_frame.


widest_y_between_three_point_zones ​

Type: float | Unit: feet | Nullable

Same as widest_y_between_scoring_zones, except using the top of the 3pt arc extended instead of the scoring zone. null under the same conditions (chance has no frontcourt_frame).


Inbounds Timing ​

sec_between_previous_chance_end_and_inbounds ​

Type: float | Unit: seconds | Nullable

Time between the previous chance ending and the inbounds. null if there's no inbounds to start this chance.