Skip to contents

Season player shot-zone profile (one page).

Endpoint: POST https://data-server.cbaleague.com/api/player-shoot-list (JSON body)

Usage

cba_player_shots(
  season,
  match_type_id = 1,
  count_ranger = 1,
  player_ranger = 1,
  team_id = NULL,
  sort = 3,
  rank = 1,
  page_number = 1,
  page_size = 100
)

Arguments

season

(required) Required. Season END year (2026 = the 2025-26 season). The API takes the START year (2025), so cba_runtime sends season - 1.

match_type_id

(default 1) Match type id: 1 regular season (default), 2 playoffs, 3 preseason, 4 all-star, 9 relegation play-off (cba_match_types).

count_ranger

(default 1) How counting statistics scale: 1 per game (default), 2 season total, 3 per 36 minutes, 4 per 100 possessions.

player_ranger

(default 1) Which players: 1 all (default), 2 domestic (Chinese) only, 4 foreign only.

team_id

(optional) Optional CBA team id (clubs, stable across seasons and renames) to list one team's players.

sort

(default 3) Sort column code the site sends (3 is the default order); the API answers an empty body without it.

rank

(default 1) Sort direction code the site sends (1 default); the API answers an empty body without it.

page_number

(default 1) Page number of the paged list, from 1.

page_size

(default 100) Rows per page (the site uses 100).

Value

A hoopR_data tibble: One row per player of the requested page. An empty valid answer is a zero-row tibble with these columns, in this order (sportsdataverse-py cba_player_shots):

