Skip to content

Changelog

Upcoming

Added

  • New shooter_context field on the Shots data set - classifies each shot as coming from the primary ballhandler, an off-ball player, or no linked play context when available.

Fixed

  • Made-basket inbound Passes - fixed cases where a later live-ball pass after a made basket could be classified as an inbound pass even though it was on the wrong baseline

[0.6.0-beta] - 2026-07-01

Added

  • New screen context fields on Ball Screens, Off Ball Screens, and Ball Screens - Off Ball Players data sets - added illegal-screen, roller-behind, double-screener, and screener-defender context when available.
  • Added drive_outcome on the Drives data set to classify how each drive ended, including dribble-outs, passes to the interior or perimeter, shots, turnovers, and stoppages.
  • New is_team_turnover field on the Turnovers data set - indicates whether the official turnover is assigned to the team rather than an individual player.
  • New turn_over_shoulder and turn_over_shoulder_degrees fields on the Shots data set - classifies whether the shooter turned over the left shoulder, right shoulder, or neither shoulder into the shooting motion, plus the estimated size of that turn.
  • New fields on Drives, Possession Touches, Dribbles, Shots, and Turnovers data sets - added additional location, region, start-type, directness, paint-creation, and passer context fields.
  • New Violations data set - added official violation events with player, team, timing, location, region, and play-by-play identifiers.
  • New Jump Balls data set - added one row per jump ball, including the players who won, lost, and recovered the jump ball when available.
  • New location and movement context fields on Shots, Dribbles, and Possession Touches data sets, plus new defender-grain Shots Location Velocity Defender, Dribbles Location Velocity Defender, and Possession Touches Location Velocity Defender data sets.
  • New Challenges data set - added official challenge events with team, timing, play-by-play context, and result when available.
  • New NBA entity endpoints - added team, player, game, and game-specific player participation reference data through the Pro API.
  • New outcome_pbp_id field on Chances data set - the ID of the play by play event associated with each chance_outcome.
  • New bring-up ballhandler fields on Chances data set - added bring_up_ball_handler_id_nba and bring_up_ball_handler_defender_id_nba to identify the player who brought the ball up the floor and their matched defender when available.
  • New sequence fields on Chances data set - added chance and possession ordering, previous and next chance and possession links, and home score differential at the start of each chance.
  • New frontcourt timing fields on Chances data set - added shot-clock timing for when the ball first enters the frontcourt, and added separate timing for when it first enters the frontcourt during an offensive player's possession along with the associated, shot clock and wall-clock details.
  • New rebound-location fields on Shots Location Velocity Defender and After Shot Positioning data sets - added player and defender locations at key post-shot rebound moments when available.
  • New halfcourt_start_frame field on Transition Opportunities data set - identifies when a first-chance halfcourt possession stopped being treated as a transition opportunity when that timing is available.
  • New fields on Interior Shots data set - added jump timing and gather distance fields. The gather distance is measured to the shooter's offensive basket.
  • New did_ballhandler_dribble field on Advantage Creation 1v1 data set - indicates whether the ball handler dribbled during the 1v1 before their possession touch ended.
  • New pass reversal fields on Passes and Chances data sets - added is_reversal to passes and reversals to chances to identify passes that move the ball from one side of the court to the other.
  • New ballhandler start-with-ball fields on Advantage Creation 1v1 data set - identifies the 1v1 start point with the ball, including timing and location fields when available.
  • New fields on Passes data set - added pass location, ball location, court region, backcourt, turnover, secondary assist, and play-by-play context fields.
  • New fields on Fouls data set - added foul classification, take foul, shooting foul, charge, and fouling/fouled-player location fields when available.
  • New location fields on Closeouts data set - added defender and ballhandler locations at key closeout frames when available.
  • New drive start location fields on Drives data set - added start_loc_x, start_loc_y, and attacking_positive_x_basket to identify where the driver began the drive and which basket the offense was attacking.
  • New defensive role fields on Drives: Off Ball Players data set - added flags for help position, dig position, screener defender, and switched-screen defender roles on drives.
  • New receiver touch fields on Passes data set - added receiver touch duration and dribble count for completed passes with linked receiver touches.

