Season Stats & Analytics
Player play types (league)
NBA-only, league-wide. Every stored row of player_season_playtypes
(synergyplaytypes with PlayerOrTeam=P, per game) for the season —
each item is the document /v1/nba/players/{id}/playtypes returns: the
eleven play types on offense and defense, each with possessions,
points per possession, frequency, the field-goal line, the score /
turnover / shooting-foul / and-one possession shares and Synergy's
percentile. A play type Synergy publishes no row for stays all-null.
Sorted by player id, then club; team narrows the list to one club's
players. A season the adapter has not written yet is an empty list,
not a 404. Written daily by statsapi:player-synergy.
Requires the stats entitlement (a paid plan). See Responses & Errors for the success envelope and availability rules.
https://api.sportquanta.com/v1/nba/player-playtypesReference context: NBA.
Overview · Response conventions
Authorizations
AuthorizationstringheaderrequiredSend a workspace API token in the Authorization: Bearer <token> header.
Query Parameters
seasonintegerrequiredSeason start year (2025 for the 2025-26 season).
Required range: 1920 <= x, x <= 2100
teamstringCanonical team id; only that club's players.
limitintegerdefault:1000Page size; the default carries a full regular season.
Required range: 1 <= x, x <= 2000
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/jsonEvery stored player play-type row for the season.
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.
Query validation failed. Depending on the handler, invalid_query_parameter is returned with HTTP 400 or 422. Pre-read validation is non-billable.
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.seasonintegerrequireddata.itemsobject[]requireddata.items.canonicalIdstringdata.items.playerIdstring | nulldata.items.teamIdstring | nulldata.items.seasonnumberdata.items.offenseobjectProvider season play-type statistics keyed by the stored camelCase play-type name, such as isolation or transition. Each value retains possessions, pointsPerPossession, frequency and the provider's outcome shares. Unpublished play-type rows retain null metrics; they are not zero-valued performances.
data.items.offense.{key}objectdata.items.offense.{key}.possessionsnumber | nulldata.items.offense.{key}.pointsPerPossessionnumber | nulldata.items.offense.{key}.frequencynumber | nulldata.items.offense.{key}.pointsnumber | nulldata.items.offense.{key}.fieldGoalsMadenumber | nulldata.items.offense.{key}.fieldGoalsAttemptednumber | nulldata.items.offense.{key}.fieldGoalPctnumber | nulldata.items.offense.{key}.effectiveFieldGoalPctnumber | nulldata.items.offense.{key}.scorePossPctnumber | nulldata.items.offense.{key}.turnoverPossPctnumber | nulldata.items.offense.{key}.freeThrowPossPctnumber | nulldata.items.offense.{key}.shootingFoulPossPctnumber | nulldata.items.offense.{key}.plusOnePossPctnumber | nulldata.items.offense.{key}.percentilenumber | nulldata.items.defenseobjectProvider season play-type statistics keyed by the stored camelCase play-type name, such as isolation or transition. Each value retains possessions, pointsPerPossession, frequency and the provider's outcome shares. Unpublished play-type rows retain null metrics; they are not zero-valued performances.
data.items.defense.{key}objectdata.items.defense.{key}.possessionsnumber | nulldata.items.defense.{key}.pointsPerPossessionnumber | nulldata.items.defense.{key}.frequencynumber | nulldata.items.defense.{key}.pointsnumber | nulldata.items.defense.{key}.fieldGoalsMadenumber | nulldata.items.defense.{key}.fieldGoalsAttemptednumber | nulldata.items.defense.{key}.fieldGoalPctnumber | nulldata.items.defense.{key}.effectiveFieldGoalPctnumber | nulldata.items.defense.{key}.scorePossPctnumber | nulldata.items.defense.{key}.turnoverPossPctnumber | nulldata.items.defense.{key}.freeThrowPossPctnumber | nulldata.items.defense.{key}.shootingFoulPossPctnumber | nulldata.items.defense.{key}.plusOnePossPctnumber | nulldata.items.defense.{key}.percentilenumber | 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.