col_nametypedescription
ageintegerAge in years in that season.
at_rim_made_ratedoubleat-rim frequency: restricted-area attempts per 100 possessions. A number (the API sends it as display text).
at_rim_made_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: at-rim frequency: restricted-area attempts per 100 possessions.
at_rim_made_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: at-rim frequency: restricted-area attempts per 100 possessions.
first_positioncharacterPrimary position label (Chinese; see position for the label set). Label glosses: C = (Chinese text); C/PF = (Chinese text); F = (Chinese text); G = (Chinese text); PF = (Chinese text); PF/C = (Chinese text); PF/SF = (Chinese text); PG = (Chinese text); PG/SG = (Chinese text); SF = (Chinese text); SF/PF = (Chinese text); SF/SG = (Chinese text); SG = (Chinese text); SG/PG = (Chinese text); SG/SF = (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text).
free_ratedoublefree-throw frequency: free-throw attempts per 100 possessions (site definition). A number (the API sends it as display text).
free_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: free-throw frequency: free-throw attempts per 100 possessions (site definition).
free_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: free-throw frequency: free-throw attempts per 100 possessions (site definition).
hit_at_rim_made_ratedoubleat-rim shooting percentage: restricted-area field-goal percentage (site definition). A FRACTION 0-1 (the API sends a percent string such as '39.4%'; the _sort column holds the same fraction).
hit_at_rim_made_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: at-rim shooting percentage: restricted-area field-goal percentage (site definition).
hit_at_rim_made_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: at-rim shooting percentage: restricted-area field-goal percentage (site definition).
hit_free_ratedoublefree-throw percentage. A FRACTION 0-1 (the API sends a percent string such as '39.4%'; the _sort column holds the same fraction).
hit_free_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: free-throw percentage.
hit_free_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: free-throw percentage.
hit_middle_ratedoublemid-range shooting percentage: percentage on two-point attempts outside the restricted area (site definition). A FRACTION 0-1 (the API sends a percent string such as '39.4%'; the _sort column holds the same fraction).
hit_middle_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: mid-range shooting percentage: percentage on two-point attempts outside the restricted area (site definition).
hit_middle_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: mid-range shooting percentage: percentage on two-point attempts outside the restricted area (site definition).
hit_ratedoubleeffective field-goal percentage: all field-goal attempts converted to two-point attempts. A FRACTION 0-1 (the API sends a percent string such as '39.4%'; the _sort column holds the same fraction).
hit_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: effective field-goal percentage: all field-goal attempts converted to two-point attempts.
hit_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: effective field-goal percentage: all field-goal attempts converted to two-point attempts.
hit_three_ratedoublethree-point shooting percentage. A FRACTION 0-1 (the API sends a percent string such as '39.4%'; the _sort column holds the same fraction).
hit_three_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: three-point shooting percentage.
hit_three_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: three-point shooting percentage.
is_colorintegerHighlight flag, 1 or 2 (unverified meaning; the site uses it to colour the row).
middle_ratedoublemid-range frequency: two-point attempts outside the restricted area per 100 possessions (site definition). A number (the API sends it as display text).
middle_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: mid-range frequency: two-point attempts outside the restricted area per 100 possessions (site definition).
middle_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: mid-range frequency: two-point attempts outside the restricted area per 100 possessions (site definition).
minutesintegerMinutes played in the season (whole-season total, integer; cba_player_base gives the per-game average).
nationalitycharacterNationality (Chinese country name; see the nationality code table for every value seen and its English name). Chinese country names seen: China; United States; Canada; France; Chinese Taipei; Iran; Nigeria; Jordan.
numbercharacterJersey number as a string.
play_timesintegerGames played (Chinese text), integer.
player_idintegerplayerId (key space: CBA persons, stable across seasons and clubs; 3-9 digits, older players have short ids (393433) and newer ones 100xxxxxx). Joins the player box routes, the season player lists and getPlayersByScheduleId. Not a team id.
player_namecharacterPlayer name (Chinese).
positioncharacterPosition label (Chinese). Eras differ: coarse (Chinese text) (guard) / (Chinese text) (forward) / (Chinese text) (center) in older seasons, five-way (Chinese text) (point guard) / (Chinese text) (shooting guard) / (Chinese text) (small forward) / (Chinese text) (power forward) / (Chinese text) (center) in newer ones; dual positions are joined with '/' (e.g. (Chinese text)). Label glosses: C = (Chinese text); C/PF = (Chinese text); F = (Chinese text); G = (Chinese text); PF = (Chinese text); PF/C = (Chinese text); PF/SF = (Chinese text); PG = (Chinese text); PG/SG = (Chinese text); SF = (Chinese text); SF/PF = (Chinese text); SF/SG = (Chinese text); SG = (Chinese text); SG/PG = (Chinese text); SG/SF = (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text); (Chinese text).
position_numdoublePosition as a number 1-5 (1 point guard, 2 shooting guard, 3 small forward, 4 power forward, 5 center); a fraction such as 4.5 averages a dual position; typed as float.
rankcharacterUnobserved: null in every sample (a row-rank slot; the site numbers rows itself).
seasonintegerSeason START year (2025 = the 2025-26 season). The sdv season key is the END year = season + 1; map at the boundary.
secondsintegerSeconds played in the season (whole-season total, integer; cba_player_base gives the per-game average).
team_cn_aliascharacterTeam short name (Chinese) in that season.
team_idintegerteamId (key space: CBA clubs; 5 digits 29115-29140 for the long-standing clubs, 9 digits for newer ones (100074683 = Ningbo); stable across seasons and club renames, but the display name changes with the sponsor: 29128 = 'Zhejiang Guangsha' under many sponsor names, (Chinese text) in 2025-26). Joins getTeam / teamList and the team and player routes. Not a player or schedule id.
three_ratedoublethree-point frequency: three-point attempts per 100 possessions (site definition). A number (the API sends it as display text).
three_rate_rankdoubleColour rank for the metric, a fraction 0-1 (1 = best, inverted for 'bad' statistics such as turnovers) that the site uses to colour the cell (inferred from the sample values; the base population is not documented). Metric: three-point frequency: three-point attempts per 100 possessions (site definition).
three_rate_sortdoubleUnformatted numeric value behind the formatted string of the same metric (a fraction 0-1 for percentages), used by the site to sort the table. Metric: three-point frequency: three-point attempts per 100 possessions (site definition).

Details

Source, terms of use, request pacing, seasons, ids, coverage and error classes of this family: see the notes in cba_seasons().

 cba_player_shots(season = 2026, team_id = 29128)