Changed

  • Tightened reversal classification on Passes and Chances data sets so middle-of-floor passes after multiple dribbles in the middle are no longer counted as reversals when the pass stays on the same side of the court.
  • Updated reversal classification on Passes and Chances data sets to use established strong-side context, reducing ordinary side-to-side passes being counted as reversals and allowing qualifying incomplete passes to count when the intended receiver location is available.

Fixed

  • Duplicate inbound Possession Touches - fixed rare cases where a single inbound touch could appear as duplicate possession touches with the same start time. These inbound touches now appear as one continuous touch.
  • Overextended Drives entries - fixed cases where a drive could continue through later ballhandler movement away from the basket, which could suppress valid drives or make existing drive end times too late.
  • Team-assigned Fouls - fixed cases where fouls assigned to a team rather than an individual player could be missing from the fouls data set. For these fouls, player_id_nba is now null; fouled_player_id_nba can also be null when the official play-by-play does not identify a fouled player.
  • Loose-ball foul rebound Chances and Rebounds - fixed rare cases where a continuing chance after a rebound and immediate loose-ball foul could start from the same rebound as the short foul chance, which could duplicate the related rebound output. The continuing chance now starts from the foul.
  • Missing After Shot Positioning rows - fixed rare cases where unusual shot timing around dunks, fouled shots, and other close-to-rim attempts could omit after-shot positioning rows. Shot end timing is now kept after shot release so related positioning rows can be returned.
  • Transition Opportunities filtering - fixed cases where continuation chances after the first chance of a possession could be included as separate transition opportunities.
  • Shot timing on Shots data set - fixed missed shooting-foul shots that could be timed at the whistle or clock stoppage instead of the actual shot release.
  • End-clock timing on Chances data set - fixed cases where a chance's end clock could reflect the related event time instead of the actual delivered end frame, especially after chance boundary adjustments.
  • Interior shot contests on Interior Shot Contests and Shots data sets - fixed cases where a close defender could be omitted from interior shot contest outputs when the shooter did not have a reliable jump-start checkpoint, especially around shooting fouls and unusual release timing.
  • End-boundary dribbles on Possession Touches and touch-derived outputs - fixed cases where a dribble immediately after a possession touch could be excluded from the touch's dribble count, which could also affect completed-pass receiver touch dribble counts.
  • Post-touch Drives entries - tightened drive filtering so a drive is no longer emitted after the driver has already lost possession.
  • Stopped-clock Possession Touches splitting - fixed cases where one touch could incorrectly span a foul, timeout, free throw, violation, or other stoppage before play resumed.
  • Possession-change and restart boundaries on Chances data set - fixed rare cases where chance boundaries could span a live-ball possession change or prefer a clock fallback over the actual inbound restart, which could omit a short following chance or assign the chance outcome to the wrong segment.
  • Catch-and-shoot Passes completion - fixed rare cases where a completed pass to a shooter could be marked as a turnover and incomplete when the defense gained possession after the shot.
  • Shot-clock turnover Chances outcomes - fixed cases where a shot-clock violation occurred while the shot was in the air. In these cases, we had a chance for the shot but not for the subsequent shot-clock violation turnover. We now create a second chance from the team offensive rebound until the shot-clock violation.
  • Post-block recovery Passes detection - fixed rare cases where a controlled pass after a blocked shot could be omitted when the receiver immediately caught and shot the ball.
  • Close handoff-style Passes - fixed rare cases where close same-team ball exchanges could appear as near-zero-length passes instead of covering the actual transfer to the receiver.
  • Sparse tracking gaps on Passes and touch-derived data sets - fixed rare cases where noisy hand/ball matches could create an impossibly long touch across stoppages or periods, which could suppress valid passes and affect other touch-derived outputs.
  • Missed free throw offensive rebound Chances deduplication - fixed rare cases where a missed free throw offensive rebound could correctly create an ft_oreb chance while also leaving behind an extra sideline-inbounds chance ending at the same rebound.
  • Chance context classification on Chances data set - fixed cases where transition, putback, press, backcourt, and running-out-clock chances could be classified too early or assigned to the wrong context when the chance included late fouls, rebound scrambles, high catches, or short backcourt sequences.
  • Personal-foul Chances splitting - fixed rare cases where a non-shooting personal foul immediately before a made shot could be merged into the following scoring chance instead of appearing as its own chance.
  • Basket-relative measurements on Interior Shots data set - fixed rare cases where fields measured relative to the basket (such as ball-to-rim distance at release and shooting-hand identification) could be calculated against the opposite basket when the court-direction signal briefly flipped around the shot.
  • Set point detection on Jump Shots and Free Throws data sets - fixed rare cases where the set point could be identified using the wrong basket direction, which could shift set point timing and related measurement fields.
  • Start-clock timing on Chances data set - fixed cases where a chance's start clock could reflect the related event time instead of the actual delivered start frame, especially for chances beginning after rebounds.
  • Team turnover handling - fixed cases where team turnovers, such as shot clock violations, could be missing from outputs that identify how chances ended.
  • Team rebound Chances after missed shots - fixed cases where chances after missed field goals with team rebounds could be missing, assigned to the wrong offensive team, or fail to split correctly when followed by an immediate loose-ball foul.
  • Post-make Passes filtering - tightened filtering so non-inbound passes after made baskets are less likely to appear before the actual inbound pass.
  • Jump-ball tap Passes filtering - fixed rare cases where a jump-ball tap could appear as a pass when the ball was not controlled by a teammate.
  • Jump-ball Chances outcomes - fixed rare cases where duplicate jump-ball event rows could cause a chance to end as a jump ball instead of continuing to the following foul or shot outcome.
  • Post-timeout Chances boundaries - fixed cases where a chance after a timeout could start too early and be classified with the wrong inbound start type, especially when play restarted from the sideline.
  • Technical free throw Chances start-type classification - fixed cases where chances after made technical free throws could be shown with a start type of ftm instead of the inbound start type used to resume play.
  • Rebound-start timing on Chances data set - fixed cases where chances beginning with rebounds could start after the rebound action or include action from the previous shot sequence, which may adjust chance start times and add missing short rebound-to-foul chances.
  • Out-of-bounds retained possession attribution on Chances data set - fixed cases where a chance beginning from an out-of-bounds retained possession could be assigned to the wrong offensive team, which could cause following shots and 1v1 outcomes to be attributed to the previous chance.
  • Missed free throw team-rebound Chances splitting - fixed rare cases where a missed final free throw followed by a team rebound could be classified as a sideline inbound, or could be missing the 1-frame rebound-to-foul chance when followed by an immediate loose-ball foul.
  • Post-putback Chances start-type classification - fixed cases where the possession after a made putback could be shown with a start type of fg_oreb instead of fgm.
  • Immediate offensive rebound putbacks on Chances data set - fixed rare cases where a made putback after an offensive rebound at the same game clock could be merged into the previous shot chance, which now separates the putback and following possession correctly.
  • Same-clock putback boundaries on Chances data set - fixed rare cases where offensive rebound chances could extend past an immediate made putback and end on a later event from the next possession.
  • Retained out-of-bounds Chances classification - fixed cases where retained out-of-bounds chances could be shown as missed-shot chances or assigned to the wrong offensive team.
  • Same-clock Chances event grouping - fixed rare cases where distinct chance-ending events at the same game clock could be collapsed together, causing made putbacks or following possession segments to be omitted.
  • Chance context after steals on Chances data set - fixed rare cases where transition chances that began with a steal could be treated as attacking the wrong basket.
  • Rebound-start Chances classification - fixed cases where chances beginning with offensive rebounds, defensive rebounds, or loose-ball fouls during rebounds could have the wrong offensive team or chance_start_type.
  • Shot locations on Shots data set - fixed rare cases where two-point shots could be assigned to the wrong shooter or release location, causing implausibly long shot distances.
  • Court regions on Fouls and Violations data sets - fixed court-region assignment to use the correct offensive basket when a location is available.

