Official Python SDK for Odds-API.io - Real-time sports betting odds from 250+ bookmakers.
- ⚡ Fast & Reliable - Built on requests and aiohttp for both sync and async workflows
- 🏀 20+ Sports - Basketball, football, tennis, baseball, and more
- 📊 250+ Bookmakers - Comprehensive odds coverage from major sportsbooks worldwide
- 💰 Arbitrage Detection - Find risk-free betting opportunities across bookmakers
- 📈 Value Bets - Identify positive expected value betting opportunities
- 🔴 Live Events - Real-time in-play event tracking and odds
- 🔍 Advanced Search - Search events, participants, and leagues
- ✨ Type Hints - Full type annotations for better IDE support
- 🐍 Modern Python - Supports Python 3.8+
pip install odds-api-ioSign up at odds-api.io to get started. Free tier includes:
- 5,000 requests/hour
- Access to all endpoints
- No credit card required
Full API documentation is available at docs.odds-api.io
from odds_api import OddsAPIClient
# Initialize the client
client = OddsAPIClient(api_key="your_api_key_here")
# Get available sports
sports = client.get_sports()
print(f"Found {len(sports)} sports")
# Get upcoming NBA events
events = client.get_events(sport="basketball", league="usa-nba")
# Search for specific games
lakers_games = client.search_events(query="Lakers")
# Get live basketball events
live = client.get_live_events(sport="basketball")
# Find arbitrage opportunities
arb_bets = client.get_arbitrage_bets(
bookmakers="singbet,bet365",
limit=10,
include_event_details=True
)
# Close the client when done
client.close()import asyncio
from odds_api import AsyncOddsAPIClient
async def main():
# Use async context manager
async with AsyncOddsAPIClient(api_key="your_api_key_here") as client:
# Get sports
sports = await client.get_sports()
# Get upcoming events
events = await client.get_events(sport="basketball", league="usa-nba")
# Find value bets
value_bets = await client.get_value_bets(
bookmaker="singbet",
include_event_details=True
)
print(f"Found {len(value_bets)} value betting opportunities")
# Run async code
asyncio.run(main())# Sync
with OddsAPIClient(api_key="your_api_key") as client:
sports = client.get_sports()
# Async
async with AsyncOddsAPIClient(api_key="your_api_key") as client:
sports = await client.get_sports()Check out the examples/ directory for more detailed examples:
- basic_usage.py - Getting started with the SDK
- async_example.py - Using the async client
- arbitrage_finder.py - Finding arbitrage opportunities
- value_bets.py - Identifying value bets
- odds_tracking.py - Tracking odds movements
| Method | Description | Docs |
|---|---|---|
get_sports() |
Get all available sports | 📖 |
get_leagues(sport) |
Get leagues for a sport | 📖 |
| Method | Description | Docs |
|---|---|---|
get_events(sport, **filters) |
Get events with filters | 📖 |
get_event_by_id(event_id) |
Get specific event details | 📖 |
get_live_events(sport) |
Get currently live events | 📖 |
search_events(query) |
Search events by keyword | 📖 |
| Method | Description | Docs |
|---|---|---|
get_event_odds(event_id, bookmakers) |
Get odds for an event | 📖 |
get_odds_movement(event_id, bookmaker, market) |
Track odds changes | 📖 |
get_odds_for_multiple_events(event_ids, bookmakers) |
Get odds for multiple events | 📖 |
get_updated_odds_since_timestamp(since, bookmaker, sport) |
Get recently updated odds | 📖 |
| Method | Description | Docs |
|---|---|---|
get_participants(sport, search=None) |
Get teams/players | 📖 |
get_participant_by_id(participant_id) |
Get participant by ID | 📖 |
| Method | Description | Docs |
|---|---|---|
get_bookmakers() |
Get all available bookmakers | 📖 |
get_selected_bookmakers() |
Get your selected bookmakers | 📖 |
select_bookmakers(bookmakers) |
Select bookmakers | 📖 |
clear_selected_bookmakers() |
Clear selection | 📖 |
| Method | Description | Docs |
|---|---|---|
get_arbitrage_bets(bookmakers, **options) |
Find arbitrage opportunities | 📖 |
get_value_bets(bookmaker, **options) |
Find value bets | 📖 |
The SDK provides custom exceptions for different error scenarios:
from odds_api import (
OddsAPIClient,
OddsAPIError,
InvalidAPIKeyError,
RateLimitExceededError,
NotFoundError,
ValidationError
)
client = OddsAPIClient(api_key="your_api_key")
try:
events = client.get_events(sport="basketball")
except InvalidAPIKeyError:
print("Your API key is invalid")
except RateLimitExceededError:
print("Rate limit exceeded - wait before retrying")
except NotFoundError:
print("Resource not found")
except ValidationError as e:
print(f"Invalid parameters: {e}")
except OddsAPIError as e:
print(f"API error: {e}")- ✅ Most Comprehensive Coverage - 250+ bookmakers across 20+ sports
- ✅ Near-Zero Latency - Real-time odds updates with minimal delay
- ✅ Direct Bet Links - Deep links directly to bookmaker bet slips
- ✅ Value Bet Detection - Automatically calculated expected value
- ✅ Historical Data - Access to past odds and results
- ✅ Developer Friendly - Clean API design with excellent documentation
Build powerful betting tools and analytics:
- 🎯 Arbitrage betting platforms
- 📊 Odds comparison sites
- 📈 Value betting calculators
- 🤖 Automated betting systems
- 📉 Sports analytics dashboards
- 🔔 Odds movement alerts
- Limited to 2 bookmakers selected at once
- 5,000 requests per hour (shared across all plans)
- No WebSocket access on free tier
- Python 3.8 or higher
requestslibrary (for sync client)aiohttplibrary (for async client)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Website: odds-api.io
- Documentation: docs.odds-api.io
- API Key: Get your API key
- GitHub: github.com/odds-api-io/odds-api-python
- Issues: Report a bug
- PyPI: pypi.org/project/odds-api-io
Need help? We're here for you:
- 📧 Email: hello@odds-api.io
- 📚 Documentation: docs.odds-api.io
- 🐛 Issues: GitHub Issues
- ⏱️ Response Time: Usually within 24 hours
Built with ❤️ by the Odds-API.io team