AltSportsData

Python SDK

Official Python SDK for AltSportsData

Python SDK

The official Python SDK for the AltSportsData API.

Installation

pip install altsportsdata

Package: 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 available

Error 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 connections

Async 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/v1
import 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']])

Next Steps

On this page