Teams API
The teams module provides access to team information, rosters, matches, tournament placements, and transaction history.
Overview
Get comprehensive team data including team info, current rosters, match schedules, tournament placement history, and player transactions (joins, leaves, status changes).
Team-related API endpoints and models.
- class vlrdevapi.teams.SocialLink(label: str, url: str)[source]
Bases:
objectTeam social media link.
- class vlrdevapi.teams.PreviousTeam(team_id: int | None = None, name: str | None = None)[source]
Bases:
objectInformation about a team’s previous name/identity.
- class vlrdevapi.teams.SuccessorTeam(team_id: int | None = None, name: str | None = None)[source]
Bases:
objectInformation about a team’s successor/current banner identity.
- class vlrdevapi.teams.RosterMember(role: str, player_id: int | None = None, ign: str | None = None, real_name: str | None = None, country: str | None = None, is_captain: bool = False, photo_url: str | None = None)[source]
Bases:
objectTeam roster member (player or staff).
- class vlrdevapi.teams.TeamInfo(team_id: int, name: str | None = None, tag: str | None = None, logo_url: str | None = None, logo_url_light: str | None = None, logo_url_dark: str | None = None, country: str | None = None, is_active: bool = True, socials: list[SocialLink] = <factory>, previous_team: PreviousTeam | None = None, current_team: SuccessorTeam | None = None)[source]
Bases:
objectTeam information.
- socials: list[SocialLink]
- previous_team: PreviousTeam | None = None
- current_team: SuccessorTeam | None = None
- __init__(team_id: int, name: str | None = None, tag: str | None = None, logo_url: str | None = None, logo_url_light: str | None = None, logo_url_dark: str | None = None, country: str | None = None, is_active: bool = True, socials: list[SocialLink] = <factory>, previous_team: PreviousTeam | None = None, current_team: SuccessorTeam | None = None) None
- class vlrdevapi.teams.MatchTeam(team_id: int | None = None, name: str | None = None, tag: str | None = None, logo: str | None = None, score: int | None = None)[source]
Bases:
objectTeam information in a match context.
- class vlrdevapi.teams.TeamMatch(team1: MatchTeam, team2: MatchTeam, match_id: int | None = None, match_url: str | None = None, tournament_name: str | None = None, phase: str | None = None, series: str | None = None, match_datetime: datetime | None = None)[source]
Bases:
objectTeam match information.
- class vlrdevapi.teams.EventPlacement(event_id: int | None = None, event_name: str | None = None, event_url: str | None = None, placements: list[PlacementDetail] = <factory>, year: str | None = None)[source]
Bases:
objectTeam event placement information.
- placements: list[PlacementDetail]
- class vlrdevapi.teams.PlacementDetail(series: str | None = None, place: str | None = None, prize_money: str | None = None)[source]
Bases:
objectIndividual placement detail within an event.
- class vlrdevapi.teams.PlayerTransaction(date: date | None = None, action: str | None = None, player_id: int | None = None, ign: str | None = None, real_name: str | None = None, country: str | None = None, position: str | None = None, reference_url: str | None = None)[source]
Bases:
objectIndividual player transaction record.
- class vlrdevapi.teams.PreviousPlayer(status: str, player_id: int | None = None, ign: str | None = None, real_name: str | None = None, country: str | None = None, position: str | None = None, join_date: date | None = None, leave_date: date | None = None, transactions: list[PlayerTransaction] = <factory>)[source]
Bases:
objectPrevious player with calculated status.
- transactions: list[PlayerTransaction]
- vlrdevapi.teams.info(team_id: int, timeout: float | None = None) TeamInfo | None[source]
Get team information.
- Parameters:
team_id – Team ID
timeout – Request timeout in seconds
- Returns:
Team information or None if not found
Example
>>> import vlrdevapi as vlr >>> team = vlr.teams.info(team_id=1034) >>> print(f"{team.name} ({team.tag}) - {team.country}")
- vlrdevapi.teams.roster(team_id: int, timeout: float | None = None) list[RosterMember][source]
Get current team roster (active players and staff).
- Parameters:
team_id – Team ID
timeout – Request timeout in seconds
- Returns:
List of current roster members (players and staff)
Example
>>> import vlrdevapi as vlr >>> roster = vlr.teams.roster(team_id=1034) >>> for member in roster: ... print(f"{member.ign} ({member.role}) - {member.country}")
- vlrdevapi.teams.upcoming_matches(team_id: int, limit: int | None = None, timeout: float | None = None) list[TeamMatch][source]
Get upcoming matches for a team.
- Parameters:
team_id – Team ID
limit – Maximum number of matches to return (fetches across pages if needed)
timeout – Request timeout in seconds
- Returns:
List of upcoming matches
Example
>>> import vlrdevapi as vlr >>> matches = vlr.teams.upcoming_matches(team_id=799, limit=10) >>> for match in matches: ... if match.match_datetime: ... print(f"{match.team1.name} vs {match.team2.name} - {match.match_datetime.strftime('%B %d, %Y')}") ... else: ... print(f"{match.team1.name} vs {match.team2.name}")
- vlrdevapi.teams.completed_matches(team_id: int, limit: int | None = None, timeout: float | None = None) list[TeamMatch][source]
Get completed matches for a team.
- Parameters:
team_id – Team ID
limit – Maximum number of matches to return (fetches across pages if needed)
timeout – Request timeout in seconds
- Returns:
List of completed matches
Example
>>> import vlrdevapi as vlr >>> matches = vlr.teams.completed_matches(team_id=799, limit=20) >>> for match in matches: ... print(f"{match.team1.name} {match.team1.score}:{match.team2.score} {match.team2.name}") ... if match.match_datetime: ... print(f" Date: {match.match_datetime.strftime('%B %d, %Y')}")
- vlrdevapi.teams.placements(team_id: int, timeout: float | None = None) list[EventPlacement][source]
Get event placements for a team.
- Parameters:
team_id – Team ID
timeout – Request timeout in seconds
- Returns:
List of event placements
Example
>>> import vlrdevapi as vlr >>> placements = vlr.teams.placements(team_id=799) >>> for placement in placements: ... print(f"{placement.event_name} ({placement.year})") ... for detail in placement.placements: ... print(f" {detail.series} - {detail.place}: {detail.prize_money}")
- vlrdevapi.teams.transactions(team_id: int, timeout: float | None = None) list[PlayerTransaction][source]
Get all team transactions (joins, leaves, inactive status changes, etc.).
Retrieves the complete transaction history for a team from the VLR.gg transactions page. Each transaction includes the date, action type, player information, position, and reference URL.
- Parameters:
team_id – Team ID from VLR.gg (e.g., 1034 for NRG)
timeout – Request timeout in seconds (default: 5.0)
- Returns:
List of PlayerTransaction objects, ordered by date (most recent first). Returns empty list if team not found or has no transactions.
- Raises:
NetworkError – If the request fails after retries
Example
>>> import vlrdevapi as vlr >>> >>> # Get all transactions for NRG >>> txns = vlr.teams.transactions(team_id=1034) >>> >>> # Display recent transactions >>> for txn in txns[:5]: ... if txn.date: ... print(f"{txn.date.strftime('%Y/%m/%d')}: {txn.ign} - {txn.action} ({txn.position})") ... else: ... print(f"Unknown: {txn.ign} - {txn.action} ({txn.position})") 2025/10/02: FiNESSE - leave (Player) 2025/05/09: skuba - join (Player)
>>> # Filter by action type >>> joins = [t for t in txns if t.action == "join"] >>> leaves = [t for t in txns if t.action == "leave"]
Note
Transaction actions include: ‘join’, ‘leave’, ‘inactive’, and others. All text fields are cleaned of extra whitespace, tabs, and newlines.
- vlrdevapi.teams.previous_players(team_id: int, timeout: float | None = None) list[PreviousPlayer][source]
Get all previous and current players with their status calculated from transaction history.
This function analyzes all team transactions to determine each player’s current status, join/leave dates, and complete transaction history. Players are grouped by their player_id and their status is calculated based on their most recent transactions.
- Status Determination Logic:
Active: Player has joined and has no subsequent leave/inactive action
Left: Player has a ‘leave’ action as their most recent status change
Inactive: Player has an ‘inactive’ action as their most recent status change
Unknown: Cannot determine status from available transactions
- Parameters:
team_id – Team ID from VLR.gg (e.g., 1034 for NRG)
timeout – Request timeout in seconds (default: 5.0)
- Returns:
List of PreviousPlayer objects, sorted by most recent activity (latest transaction first). Each player includes: - Basic info (IGN, real name, country, position) - Calculated status - Join and leave dates - Complete transaction history
Returns empty list if team not found or has no transactions.
- Raises:
NetworkError – If the request fails after retries
Example
>>> import vlrdevapi as vlr >>> >>> # Get all players >>> players = vlr.teams.previous_players(team_id=1034) >>> >>> # Display player status >>> for player in players[:5]: ... print(f"{player.ign} - {player.status} ({player.position})") ... join_str = player.join_date.strftime('%Y/%m/%d') if player.join_date else 'Unknown' ... leave_str = player.leave_date.strftime('%Y/%m/%d') if player.leave_date else 'None' ... print(f" Joined: {join_str}, Left: {leave_str}") mada - Active (Player) Joined: 2024/10/10, Left: None FiNESSE - Left (Player) Joined: 2024/05/09, Left: 2025/10/02
>>> # Filter by status >>> active = [p for p in players if p.status == "Active"] >>> left = [p for p in players if p.status == "Left"] >>> >>> # Filter by position >>> coaches = [p for p in players if p.position and "coach" in p.position.lower()] >>> >>> # Access transaction history >>> player = players[0] >>> for txn in player.transactions: ... print(f"{txn.date}: {txn.action}")
Note
Players without a player_id are excluded from results
Transaction dates are date objects or None if not available
Players can have multiple join/leave cycles (rejoining after leaving)
Status is calculated from the most recent transaction
All text fields are cleaned of extra whitespace
Functions
info
- vlrdevapi.teams.info(team_id: int, timeout: float | None = None) TeamInfo | None[source]
Get team information.
- Parameters:
team_id – Team ID
timeout – Request timeout in seconds
- Returns:
Team information or None if not found
Example
>>> import vlrdevapi as vlr >>> team = vlr.teams.info(team_id=1034) >>> print(f"{team.name} ({team.tag}) - {team.country}")
roster
- vlrdevapi.teams.roster(team_id: int, timeout: float | None = None) list[RosterMember][source]
Get current team roster (active players and staff).
- Parameters:
team_id – Team ID
timeout – Request timeout in seconds
- Returns:
List of current roster members (players and staff)
Example
>>> import vlrdevapi as vlr >>> roster = vlr.teams.roster(team_id=1034) >>> for member in roster: ... print(f"{member.ign} ({member.role}) - {member.country}")
upcoming_matches
- vlrdevapi.teams.upcoming_matches(team_id: int, limit: int | None = None, timeout: float | None = None) list[TeamMatch][source]
Get upcoming matches for a team.
- Parameters:
team_id – Team ID
limit – Maximum number of matches to return (fetches across pages if needed)
timeout – Request timeout in seconds
- Returns:
List of upcoming matches
Example
>>> import vlrdevapi as vlr >>> matches = vlr.teams.upcoming_matches(team_id=799, limit=10) >>> for match in matches: ... if match.match_datetime: ... print(f"{match.team1.name} vs {match.team2.name} - {match.match_datetime.strftime('%B %d, %Y')}") ... else: ... print(f"{match.team1.name} vs {match.team2.name}")
completed_matches
- vlrdevapi.teams.completed_matches(team_id: int, limit: int | None = None, timeout: float | None = None) list[TeamMatch][source]
Get completed matches for a team.
- Parameters:
team_id – Team ID
limit – Maximum number of matches to return (fetches across pages if needed)
timeout – Request timeout in seconds
- Returns:
List of completed matches
Example
>>> import vlrdevapi as vlr >>> matches = vlr.teams.completed_matches(team_id=799, limit=20) >>> for match in matches: ... print(f"{match.team1.name} {match.team1.score}:{match.team2.score} {match.team2.name}") ... if match.match_datetime: ... print(f" Date: {match.match_datetime.strftime('%B %d, %Y')}")
placements
- vlrdevapi.teams.placements(team_id: int, timeout: float | None = None) list[EventPlacement][source]
Get event placements for a team.
- Parameters:
team_id – Team ID
timeout – Request timeout in seconds
- Returns:
List of event placements
Example
>>> import vlrdevapi as vlr >>> placements = vlr.teams.placements(team_id=799) >>> for placement in placements: ... print(f"{placement.event_name} ({placement.year})") ... for detail in placement.placements: ... print(f" {detail.series} - {detail.place}: {detail.prize_money}")
transactions
- vlrdevapi.teams.transactions(team_id: int, timeout: float | None = None) list[PlayerTransaction][source]
Get all team transactions (joins, leaves, inactive status changes, etc.).
Retrieves the complete transaction history for a team from the VLR.gg transactions page. Each transaction includes the date, action type, player information, position, and reference URL.
- Parameters:
team_id – Team ID from VLR.gg (e.g., 1034 for NRG)
timeout – Request timeout in seconds (default: 5.0)
- Returns:
List of PlayerTransaction objects, ordered by date (most recent first). Returns empty list if team not found or has no transactions.
- Raises:
NetworkError – If the request fails after retries
Example
>>> import vlrdevapi as vlr >>> >>> # Get all transactions for NRG >>> txns = vlr.teams.transactions(team_id=1034) >>> >>> # Display recent transactions >>> for txn in txns[:5]: ... if txn.date: ... print(f"{txn.date.strftime('%Y/%m/%d')}: {txn.ign} - {txn.action} ({txn.position})") ... else: ... print(f"Unknown: {txn.ign} - {txn.action} ({txn.position})") 2025/10/02: FiNESSE - leave (Player) 2025/05/09: skuba - join (Player)
>>> # Filter by action type >>> joins = [t for t in txns if t.action == "join"] >>> leaves = [t for t in txns if t.action == "leave"]
Note
Transaction actions include: ‘join’, ‘leave’, ‘inactive’, and others. All text fields are cleaned of extra whitespace, tabs, and newlines.
previous_players
- vlrdevapi.teams.previous_players(team_id: int, timeout: float | None = None) list[PreviousPlayer][source]
Get all previous and current players with their status calculated from transaction history.
This function analyzes all team transactions to determine each player’s current status, join/leave dates, and complete transaction history. Players are grouped by their player_id and their status is calculated based on their most recent transactions.
- Status Determination Logic:
Active: Player has joined and has no subsequent leave/inactive action
Left: Player has a ‘leave’ action as their most recent status change
Inactive: Player has an ‘inactive’ action as their most recent status change
Unknown: Cannot determine status from available transactions
- Parameters:
team_id – Team ID from VLR.gg (e.g., 1034 for NRG)
timeout – Request timeout in seconds (default: 5.0)
- Returns:
List of PreviousPlayer objects, sorted by most recent activity (latest transaction first). Each player includes: - Basic info (IGN, real name, country, position) - Calculated status - Join and leave dates - Complete transaction history
Returns empty list if team not found or has no transactions.
- Raises:
NetworkError – If the request fails after retries
Example
>>> import vlrdevapi as vlr >>> >>> # Get all players >>> players = vlr.teams.previous_players(team_id=1034) >>> >>> # Display player status >>> for player in players[:5]: ... print(f"{player.ign} - {player.status} ({player.position})") ... join_str = player.join_date.strftime('%Y/%m/%d') if player.join_date else 'Unknown' ... leave_str = player.leave_date.strftime('%Y/%m/%d') if player.leave_date else 'None' ... print(f" Joined: {join_str}, Left: {leave_str}") mada - Active (Player) Joined: 2024/10/10, Left: None FiNESSE - Left (Player) Joined: 2024/05/09, Left: 2025/10/02
>>> # Filter by status >>> active = [p for p in players if p.status == "Active"] >>> left = [p for p in players if p.status == "Left"] >>> >>> # Filter by position >>> coaches = [p for p in players if p.position and "coach" in p.position.lower()] >>> >>> # Access transaction history >>> player = players[0] >>> for txn in player.transactions: ... print(f"{txn.date}: {txn.action}")
Note
Players without a player_id are excluded from results
Transaction dates are date objects or None if not available
Players can have multiple join/leave cycles (rejoining after leaving)
Status is calculated from the most recent transaction
All text fields are cleaned of extra whitespace
Data Models
TeamInfo
- class vlrdevapi.teams.TeamInfo(team_id: int, name: str | None = None, tag: str | None = None, logo_url: str | None = None, logo_url_light: str | None = None, logo_url_dark: str | None = None, country: str | None = None, is_active: bool = True, socials: list[SocialLink] = <factory>, previous_team: PreviousTeam | None = None, current_team: SuccessorTeam | None = None)[source]
Team information.
- socials: list[SocialLink]
- previous_team: PreviousTeam | None = None
- current_team: SuccessorTeam | None = None
- __init__(team_id: int, name: str | None = None, tag: str | None = None, logo_url: str | None = None, logo_url_light: str | None = None, logo_url_dark: str | None = None, country: str | None = None, is_active: bool = True, socials: list[SocialLink] = <factory>, previous_team: PreviousTeam | None = None, current_team: SuccessorTeam | None = None) None
PreviousTeam
SuccessorTeam
RosterMember
MatchTeam
TeamMatch
EventPlacement
PlacementDetail
PlayerTransaction
- class vlrdevapi.teams.PlayerTransaction(date: date | None = None, action: str | None = None, player_id: int | None = None, ign: str | None = None, real_name: str | None = None, country: str | None = None, position: str | None = None, reference_url: str | None = None)[source]
Individual player transaction record.
PreviousPlayer
- class vlrdevapi.teams.PreviousPlayer(status: str, player_id: int | None = None, ign: str | None = None, real_name: str | None = None, country: str | None = None, position: str | None = None, join_date: date | None = None, leave_date: date | None = None, transactions: list[PlayerTransaction] = <factory>)[source]
Previous player with calculated status.
- transactions: list[PlayerTransaction]
Usage Examples
Get Team Information
import vlrdevapi as vlr
# Get team information
team_info = vlr.teams.info(team_id=799)
if team_info:
print(f"{team_info.name} ({team_info.tag})")
print(f"Country: {team_info.country}")
print(f"Active: {team_info.is_active}")
else:
print("Team not found")
# Access social links
if team_info and team_info.socials:
for social in team_info.socials:
print(f"{social.label}: {social.url}")
Get Team Logos
import vlrdevapi as vlr
# Get team information
team_info = vlr.teams.info(team_id=799)
if team_info:
print(f"{team_info.name} ({team_info.tag})")
# Access logo URLs for different modes
print(f"Logo (light mode): {team_info.logo_url_light}")
print(f"Logo (dark mode): {team_info.logo_url_dark}")
# logo_url is kept for backward compatibility (same as logo_url_light)
print(f"Logo (default): {team_info.logo_url}")
Get Team Roster
import vlrdevapi as vlr
# Get current roster
roster = vlr.teams.roster(team_id=799)
for member in roster:
print(f"{member.ign} - {member.real_name or 'N/A'}")
print(f" Role: {member.role}")
if member.country:
print(f" Country: {member.country}")
Get Team Matches
import vlrdevapi as vlr
# Get upcoming matches (with pagination)
upcoming = vlr.teams.upcoming_matches(team_id=799, limit=10)
for match in upcoming:
print(f"{match.team1.name} vs {match.team2.name}")
print(f"Tournament: {match.tournament_name}")
if match.match_datetime:
print(f"Date: {match.match_datetime.strftime('%B %d, %Y at %I:%M %p')}")
# Get completed matches (with pagination)
completed = vlr.teams.completed_matches(team_id=799, limit=20)
for match in completed:
print(f"{match.team1.name} {match.team1.score} - {match.team2.score} {match.team2.name}")
print(f"Tournament: {match.tournament_name}")
Get Event Placements
import vlrdevapi as vlr
# Get all event placements for a team
placements = vlr.teams.placements(team_id=799)
for placement in placements:
print(f"\n{placement.event_name} ({placement.year})")
print(f"Event ID: {placement.event_id}")
# Each event can have multiple placements (e.g., groups, playoffs)
for detail in placement.placements:
print(f" {detail.series} - {detail.place}")
if detail.prize_money:
print(f" Prize: {detail.prize_money}")
Get Team Transactions
import vlrdevapi as vlr
# Get all transactions for a team
txns = vlr.teams.transactions(team_id=1034)
for txn in txns[:5]:
if txn.date:
print(f"{txn.date.strftime('%Y/%m/%d')}: {txn.ign} - {txn.action} ({txn.position})")
else:
print(f"Unknown: {txn.ign} - {txn.action} ({txn.position})")
Get Previous Players
import vlrdevapi as vlr
# Get all previous/current players with calculated status
players = vlr.teams.previous_players(team_id=1034)
# Filter by status
active = [p for p in players if p.status == "Active"]
left = [p for p in players if p.status == "Left"]
print(f"Active: {len(active)}, Left: {len(left)}")
# Display player details
for player in active:
print(f"{player.ign} - {player.position}")
if player.join_date:
print(f" Joined: {player.join_date.strftime('%Y/%m/%d')}")
else:
print(f" Joined: Unknown")
# Players can rejoin after leaving - status is based on most recent action
for player in players:
if len([t for t in player.transactions if t.action == "join"]) > 1:
print(f"{player.ign} has rejoined the team")
Pagination
import vlrdevapi as vlr
# Get specific number of matches
matches_2 = vlr.teams.completed_matches(team_id=799, limit=2)
matches_5 = vlr.teams.completed_matches(team_id=799, limit=5)
print(f"Retrieved {len(matches_2)} matches")
print(f"Retrieved {len(matches_5)} matches")
See more examples: Usage Examples
SocialLink
Team social media link.