[0.5.0-beta] - 2026-05-21

Added

  • New defender fields on Possession Touches data set - added touch_start_defender_id and touch_end_defender_id, based on the ballhandler's last clear matchup at the possession touch start and end frames.
  • New Chance Matchups data set - added per-player offensive and defensive matchup context for each chance, including clear assignments and probability-based matchup estimates at chance checkpoints.
  • New chance_context field on Chances data set - classifies each chance as transition, halfcourt, press, backcourt, putback, etc.
  • New potential assist fields on Passes and Shots data sets - added flags for passes that would very likely be assists if the shot was made, and shots that came from such a pass, plus pass and possession-touch links on shots.
  • New official assist fields on Passes and Shots data sets - added flags for officially scored assists.
  • New free throw trip summary fields on Free Throws data set - added fields showing each free throw's number within its trip, plus made and attempted free throw counts for the trip.
  • New dribble count fields on Ball Screens data set - added ballhandler_num_dribbles_after_screen and handoff_screener_num_dribbles_before_screen to describe how each player used the ball around the screen.
  • New is_quick_no_dribble_shot field on Shots data set - indicates whether a shot came after a short touch with no dribbles, serving as the current catch-and-shoot equivalent.
  • New led_to_event fields on Ball Screens, Off Ball Screens, Advantage Creation 1v1 data sets - added led_to_event, event_type, pbp_event_id, and event_frame_number_he to identify when any of these actions is deemed to have led to the chance ending event.
  • New ball_hoop_distance_min field on Drives and Advantage Creation 1v1 data sets - shows the closest the ball got to the hoop during the action.

