# AltSportsData SDK

[![PyPI](https://img.shields.io/pypi/v/altsportsdata.svg)](https://pypi.org/project/altsportsdata/)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)

**Alternative sports odds & data for sportsbooks, DFS platforms, and prediction markets.**

One SDK. 30 leagues. Every market type. Moneylines, matchups, props, podiums, futures, and parlays — from surfing to Supercross to Formula Drift.

```
pip install altsportsdata
```

---

## Example 1 — Pre-Event Moneylines

```python
from altsportsdata import AltSportsData

client = AltSportsData(api_key="your_key", league="spr")  # Supercross

events = client.list_events(status="upcoming")
odds = client.get_moneylines(events[0].id)

for o in sorted(odds["eventWinner"], key=lambda x: x["odds"])[:5]:
    ath = o["athlete"]
    print(f'{ath["firstName"]} {ath["lastName"]:20} {o["probability"]:6.2f}%  ({o["odds"]:.2f})')
```

```
Eli Tomac              49.42%  (2.02)
Hunter Lawrence        37.57%  (2.66)
Ken Roczen             23.49%  (4.26)
Cooper Webb            14.62%  (6.84)
Joey Savatgy            6.17%  (16.20)
```

## Example 2 — Head-to-Head Matchups

```python
matchups = client.get_matchups(events[0].id)

for m in matchups["headToHead"]:
    p1, p2 = m["eventParticipant1"], m["eventParticipant2"]
    a1, a2 = p1["athlete"], p2["athlete"]
    print(f'{a1["firstName"]} {a1["lastName"]} ({p1["odds"]:.2f})'
          f'  vs  {a2["firstName"]} {a2["lastName"]} ({p2["odds"]:.2f})')
```

```
Cooper Webb (2.31)  vs  Ken Roczen (1.57)
Eli Tomac (1.66)  vs  Hunter Lawrence (2.13)
```

## Example 3 — Podium Probabilities

```python
podiums = client.get_podiums(events[0].id)

for o in sorted(podiums["podiums"], key=lambda x: x["odds"])[:5]:
    ath = o["athlete"]
    print(f'{ath["firstName"]} {ath["lastName"]:20} {o["probability"]:5.1f}%  ({o["odds"]:.2f})')
```

```
Eli Tomac              87.7%  (1.14)
Hunter Lawrence        77.5%  (1.29)
Ken Roczen             63.7%  (1.57)
Cooper Webb            49.6%  (2.02)
Joey Savatgy           23.3%  (4.28)
```

## Example 4 — Historical Results & Settlement

```python
wsl = AltSportsData(api_key="your_key", league="wsl")  # World Surf League

completed = wsl.list_events(status="completed")
odds = wsl.get_moneylines(completed[0].id)

for o in sorted(odds["eventWinner"], key=lambda x: x["odds"])[:5]:
    ath = o["athlete"]
    tag = "✅" if o["settlement"] == "WIN" else "  "
    print(f'{tag} {ath["firstName"]} {ath["lastName"]:20} odds {o["odds"]:5.2f}  → {o["settlement"]}')
```

```
   Molly Picklum        odds  3.50  → LOSE
   Caitlin Simmers      odds  3.88  → LOSE
   Erin Brooks          odds  5.49  → LOSE
✅ Gabriela Bryan        odds  6.46  → WIN
   Bettylou Johnson     odds  9.90  → LOSE
```

---

## All Market Types

```python
# Sportsbook — traditional markets
client.get_moneylines("event_id")         # event winner
client.get_matchups("event_id")           # head-to-head
client.get_totals("event_id")             # over/under
client.get_exactas("event_id", n=2)       # exacta (2, 3, or 4)
client.get_podiums("event_id")            # top-3 finish
client.get_shows("event_id")             # shows
client.get_heat_winners("event_id")       # heat winner
client.get_fastest_lap("event_id")        # fastest lap
client.get_dream_team("event_id")         # dream team

# DFS — player-level markets
client.get_player_props("event_id")       # prop bets
client.get_player_matchups("event_id")    # pick'em matchups
client.get_player_totals("event_id")      # over/under by stat

# Prediction markets — probability-first
client.get_market_probabilities("event_id")               # win probabilities
client.get_podium_probabilities("event_id")               # top-3 probabilities
client.get_top_finish_probabilities("event_id", top_n=5)  # top-N probabilities

# Same Game Parlay
client.calculate_parlay("event_id", picks=["odd_id_1", "odd_id_2"])

# Generic — any market by name or alias
client.get_odds("event_id", "moneyline")  # aliases: "h2h", "props", "totals", etc.
```

## Events

```python
client.list_events(status="upcoming")                     # pre-event
client.list_events(status="live")                         # in-progress
client.list_events(status="completed")                    # historical + settlement
client.list_events(status=["live", "upcoming"])           # combine filters
client.list_events(league="f1", status="upcoming")        # filter by league
client.get_event("event_id")                              # full detail with rounds/heats
client.get_participants("event_id")                       # athletes / roster
client.get_heat_scores("event_id", "heat_id")            # scores / lap times
```

## Futures

```python
client.list_futures()                                     # all available futures
client.get_futures(tour="tour_id", type="winner")         # season winner odds
```

## Setup

```python
from altsportsdata import AltSportsData

# All leagues
client = AltSportsData(api_key="your_key")

# Lock to a league — auto-filters every query
wsl = AltSportsData(api_key="your_key", league="wsl")
f1  = AltSportsData(api_key="your_key", league="f1")
spr = AltSportsData(api_key="your_key", league="spr")
```

## Google Colab

```python
!pip install altsportsdata

from altsportsdata import AltSportsData
from google.colab import userdata

client = AltSportsData(api_key=userdata.get("ALTSPORTSDATA_API_KEY"))

for lg in client.list_leagues():
    print(f"{lg.key:15} {lg.name}")
```

## 30 Leagues

| Code | League | Code | League |
|------|--------|------|--------|
| `wsl` | World Surf League | `pbr` | Professional Bull Riders |
| `sls` | Street League Skateboarding | `bkfc` | Bare Knuckle FC |
| `f1` | Formula 1 | `motogp` | MotoGP |
| `spr` | Supercross | `mxgp` | MXGP |
| `nrx` | Nitrocross | `jaialai` | Jai Alai |
| `fdrift` | Formula Drift | `nll` | National Lacrosse League |
| `masl` | Major Arena Soccer | `nhra` | NHRA Drag Racing |
| `powerslap` | Power Slap | `dgpt` | Disc Golf Pro Tour |
| `worldoutlaws` | World of Outlaws | `usac` | USAC Racing |
| `xgame` | X Games | `motoamerica` | MotoAmerica |
| `hlrs` | High Limit Racing | `byb` | BYB Extreme Fighting |
| `athletesunlimited` | Athletes Unlimited | `lux` | LUX Fight League |
| `raf` | Real American Freestyle | `mltt` | Major League Table Tennis |
| `motocrs` | Motocross | `spectation` | Spectation |
| `gsoc` | Global Soccer | `sprmtcrs` | Supermotocross |

## Links

- [API Docs](https://api.altsportsdata.com/public/docs)
- [Swagger](https://api.altsportsdata.com/public/docs/swagger)

## License

MIT
