Python SDK
Official Python SDK for AltSportsData
Python SDK
The official Python SDK for the AltSportsData API.
Installation
pip install altsportsdataPackage: altsportsdata on PyPI
Requirements
- Python 3.8+
- Type hints supported (PEP 484)
Quick Start
from altsportsdata import AltSportsData
import os
client = AltSportsData(api_key=os.getenv('ALTSPORTSDATA_API_KEY'))
# Fetch elite soccer leagues
leagues = client.leagues.list(
sport_type='Soccer',
tier='elite'
)
print(leagues.data)Configuration
Basic Configuration
from altsportsdata import AltSportsData
client = AltSportsData(api_key='your-api-key')Advanced Configuration
from altsportsdata import AltSportsData, RetryConfig
client = AltSportsData(
api_key='your-api-key',
base_url='https://api.altsportsdata.com/v1', # Custom base URL
timeout=30.0, # Request timeout in seconds (default: 30)
retry_config=RetryConfig(
enabled=True, # Enable auto-retry (default: True)
max_retries=3, # Max retry attempts (default: 3)
initial_delay=1.0, # Initial retry delay in seconds
max_delay=10.0 # Max retry delay in seconds
),
headers={
'X-Custom-Header': 'value' # Additional headers
}
)API Methods
Leagues
# List leagues
leagues = client.leagues.list(
sport_type='Soccer',
tier='elite',
country='GB',
limit=50,
offset=0
)
# Get specific league
league = client.leagues.get('league_001')
# Get league statistics
stats = client.leagues.stats()
# Get league fingerprint
fingerprint = client.leagues.fingerprint('league_001')
# Get league valuation
valuation = client.leagues.valuation('league_001')
# Get qualification score
qualification = client.leagues.qualification('league_001')
# Get readiness report
readiness = client.leagues.readiness('league_001')
# Compare leagues
comparison = client.leagues.compare('league_001', 'league_002')
# Find similar leagues
similar = client.leagues.similar('league_001', limit=10)
# Re-evaluate league
client.leagues.evaluate('league_001')Discovery
# Search leagues
results = client.discovery.search(
q='premier league',
limit=10
)
# Find similar leagues (vector search)
similar = client.discovery.similar('league_001', limit=10)Valuation
# Evaluate league
evaluation = client.valuation.evaluate(league_id='league_001')
# Get tier definitions
tiers = client.valuation.tiers()Sports
# List all sports
sports = client.sports.list()
# Get sport archetypes
archetypes = client.sports.archetypes()Events
# List events
events = client.events.list(
league_id='league_001',
date_from='2026-03-01',
date_to='2026-03-31',
limit=100
)Markets
# List betting markets
markets = client.markets.list(limit=50)Type Hints
The SDK includes full type hints:
from altsportsdata import AltSportsData
from altsportsdata.types import (
League,
LeagueReadiness,
LeagueValuation,
Sport,
Event,
Market,
ListLeaguesResponse
)
client = AltSportsData(api_key='your-api-key')
# Type-safe requests and responses
response: ListLeaguesResponse = client.leagues.list(
sport_type='Soccer',
tier='elite'
)
# Type-checked iteration
league: League
for league in response.data:
print(league.name) # IDE autocomplete availableError Handling
from altsportsdata import AltSportsData
from altsportsdata.exceptions import (
AltSportsDataError,
ResourceNotFoundError,
RateLimitError,
ValidationError,
AuthenticationError
)
client = AltSportsData(api_key='your-api-key')
try:
league = client.leagues.get('invalid_id')
except ResourceNotFoundError as e:
print(f'League not found: {e.message}')
except RateLimitError as e:
print(f'Rate limit exceeded')
print(f'Retry after: {e.retry_after} seconds')
except ValidationError as e:
print(f'Validation failed: {e.details}')
except AuthenticationError:
print('Invalid API key')
except AltSportsDataError as e:
print(f'API error: {e.message}')Pagination
Manual Pagination
offset = 0
limit = 100
all_leagues = []
while True:
response = client.leagues.list(limit=limit, offset=offset)
all_leagues.extend(response.data)
if not response.meta.has_more:
break
offset += limit
print(f'Total leagues: {len(all_leagues)}')Auto-Pagination
# Iterator (automatically handles pagination)
all_leagues = []
for league in client.leagues.list_all(tier='elite'):
all_leagues.append(league)
print(f'Total leagues: {len(all_leagues)}')Rate Limit Handling
# Access rate limit info from response
response = client.leagues.list()
print('Rate Limit Info:')
print(f' Limit: {response.rate_limit.limit}')
print(f' Remaining: {response.rate_limit.remaining}')
print(f' Reset: {response.rate_limit.reset}')
# Auto-retry on rate limit (with exponential backoff)
client = AltSportsData(
api_key='your-api-key',
retry_config=RetryConfig(
enabled=True,
max_retries=5,
respect_rate_limits=True # Wait for rate limit reset
)
)Timeout Configuration
# Global timeout
client = AltSportsData(
api_key='your-api-key',
timeout=60.0 # 60 seconds
)
# Per-request timeout
league = client.leagues.get('league_001', timeout=10.0)Context Manager
Use as a context manager for automatic resource cleanup:
from altsportsdata import AltSportsData
with AltSportsData(api_key='your-api-key') as client:
leagues = client.leagues.list(tier='elite')
print(leagues.data)
# Client automatically closes connectionsAsync Support
The SDK supports asyncio for concurrent requests:
import asyncio
from altsportsdata import AsyncAltSportsData
async def main():
async with AsyncAltSportsData(api_key='your-api-key') as client:
# Concurrent requests
leagues_task = client.leagues.list(tier='elite')
sports_task = client.sports.list()
leagues, sports = await asyncio.gather(leagues_task, sports_task)
print(f'Leagues: {len(leagues.data)}')
print(f'Sports: {len(sports.data)}')
asyncio.run(main())Environment Variables
# .env file
ALTSPORTSDATA_API_KEY=your-api-key
ALTSPORTSDATA_BASE_URL=https://api.altsportsdata.com/v1import os
from dotenv import load_dotenv
from altsportsdata import AltSportsData
load_dotenv()
client = AltSportsData(
api_key=os.getenv('ALTSPORTSDATA_API_KEY'),
base_url=os.getenv('ALTSPORTSDATA_BASE_URL')
)Logging
Enable debug logging:
import logging
from altsportsdata import AltSportsData
# Enable debug logging
logging.basicConfig(level=logging.DEBUG)
client = AltSportsData(api_key='your-api-key')
# SDK will log HTTP requests and responses
leagues = client.leagues.list()DataFrame Support
Convert responses to pandas DataFrames:
import pandas as pd
from altsportsdata import AltSportsData
client = AltSportsData(api_key='your-api-key')
leagues = client.leagues.list(tier='elite')
# Convert to DataFrame
df = pd.DataFrame([league.dict() for league in leagues.data])
print(df[['name', 'country', 'tier', 'founded']])