Fixed

  • Incorrectly split Drives entries - fixed cases where one continuous drive could be incorrectly split into multiple consecutive drive entries.
  • Missing Chances around made putbacks - fixed rare cases where a made putback could be missing as a chance-ending event, which could cause the following possession segment to be omitted.
  • Out-of-bounds cut regions on Cuts data set - fixed cases where start_region, end_region, or after_region could be null even though the cutter's location was known but outside the normal court area. These locations now return out_of_bounds.
  • Possession touch turnover outcomes on Possession Touches data set - fixed rare cases where a possession touch could remain unknown even when the ballhandler committed a turnover during that same touch.
  • Shot end frame calculation on Shots data set - fixed rare cases where a shot end frame could be missing when ball tracking disappears after release before the normal shot-end trajectory logic can identify an end frame.
  • Duplicate ball screen entries on Ball Screens data set - fixed edge cases where one ball screen action could incorrectly appear as multiple consecutive entries.
  • Overlapping Chances causing duplicate downstream events - fixed rare cases where one chance fully contained the start of the next chance, which could cause the same event (e.g. a cut) to be attributed to two different chances.

Changed

  • Changed default stream_type to processed on /markings endpoint - the default is now to return the processed data, rather than the delayed data if not stream_type is specified.
  • Updated is_after_timeout on Chances data set to only mark chances that begin from a timeout or start a period. Chances following replay reviews are no longer marked as after-timeout unless they also meet one of those conditions.

[0.4.0-beta] - 2026-05-01

Added

  • New ballhandler_movement_side field on Ball Screens and Drives — indicates whether the ballhandler moved left or right during the action when that context is available.
  • New ballhandler possession-touch linkage fields on Ball Screens, Off Ball Screens, Advantage Creation 1v1, Closeouts, and Drives - added ballhandler_outcome, ballhandler_possession_touch_id, and ballhandler_possession_touch_outcome_id where applicable, plus drive_id links on ball screens, off-ball screens, 1v1s, closeouts, and Possession Touches.
  • New shot make probability fields on Shots data set - added league_avg_make_probability_at_release and player_adj_make_probability_at_release.
  • New pre-shot touch fields on Shots data set - Added num_dribbles_during_touch (number of dribbles during the touch that preceded the shot) and touch_time_before_shot (duration of that touch in seconds)
  • New shooter movement context fields on Shots data set - Added shooter_velocity_before_shot, shooter_velocity_after_shot, shooter_acceleration, shooter_rim_movement_angle_before_shot, shooter_rim_movement_angle_after_shot, and num_close_teammates
  • New is_direct field on Drives, Closeouts, Passes, Ball Screens, Off Ball Screens, and Advantage Creation 1v1 — indicates whether the action ended in a direct scoring outcome (the primary player shot, drew a foul, or turned the ball over, or made a quick pass to a receiver who shot within one dribble of catching it)
  • New takeoff_feet and landing_feet fields on Jumps data set - Classifies which foot or feet the player took off from and landed on (left, right, or both; null when footwork cannot be determined)
  • New ballhandler_defender_initial_route field on Ball Screens data set - Classifies how the original ballhandler defender initially navigates the screen (over, under, or none)
  • New ballhandler_defender_switch_type and screener_defender_switch_type fields on Ball Screens data set - Classifies whether each original defender switched (normal/late) or stayed with assignment (none)
  • New screener_defender_initial_position field on Ball Screens data set - Classifies the screener defender's starting level in coverage (above, level, drop, deep)
  • New screener_defender_after_screen_defense field on Ball Screens data set - Classifies the screener defender's after-screen coverage (drop, drop_contest, switch, hedge, blitz, contain, bluff, none)
  • New screener_action field on Ball Screens data set - Classifies what the screener does after the ball screen (roll, short_roll, pop, mid_post, move_to_screen, none)
  • New rejected_screen and slip_screen_type fields on Ball Screens data set - Classifies whether the ballhandler rejected the screen and whether the screener slipped (none, quick, slow)

