openapi: 3.1.0 info: title: BALLDONTLIE VTB United League API version: 1.0.0 description: >- VTB United League teams, players, games, lineups, scoring, statistics and standings. Seasons use the starting year. Data availability varies by game and statistic; missing statistics are null and unavailable collections can be empty. servers: - url: https://api.balldontlie.io security: - ApiKeyAuth: [] paths: /vtb/v1/teams: get: summary: Get teams operationId: vtb_teams_list tags: - Teams description: Requires FREE or higher. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: season in: query required: false description: Season start year. schema: type: integer maximum: 2147483647 responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Team' meta: $ref: '#/components/schemas/Meta' example: data: - id: 1791 name: Zenit Petersburg abbreviation: BC meta: per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/teams/{id}: get: summary: Get a team operationId: vtb_teams_get tags: - Teams description: Requires FREE or higher. Availability varies by game. parameters: - name: id in: path required: true description: Team ID. schema: type: integer maximum: 2147483647 responses: '200': description: Success. content: application/json: schema: type: object required: - data properties: data: $ref: '#/components/schemas/Team' example: data: id: 1791 name: Zenit Petersburg abbreviation: BC '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '404': description: Record not found. content: application/json: schema: $ref: '#/components/schemas/NotFound' example: error: Not found '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/players: get: summary: Get players operationId: vtb_players_list tags: - Players description: Requires FREE or higher. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: season in: query required: false description: Filter by participation in this season. schema: type: integer maximum: 2147483647 - name: search in: query required: false description: Case-insensitive player name search. schema: type: string maxLength: 100 - name: team_ids[] in: query required: false description: >- Filter by team participation in lineups or stats; combine with season for a season-specific roster. schema: type: array items: type: integer maximum: 2147483647 style: form explode: true responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Player' meta: $ref: '#/components/schemas/Meta' example: data: - id: 843 name: Roberson A. country: USA meta: next_cursor: 843 per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/players/{id}: get: summary: Get a player operationId: vtb_players_get tags: - Players description: Requires FREE or higher. Availability varies by game. parameters: - name: id in: path required: true description: Player ID. schema: type: integer maximum: 2147483647 responses: '200': description: Success. content: application/json: schema: type: object required: - data properties: data: $ref: '#/components/schemas/Player' example: data: id: 843 name: Roberson A. country: USA '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '404': description: Record not found. content: application/json: schema: $ref: '#/components/schemas/NotFound' example: error: Not found '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/games: get: summary: Get games operationId: vtb_games_list tags: - Games description: Requires ALL-STAR or GOAT. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: team_ids[] in: query required: false description: Filter by team IDs from the teams endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: seasons[] in: query required: false description: Filter by season start years. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: dates[] in: query required: false description: Filter by UTC game dates. schema: type: array items: type: string format: date style: form explode: true - name: start_date in: query required: false description: Inclusive UTC start date. schema: type: string format: date - name: end_date in: query required: false description: Inclusive UTC end date. schema: type: string format: date - name: status in: query required: false description: Filter by game status. schema: type: string enum: - scheduled - live - final - postponed - cancelled responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Game' meta: $ref: '#/components/schemas/Meta' example: data: - id: 2184 season: 2026 datetime: '2026-10-07T17:00:00.000Z' status: final home_team: id: 1791 name: Zenit Petersburg abbreviation: BC visitor_team: id: 1792 name: Parma Perm abbreviation: PAR home_team_score: 99 visitor_team_score: 85 meta: next_cursor: 2184 per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/games/{id}: get: summary: Get a game operationId: vtb_games_get tags: - Games description: Requires ALL-STAR or GOAT. Availability varies by game. parameters: - name: id in: path required: true description: Game ID. schema: type: integer maximum: 2147483647 responses: '200': description: Success. content: application/json: schema: type: object required: - data properties: data: $ref: '#/components/schemas/Game' example: data: id: 2184 season: 2026 datetime: '2026-10-07T17:00:00.000Z' status: final home_team: id: 1791 name: Zenit Petersburg abbreviation: BC visitor_team: id: 1792 name: Parma Perm abbreviation: PAR home_team_score: 99 visitor_team_score: 85 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '404': description: Record not found. content: application/json: schema: $ref: '#/components/schemas/NotFound' example: error: Not found '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/stats: get: summary: Get player stats operationId: vtb_stats_list tags: - Player Stats description: Requires GOAT. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: team_ids[] in: query required: false description: Filter by team IDs from the teams endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: seasons[] in: query required: false description: Filter by season start years. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: game_ids[] in: query required: false description: Filter by game IDs from the games endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: player_ids[] in: query required: false description: Filter by player IDs from the players endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/PlayerStats' meta: $ref: '#/components/schemas/Meta' example: data: [] meta: per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/team_stats: get: summary: Get team stats operationId: vtb_team_stats_list tags: - Team Stats description: Requires GOAT. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: team_ids[] in: query required: false description: Filter by team IDs from the teams endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: seasons[] in: query required: false description: Filter by season start years. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: game_ids[] in: query required: false description: Filter by game IDs from the games endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: period in: query required: false description: 0 for the entire game; 1–4 for quarters; 5+ for overtime. schema: type: integer minimum: 0 maximum: 20 responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/TeamStats' meta: $ref: '#/components/schemas/Meta' example: data: [] meta: per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/lineups: get: summary: Get lineups operationId: vtb_lineups_list tags: - Lineups description: Requires ALL-STAR or GOAT. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: team_ids[] in: query required: false description: Filter by team IDs from the teams endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: seasons[] in: query required: false description: Filter by season start years. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: game_ids[] in: query required: true description: Filter by game IDs from the games endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true - name: player_ids[] in: query required: false description: Filter by player IDs from the players endpoint. schema: type: array items: type: integer maximum: 2147483647 minItems: 1 maxItems: 100 style: form explode: true responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Lineup' meta: $ref: '#/components/schemas/Meta' example: data: - id: 820 game_id: 2184 team: id: 1791 name: Zenit Petersburg abbreviation: BC player: id: 843 name: Roberson A. country: USA jersey_number: '21' starter: true meta: next_cursor: 820 per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/scoring: get: summary: Get scoring operationId: vtb_scoring_list tags: - Scoring description: >- Requires ALL-STAR or GOAT. Returns scoring progression, not a full play-by-play feed. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: game_id in: query required: true description: Game ID from the games endpoint. schema: type: integer maximum: 2147483647 responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Scoring' meta: $ref: '#/components/schemas/Meta' example: data: - id: 3150 game_id: 2184 sequence: 1 period: 1 home_team_score: 3 visitor_team_score: 0 meta: next_cursor: 3150 per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. /vtb/v1/standings: get: summary: Get standings operationId: vtb_standings_list tags: - Standings description: Requires FREE or higher. Availability varies by game. parameters: - name: per_page in: query required: false description: Results per page (default 25, maximum 100). schema: type: integer minimum: 1 maximum: 100 default: 25 - name: cursor in: query required: false description: Use meta.next_cursor from the previous response. schema: type: integer minimum: 1 maximum: 2147483647 - name: season in: query required: true description: Season start year. schema: type: integer maximum: 2147483647 responses: '200': description: Success. content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Standing' meta: $ref: '#/components/schemas/Meta' example: data: - id: 171 season: 2026 group: null rank: 1 team: id: 1793 name: CSKA Moscow abbreviation: CSK games_played: 3 wins: 3 losses: 0 points_for: 259 points_against: 234 meta: next_cursor: 171 per_page: 1 '400': description: Invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ValidationError' example: errors: - param: per_page error: Invalid value '401': description: Missing or invalid API key, or the subscription does not include this endpoint. content: text/plain: schema: type: string example: Unauthorized '429': description: Rate limit exceeded. '500': description: Server error. components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: Authorization schemas: Team: type: object required: - id - name - abbreviation properties: id: type: integer description: Team ID. name: type: string description: Team name. abbreviation: type: - string - 'null' description: Team abbreviation. Player: type: object required: - id - name - country properties: id: type: integer description: Player ID. name: type: string description: Player name. country: type: - string - 'null' description: Country, when available. Game: type: object required: - id - season - datetime - status - home_team - visitor_team - home_team_score - visitor_team_score properties: id: type: integer description: Game ID. season: type: integer description: Season start year; 2026 identifies the 2026–27 season. datetime: type: string format: date-time description: Scheduled start time in UTC. status: type: string enum: - scheduled - live - final - postponed - cancelled home_team: $ref: '#/components/schemas/Team' visitor_team: $ref: '#/components/schemas/Team' home_team_score: type: - integer - 'null' description: Home score. Null before scoring is available. visitor_team_score: type: - integer - 'null' description: Visitor score. Null before scoring is available. PlayerStats: type: object required: - id - game_id - team - player - pts - reb - oreb - dreb - ast - stl - blk - turnover - pf - fgm - fga - fg2m - fg2a - fg3m - fg3a - ftm - fta - min - plus_minus properties: id: type: integer description: Stat record ID. game_id: type: integer description: Game ID from the games endpoint. team: $ref: '#/components/schemas/Team' player: $ref: '#/components/schemas/Player' pts: type: - number - 'null' description: Points. Null when unavailable. reb: type: - number - 'null' description: Total rebounds. Null when unavailable. oreb: type: - number - 'null' description: Offensive rebounds. Null when unavailable. dreb: type: - number - 'null' description: Defensive rebounds. Null when unavailable. ast: type: - number - 'null' description: Assists. Null when unavailable. stl: type: - number - 'null' description: Steals. Null when unavailable. blk: type: - number - 'null' description: Blocked shots. Null when unavailable. turnover: type: - number - 'null' description: Turnovers. Null when unavailable. pf: type: - number - 'null' description: Personal fouls. Null when unavailable. fgm: type: - number - 'null' description: Field goals made. Null when unavailable. fga: type: - number - 'null' description: Field goals attempted. Null when unavailable. fg2m: type: - number - 'null' description: Two-point field goals made. Null when unavailable. fg2a: type: - number - 'null' description: Two-point field goals attempted. Null when unavailable. fg3m: type: - number - 'null' description: Three-point field goals made. Null when unavailable. fg3a: type: - number - 'null' description: Three-point field goals attempted. Null when unavailable. ftm: type: - number - 'null' description: Free throws made. Null when unavailable. fta: type: - number - 'null' description: Free throws attempted. Null when unavailable. min: type: - string - 'null' description: Playing time, as minutes or minutes:seconds according to available precision. plus_minus: type: - number - 'null' description: Plus/minus. TeamStats: type: object required: - id - game_id - team - period - pts - reb - oreb - dreb - ast - stl - blk - turnover - pf - fgm - fga - fg2m - fg2a - fg3m - fg3a - ftm - fta properties: id: type: integer description: Stat record ID. game_id: type: integer description: Game ID from the games endpoint. team: $ref: '#/components/schemas/Team' period: type: integer description: 0 = entire game; 1–4 = quarters; 5 and above = overtime periods. pts: type: - number - 'null' description: Points. Null when unavailable. reb: type: - number - 'null' description: Total rebounds. Null when unavailable. oreb: type: - number - 'null' description: Offensive rebounds. Null when unavailable. dreb: type: - number - 'null' description: Defensive rebounds. Null when unavailable. ast: type: - number - 'null' description: Assists. Null when unavailable. stl: type: - number - 'null' description: Steals. Null when unavailable. blk: type: - number - 'null' description: Blocked shots. Null when unavailable. turnover: type: - number - 'null' description: Turnovers. Null when unavailable. pf: type: - number - 'null' description: Personal fouls. Null when unavailable. fgm: type: - number - 'null' description: Field goals made. Null when unavailable. fga: type: - number - 'null' description: Field goals attempted. Null when unavailable. fg2m: type: - number - 'null' description: Two-point field goals made. Null when unavailable. fg2a: type: - number - 'null' description: Two-point field goals attempted. Null when unavailable. fg3m: type: - number - 'null' description: Three-point field goals made. Null when unavailable. fg3a: type: - number - 'null' description: Three-point field goals attempted. Null when unavailable. ftm: type: - number - 'null' description: Free throws made. Null when unavailable. fta: type: - number - 'null' description: Free throws attempted. Null when unavailable. Lineup: type: object required: - id - game_id - team - player - jersey_number - starter properties: id: type: integer description: Lineup record ID. game_id: type: integer description: Game ID from the games endpoint. team: $ref: '#/components/schemas/Team' player: $ref: '#/components/schemas/Player' jersey_number: type: - string - 'null' description: Jersey number. starter: type: boolean description: Whether the player is a confirmed starter. Scoring: type: object required: - id - game_id - sequence - period - home_team_score - visitor_team_score properties: id: type: integer description: Scoring record ID. game_id: type: integer description: Game ID from the games endpoint. sequence: type: integer description: Scoring sequence, returned in ascending order. period: type: integer description: 1–4 = quarters; 5 and above = overtime periods. home_team_score: type: integer description: Cumulative home score. visitor_team_score: type: integer description: Cumulative visitor score. Standing: type: object required: - id - season - group - rank - team - games_played - wins - losses - points_for - points_against properties: id: type: integer description: Standing record ID. season: type: integer description: Season start year. group: type: - string - 'null' description: Standings group; null for an ungrouped league. rank: type: integer description: Rank within the group. team: $ref: '#/components/schemas/Team' games_played: type: integer description: Games played. wins: type: integer description: Wins. losses: type: integer description: Losses. points_for: type: integer description: Points scored. points_against: type: integer description: Points conceded. Meta: type: object required: - per_page properties: per_page: type: integer minimum: 1 maximum: 100 prev_cursor: type: integer description: The cursor supplied in this request, when present. next_cursor: type: integer description: Pass as cursor for the next page. Omitted when no further page is indicated. ValidationError: type: object required: - errors properties: errors: type: array items: type: object required: - param - error properties: param: type: string description: Invalid parameter. error: type: string description: Validation message. NotFound: type: object required: - error properties: error: type: string const: Not found