An asynchronous Python API wrapper for the Brawl Stars API that provides easy access to player statistics, club information, battle logs, and more.
- Fully Asynchronous: Built with
httpxfor high-performance async operations - Type Hints: Complete type annotations for better IDE support and code reliability
- Comprehensive Models: Rich data models for all Brawl Stars entities
- Error Handling: Proper exception handling with custom error types
- Auto Tag Parsing: Automatic handling of Brawl Stars player/club tags
- Session Management: Efficient HTTP session management with connection pooling
- Rate Limiting Ready: Built to handle API rate limits gracefully
- Easy Installation: Available on PyPI for simple pip installation
Install the package from PyPI:
pip install pybrawlstarsFirst, obtain your API key from the Brawl Stars Developer Portal.
import asyncio
from pybrawlstars import BSClient
async def main():
# Initialize the client with your API key
client = BSClient("YOUR_API_KEY")
try:
# Get player information
player = await client.get_player("2PPQVUQ8J")
print(f"Player: {player.name}")
print(f"Trophies: {player.trophies}")
# Get club information
club = await client.get_club("2L90CG289")
print(f"Club: {club.name}")
print(f"Members: {len(club.members)}")
finally:
# Always close the client when done
await client.close()
# Run the async function
asyncio.run(main())import asyncio
from pybrawlstars import BSClient
async def main():
async with BSClient("YOUR_API_KEY") as client:
player = await client.get_player("2PPQVUQ8J")
print(f"Player: {player.name}")
# Client automatically closes when exiting the context
asyncio.run(main())The main client class for interacting with the Brawl Stars API.
Note: Due to Brawl Stars API limitations, only the following 7 routes are supported:
get_player- Get player profileget_battlelog- Get player battle logget_club- Get club informationget_club_members- Get club membersget_brawlers- Get all brawlersget_brawler- Get specific brawler by IDget_event_rotation- Get current event rotation
BSClient(
api_key: str,
base_url: str = "https://api.brawlstars.com",
version: int = 1,
timeout: int = 10
)# Get player profile
await client.get_player(tag: str)
# Get player battle log
await client.get_battlelog(tag: str)# Get club information
await client.get_club(tag: str)
# Get club members
await client.get_club_members(tag: str)# Get all brawlers
await client.get_brawlers()
# Get specific brawler by ID
await client.get_brawler(id: int)# Get current event rotation
await client.get_event_rotation()import asyncio
from pybrawlstars import BSClient
async def get_player_stats():
async with BSClient("YOUR_API_KEY") as client:
player = await client.get_player("PLAYER_TAG")
print(f"๐ {player.name}")
print(f"Trophies: {player.trophies}")
print(f"Experience Level: {player.exp_level}")
print(f"3v3 Victories: {player.victories_3vs3}")
print(f"Solo Victories: {player.solo_victories}")
print(f"Duo Victories: {player.duo_victories}")
if player.club:
print(f"Club: {player.club.name}")
asyncio.run(get_player_stats())import asyncio
from pybrawlstars import BSClient
async def analyze_club():
async with BSClient("YOUR_API_KEY") as client:
club = await client.get_club("CLUB_TAG")
print(f"๐ Club Analysis: {club.name}")
print(f"Description: {club.description}")
print(f"Total Members: {len(club.members)}")
print(f"Required Trophies: {club.required_trophies}")
# Group members by role
roles = {}
for member in club.members:
role = member.role.name
roles[role] = roles.get(role, 0) + 1
print("\n๐ฅ Member Roles:")
for role, count in roles.items():
print(f" {role}: {count}")
asyncio.run(analyze_club())import asyncio
from pybrawlstars import BSClient
async def analyze_battles():
async with BSClient("YOUR_API_KEY") as client:
battles = await client.get_battlelog("PLAYER_TAG")
wins = sum(1 for battle in battles if battle.battle.result == "victory")
total = len(battles)
win_rate = (wins / total) * 100 if total > 0 else 0
print(f"โ๏ธ Recent Battle Performance")
print(f"Total Battles: {total}")
print(f"Victories: {wins}")
print(f"Win Rate: {win_rate:.1f}%")
# Analyze game modes
modes = {}
for battle in battles:
mode = battle.event.mode
modes[mode] = modes.get(mode, 0) + 1
print("\n๐ฎ Game Modes Played:")
for mode, count in sorted(modes.items(), key=lambda x: x[1], reverse=True):
print(f" {mode}: {count} battles")
asyncio.run(analyze_battles())import asyncio
from pybrawlstars import BSClient
async def list_brawlers():
async with BSClient("YOUR_API_KEY") as client:
brawlers = await client.get_brawlers()
print(f"๐ค Available Brawlers ({len(brawlers)}):")
for brawler in sorted(brawlers, key=lambda b: b.name):
print(f"\n{brawler.name} (ID: {brawler.id})")
if brawler.star_powers:
print(" Star Powers:")
for sp in brawler.star_powers:
print(f" - {sp.name}")
if brawler.gadgets:
print(" Gadgets:")
for gadget in brawler.gadgets:
print(f" - {gadget.name}")
asyncio.run(list_brawlers())The library provides rich data models for all API responses:
- Player: Complete player profile with statistics and brawler progression
- Club: Club information including members and settings
- Battle: Individual battle results with participants and outcomes
- Brawler: Brawler information including star powers and gadgets
- Event: Current and upcoming game events
- And many more! Explore all available models in the library
The library provides specific exception types for different error scenarios:
import asyncio
from pybrawlstars import BSClient
from pybrawlstars.models.errors import APIError, NetworkError, ClientError
async def safe_api_call():
async with BSClient("YOUR_API_KEY") as client:
try:
player = await client.get_player("INVALID_TAG")
except APIError as e:
print(f"API Error {e.status_code}: {e.message}")
except NetworkError as e:
print(f"Network Error: {e}")
except ValueError as e:
print(f"Invalid input: {e}")
except TimeoutError as e:
print(f"Request timed out: {e}")
asyncio.run(safe_api_call())Player and club tags can be provided in multiple formats:
- With hashtag:
#2PPQVUQ8J - Without hashtag:
2PPQVUQ8J
The library automatically handles tag parsing and URL encoding.
- Python 3.8+
- httpx: For async HTTP requests
- typing-extensions: For enhanced type hints (Python < 3.10)
Check PyPI for the latest version and changelog.
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
# Clone the repository
git clone https://github.com/yourusername/pybrawlstars.git
cd pybrawlstars
# Install in development mode
pip install -e .
# Install development dependencies
pip install -r requirements-dev.txtThis project is licensed under the MIT License - see the LICENSE file for details.
- Use Context Managers: Always use
async with BSClient()for automatic resource cleanup - Batch Requests: Group related API calls together when possible
- Cache Results: Consider caching frequently accessed data like brawler lists
- Handle Rate Limits: The API has rate limits; implement appropriate delays if needed
- Reuse Client: Create one client instance and reuse it for multiple requests
- ๐ Check the documentation for detailed guides
- ๐ Report bugs on GitHub Issues
- ๐ฌ Join discussions on GitHub Discussions
Note: This is an unofficial API wrapper. Brawl Stars is a trademark of Supercell Oy.