Fixed

  • Improved pass completion accuracy on Passes data set - fixed rare cases where passes were incorrectly marked incomplete when the intended receiver caught the ball and shot immediately before the opposing team gained possession.
  • Pass turnover classification on Passes data set - fixed rare cases where incomplete passes tied to a later dead-ball turnover were not marked as turnovers.
  • Incorrect splitting of possession touches on Possession Touches - fixed a rare issue where a possession touch could be incorrectly split into two separate touches.
  • Duplicate jump_shot_footwork_type rows on Jump Shots data set - fixed a rare issue where duplicate upstream shot-touch links could cause jump shot footwork outputs to fan out into duplicate rows for the same shot.
  • Bug in screener defender attribution on Ball Screens data set - fixed rare issue where the on ball defender was sometimes also marked as the screener defender.
  • False inbound tagging on Possession Touches and Passes data sets - fixed rare cases where live-ball out of bounds save plays could be mislabeled as inbounds passes and certain post-FGM inbound touches could show up as duplicate possession touches.
  • Improved classification of edge case in Advantage Creation 1v1 data set - improved handling of 1v1s where the floor is very static and the ballhandler doesn't really go anywhere but we can infer from the static floor that it was a 1v1 attempt.
  • Improved classification of corner movement and players heading out of bounds on After Shot Positioning data set - players in the corners who headed up the court at an angle are now separated better into actually getting back compared to positioning for an offensive rebound. Additionally, players headed out of bounds are more accurately classified, paritcularly those who just shot, and these players are not marked as positioning for an offensive rebound.

Changed

  • Expanded paint-touch qualification logic on Possession Touches, Chances, and Possessions data sets to handle edge cases.
  • Improved closeout_result classification on Closeouts data set - updated classification logic to improve accuracy in certain edge cases.

[0.3.0-alpha] - 2026-03-11

Added

  • New ball_handler_loc_x, ball_handler_loc_y, and attacking_positive_x_basket fields on Advantage Creation 1v1 data set - Location coordinates of the ball handler at the start frame, along with a flag indicating which basket the offensive team is attacking
  • New screener_loc_x, screener_loc_y, ball_handler_loc_x, ball_handler_loc_y, and attacking_positive_x_basket fields on Ball Screens data set - Location coordinates of the screener and ball handler at the screening frame, along with a flag indicating which basket the offensive team is attacking
  • New screen detail fields on Ball Screens data set - screener_hoop_distance, screener_defender_hoop_distance_screen_start, screener_defender_hoop_distance_max, screener_defender_hoop_distance_diff, screener_defender_hoop_distance_max_diff, was_screener_defender_in_3pt_area_at_screen, did_ball_get_behind_screener_defender, screener_hoop_distance_min, ball_hoop_distance_min, ballhandler_outcome, screener_outcome, did_ballhandler_pass_to_screener, screen_distance_to_center_court, screen_distance_to_baseline, and did_ballhandler_dribble_after_screen for richer screen context and outcomes (distances in feet)
  • New Off Ball Screens data set
  • New chance_id_ctg and possession_id_ctg fields on Ball Screens and Off Ball Screens data sets - CTG-generated identifiers linking each screen event to its parent chance and possession
  • New paint-touch fields on Possession Touches, Chances, and Possessions data sets - Added has_paint_touch_during_possession to possession touches and total_paint_touches rollups to chances/possessions based on touches where the ball and both feet are in the paint.

