Season Stats & Analytics
Player shot dashboard
NBA-only. playerdashptshots, per game, same six bucket tables as the
team dashboard (general, shotClock, dribbles, closestDefender,
closestDefender10ftPlus, touchTime). Players are dashboarded in
order of minutes per game from the tracking collection (600 per run),
so a deep-bench player may have no row. Written daily by
statsapi:shot-dashboards.
Requires the stats entitlement (a paid plan). See Responses & Errors for the success envelope and availability rules.
https://api.sportquanta.com/v1/nba/players/{id}/shot-dashboardReference context: NBA.
Overview · Response conventions
Authorizations
AuthorizationstringheaderrequiredSend a workspace API token in the Authorization: Bearer <token> header.
Path Parameters
idstringrequiredQuery Parameters
seasonintegerrequiredSeason start year (2025 for the 2025-26 season).
Required range: 1946 <= x, x <= 2100
provenancebooleandefault:falseOpt in to per-field provenance on supported single game, match, team, player, and venue reads. Lists and composites accept the flag but generally omit provenance. It is returned under _meta.provenance only when source metadata exists.
Response
application/jsonThe stored (subject, season) row.
Query validation failed. Depending on the handler, invalid_query_parameter is returned with HTTP 400 or 422. Pre-read validation is non-billable.
Missing or invalid bearer API token.
Access is forbidden: the token lacks api.read scope, the plan lacks an endpoint/bookmaker capability, or configured billing access is inactive. Inspect error.code and details.feature when present.
The id is well-formed but no document has been ingested for it yet.
Hourly rate ceiling or monthly quota exceeded. The error code disambiguates
which limit was hit. X-RateLimit-* and X-Requests-*-Month response headers
carry the current state of both counters.
Token validation or an internal handler failed. Token-store failures use api_token_lookup_failed; unsupported internal sport dispatch can use data_layer_unavailable.
The data layer (Mongo / ClickHouse / Redis cache) is temporarily unreachable. The server attempted the lookup; it failed. Retry with backoff. Per the spec's order of evaluation, this DOES consume monthly quota — the request reached step 6.
The configured billing provider could not verify API access. The request is refused before the data handler and does not consume monthly quota.
dataobjectrequireddata.generalobject[] | nulldata.general.bucketstringUpstream bucket label, e.g. "0-2 Feet - Very Tight", "22-18", "0 Dribbles".
data.general.fgaFrequencynumber | nulldata.general.fieldGoalsMadenumber | nulldata.general.fieldGoalsAttemptednumber | nulldata.general.fieldGoalPctnumber | nulldata.general.effectiveFieldGoalPctnumber | nulldata.general.fg2aFrequencynumber | nulldata.general.twoPointersMadenumber | nulldata.general.twoPointersAttemptednumber | nulldata.general.twoPointPctnumber | nulldata.general.fg3aFrequencynumber | nulldata.general.threePointersMadenumber | nulldata.general.threePointersAttemptednumber | nulldata.general.threePointPctnumber | nulldata.shotClockobject[] | nulldata.shotClock.bucketstringUpstream bucket label, e.g. "0-2 Feet - Very Tight", "22-18", "0 Dribbles".
data.shotClock.fgaFrequencynumber | nulldata.shotClock.fieldGoalsMadenumber | nulldata.shotClock.fieldGoalsAttemptednumber | nulldata.shotClock.fieldGoalPctnumber | nulldata.shotClock.effectiveFieldGoalPctnumber | nulldata.shotClock.fg2aFrequencynumber | nulldata.shotClock.twoPointersMadenumber | nulldata.shotClock.twoPointersAttemptednumber | nulldata.shotClock.twoPointPctnumber | nulldata.shotClock.fg3aFrequencynumber | nulldata.shotClock.threePointersMadenumber | nulldata.shotClock.threePointersAttemptednumber | nulldata.shotClock.threePointPctnumber | nulldata.dribblesobject[] | nulldata.dribbles.bucketstringUpstream bucket label, e.g. "0-2 Feet - Very Tight", "22-18", "0 Dribbles".
data.dribbles.fgaFrequencynumber | nulldata.dribbles.fieldGoalsMadenumber | nulldata.dribbles.fieldGoalsAttemptednumber | nulldata.dribbles.fieldGoalPctnumber | nulldata.dribbles.effectiveFieldGoalPctnumber | nulldata.dribbles.fg2aFrequencynumber | nulldata.dribbles.twoPointersMadenumber | nulldata.dribbles.twoPointersAttemptednumber | nulldata.dribbles.twoPointPctnumber | nulldata.dribbles.fg3aFrequencynumber | nulldata.dribbles.threePointersMadenumber | nulldata.dribbles.threePointersAttemptednumber | nulldata.dribbles.threePointPctnumber | nulldata.closestDefenderobject[] | nulldata.closestDefender.bucketstringUpstream bucket label, e.g. "0-2 Feet - Very Tight", "22-18", "0 Dribbles".
data.closestDefender.fgaFrequencynumber | nulldata.closestDefender.fieldGoalsMadenumber | nulldata.closestDefender.fieldGoalsAttemptednumber | nulldata.closestDefender.fieldGoalPctnumber | nulldata.closestDefender.effectiveFieldGoalPctnumber | nulldata.closestDefender.fg2aFrequencynumber | nulldata.closestDefender.twoPointersMadenumber | nulldata.closestDefender.twoPointersAttemptednumber | nulldata.closestDefender.twoPointPctnumber | nulldata.closestDefender.fg3aFrequencynumber | nulldata.closestDefender.threePointersMadenumber | nulldata.closestDefender.threePointersAttemptednumber | nulldata.closestDefender.threePointPctnumber | nulldata.closestDefender10ftPlusobject[] | nulldata.closestDefender10ftPlus.bucketstringUpstream bucket label, e.g. "0-2 Feet - Very Tight", "22-18", "0 Dribbles".
data.closestDefender10ftPlus.fgaFrequencynumber | nulldata.closestDefender10ftPlus.fieldGoalsMadenumber | nulldata.closestDefender10ftPlus.fieldGoalsAttemptednumber | nulldata.closestDefender10ftPlus.fieldGoalPctnumber | nulldata.closestDefender10ftPlus.effectiveFieldGoalPctnumber | nulldata.closestDefender10ftPlus.fg2aFrequencynumber | nulldata.closestDefender10ftPlus.twoPointersMadenumber | nulldata.closestDefender10ftPlus.twoPointersAttemptednumber | nulldata.closestDefender10ftPlus.twoPointPctnumber | nulldata.closestDefender10ftPlus.fg3aFrequencynumber | nulldata.closestDefender10ftPlus.threePointersMadenumber | nulldata.closestDefender10ftPlus.threePointersAttemptednumber | nulldata.closestDefender10ftPlus.threePointPctnumber | nulldata.touchTimeobject[] | nulldata.touchTime.bucketstringUpstream bucket label, e.g. "0-2 Feet - Very Tight", "22-18", "0 Dribbles".
data.touchTime.fgaFrequencynumber | nulldata.touchTime.fieldGoalsMadenumber | nulldata.touchTime.fieldGoalsAttemptednumber | nulldata.touchTime.fieldGoalPctnumber | nulldata.touchTime.effectiveFieldGoalPctnumber | nulldata.touchTime.fg2aFrequencynumber | nulldata.touchTime.twoPointersMadenumber | nulldata.touchTime.twoPointersAttemptednumber | nulldata.touchTime.twoPointPctnumber | nulldata.touchTime.fg3aFrequencynumber | nulldata.touchTime.threePointersMadenumber | nulldata.touchTime.threePointersAttemptednumber | nulldata.touchTime.threePointPctnumber | nulldata.canonicalIdstringdata.playerIdstring | nulldata.teamIdstring | nulldata.seasonnumberdata.gamesPlayednumber | null_metaobjectResponse request/cache metadata. Optional evidence fields are specific to this handler; cache TTL does not measure source-data freshness.
_meta.request_idstring_meta.served_fromenum<string>Available options: live, cache
_meta.cache_ttl_secondsintegerResponse cache TTL; independent of source freshness. Omitted when zero.
errorobjectrequirederror.codestringrequiredStable machine-readable error code.
error.messagestringrequiredUser-facing error summary.
error.detailsanyOptional error details.