Changed

  • Consecutive Chances no longer share the same start and end frame - When one chance ends and another begins immediately (rebounds, loose ball fouls, live ball turnovers), the new chance now starts one frame later to avoid frame overlap between consecutive chances.
  • Ball Screens end-frame timing now caps at ball-handler touch end - Ball screen windows now end no later than the end of the ball-handler possession touch that contains the screening frame, which prevents screen windows from lingering after the on-ball action has ended.

Fixed

  • Switch + roll handling in Ball Screens data set - In cases where a player set a ball screen, the defense switched, and then the screener rolled, they would sometimes end up facing the switched defender which would trigger our ball screen model to think they were setting a new screen. We have added more safeguards to better handle these cases.
  • Inbound possession touch robustness on Possession Touches data set - Improved handling of rare edge cases in inbound timing and touch boundary selection so outputs are more stable and consistent in ambiguous tracking/event scenarios.
  • Hoop-relative field accuracy across multiple data sets - Several hoop-relative measurements (rim distance, shot angle, contest distance, etc.) were occasionally computed against the wrong basket due to reliance on Hawk-Eye's attacking_positive_x field, which can be inaccurate at times. Basket side is now determined from a stable period- and team-level source, making these calculations consistent across Jump Shots, Jump Shot Contests, Free Throws, Shots, Interior Shot Contests, Closeouts, Contested Rebounds, and Jumps. Hoop-relative fields on Jumps will now return null when no reliable team context is available within 5 seconds of the jump, rather than returning a value computed against a potentially incorrect basket.
  • Period assignment on Rebounds data set - Fixed a bug where rebounds sometimes had incorrect period values in very rare cases at the end of periods; this had downstream effects on chance start and end frames.
  • Shot end frame calculation on Shots data set - Previously, when two shots occurred close together (e.g. blocked shots and putback shots), the end frame was incorrectly assigned to the end frame of the subsequent shot. We now cap shot end frames to the frame before the next shot starts in these cases.
  • Chance start timing (2D fallback) on Chances data set - During inbounds (particularly after long stoppages), ball and limb tracking can be highly error prone. Previously, we were using the first time we detected the inbounder touching the ball as the start of the chance in these cases, however in cases with bad upstream data this meant chances were starting later than they should have. This change makes it so we now use a 2D-based fallback to compensate in these situations, looking for when the ball is close to the inbounder's body. This may start chances too early sometimes, but this seems to be a more tolerable error than starting them too late.
  • Turnover frame timing on Chances data set - We found some cases where chance ends were incorrect on certain types of live ball turnovers. We have implemented a fix that should lower the error rate.
  • Inbound attempt deflected out of bounds included in Chances data set - When the ball is deflected out of bounds during an inbound (e.g. batted away before the pass is caught), we previously would miss categorizing these as chances. We now correctly treat this as a chance-ending stoppage. The chance end time aligns to the out-of-bounds event, and these sequences are handled consistently with other stoppages.
  • Clock flicker filtering on Chances data set - Added robustness to erroneous upstream clock stop/start flicker events by treating brief stop-then-start pairs (within 1 second) as noise and filtering them out.
  • Touch outcome for passes near lost-ball turnovers on Possession Touches data set - In some cases a pass we detected was actually part of a lost-ball turnover (e.g., ball batted away). We now prefer to assign the touch outcome as a turnover when a lost-ball turnover by the same player occurs within about 1 second of the pass, so the outcome matches the official result.

[0.2.1-alpha] - 2026-02-17

Changed

  • Improved accuracy of height, wingspan, right_arm_length, and left_arm_length calculations on Anthro Measurements data set - Calibrated measurement constants using NBA Combine data to account for HawkEye skeleton changes in the 2025-26 season

[0.2.0-alpha] - 2026-01-13

Added

  • New Ball Screens data set
  • New Advantage Creation 1v1 data set
  • New Possession Touches data set
  • New After Shot Positioning data set - this captures information on how offensive players are moving after each shot, including whether they were positioning for an offensive rebound
  • New chance_id_ctg field on Jumps data set - CTG-generated identifier linking each jump to the chance during which it occurred
  • New chance_id_ctg field on Drives data set - CTG-generated identifier linking each drive to the chance during which it occurred
  • New game_id_nba parameter on /game_status endpoint - Standardize NBA game ID naming to game_id_nba
  • New game_id_nba parameter on /markings endpoint - Standardize NBA game ID naming to game_id_nba
  • New game_id_nba field in /game_status response - Consistent NBA game ID naming in response body
  • New game_id_nba field in /markings response - Consistent NBA game ID naming in response body
  • New season parameter on /game_status endpoint - Filter games by NBA season (e.g., season=2025 for the 2025-26 season)

Deprecated

  • nba_game_id parameter on /game_status endpoint - Use game_id_nba instead
  • nba_game_id parameter on /markings endpoint - Use game_id_nba instead
  • nba_game_id field in /game_status response - Use game_id_nba instead
  • nba_game_id field in /markings response - Use game_id_nba instead

[0.1.0-alpha] - 2026-01-08

Added

  • Initial creation of the CTG Pro Data Feed API documentation
  • New is_live_ball_rebound field on Rebounds data set - Indicates whether the rebound was secured as a live ball (not a team rebound or out of bounds). This is a clearer name for what was previously is_rebounded
  • New offense_players and defense_players fields on Chances data set - Arrays of NBA player IDs for the five players on offense and defense during each chance
  • New context and outcome fields on Chances data set - in_garbage_time (indicates if chance occurred during garbage time), shot_location (court zone where shot was taken), is_shot_made, is_shot_blocked, is_shooter_fouled, and led_to_offensive_rebound (shot outcome indicators)
  • New statistical fields on Chances data set - fga_pts (points scored on field goal attempt), fgm, fga, ftm, fta, tov, fg_dreb, and fg_oreb (four factors and basic statistics)
  • Standardized field names across markings data sets for consistency:

Changed

  • New heave option added to chance_outcome on Chances data set - Indicates an official heave

Deprecated

  • is_rebounded on Rebounds - Use is_live_ball_rebound instead. The old field name was confusing; the new name better describes the field's purpose
  • attacking_positive_x on Rebounds - This information is not particularly accurate and not useful in this data set
  • event_pbp_descriptor on Rebounds - This field is always null and provides no value
  • event_pbp_qualifiers on Rebounds - This information is redundant with other fields in the response
  • attacking_positive_x on Fouls - This information is not particularly accurate and not so useful in this data set
  • event_pbp_foul_personal_total on Fouls - This data is already available in the official NBA play-by-play feed
  • event_pbp_foul_technical_total on Fouls - This data is already available in the official NBA play-by-play feed
  • attacking_positive_x on Turnovers - This information is not particularly accurate and not useful for analyzing turnover events
  • event_pbp_descriptor on Turnovers - This information is not particularly useful for analyzing turnover events
  • event_pbp_qualifiers on Turnovers - This information is not useful for analyzing turnover events
  • event_pbp_turnover_total on Turnovers - This data is already available in the official NBA play-by-play feed
  • Deprecated field names replaced by standardized versions (all retain backward compatibility):
  • shot_clock_running on Turnovers - This field is unreliable and not particularly useful for analyzing turnover events
  • game_clock_running on Fouls - This field is unreliable and not particularly useful for analyzing foul events
  • shot_clock_running on Fouls - This field is unreliable and not particularly useful for analyzing foul events

Format and Versioning

The changelog format is based on Keep a Changelog.

It includes the following types of changes:

  • Added - New data sets, fields, or API features
  • Changed - Changes to existing data or behavior (may be breaking)
  • Deprecated - Features that will be removed in future versions
  • Removed - Features that have been removed
  • Fixed - Bug fixes in data accuracy or API behavior

The API follows Semantic Versioning (SemVer). Version numbers are formatted as MAJOR.MINOR.PATCH with optional pre-release labels:

ComponentWhen It ChangesExample
MAJORBreaking changes that require client updates1.0.02.0.0
MINORNew features added in a backward-compatible way1.0.01.1.0
PATCHBug fixes that don't change the API contract1.0.01.0.1

Pre-release Labels

  • alpha - Early development; API may change significantly between releases
  • beta - Feature complete; API is stabilizing but may still have minor changes
  • rc (release candidate) - Final testing before stable release

Versioning Policy

  • 0.x.x versions: The API is in active development. Breaking changes may occur between minor versions. We will notify you before this occurs.
  • 1.0.0 and beyond: The API is stable. Breaking changes will only occur in major version bumps, with advance notice in the changelog.