Built for serious bettors.
Not a tipster service.
Raw per-bookmaker odds from 15 bookmakers across 12+ sports and 87+ football leagues. Football events cross-linked to BSD match data come with xG, lineups and ML predictions. More league coverage than most commercial providers — the inputs serious bettors use to build their own edges.
12 sports · 15 bookmakers
Football and tennis events are linked — they include a bsd_id you can use with the BSD football and tennis APIs. All other sports are odds-only (bsd_id: null).
Bookmakers included
Raw per-bookmaker prices — not just a single averaged number. 15 books plus pre-computed consensus lines.
Football — 87+ leagues & competitions
The odds feed covers 87+ football leagues — more than most commercial providers. 66 of them are linked to BSD match data (xG, lineups, predictions); the rest are odds-only. Includes qualifiers, cups, and international tournaments — not just the Big 5.
- Premier League · La Liga
- Serie A · Bundesliga · Ligue 1
- Eredivisie · Championship
- Super Lig · Pro League (BEL)
- Scottish Prem · Ekstraklasa
- Allsvenskan · Eliteserien
- Super League (SUI) · Superliga (ROU)
- Champions League · Europa League
- UEFA Nations League · Euro 2024
- FA Cup · Carabao Cup
- Copa del Rey · Coppa Italia
- DFB Pokal · Coupe de France
- Puchar Polski
- WC Qualification UEFA
- World Cup 2026
- Copa Libertadores · Copa Sudamericana
- Brasileirão Serie A & B
- MLS · Liga MX
- Copa America 2024
- CONCACAF Nations League
- WC Qualifications (all 6 conf.)
- Saudi Pro League
- CAF Champions League · AFCON
- Nigeria PFL · Botola Pro
- J1 League · K League 1
- Chinese Super League
- AFC Asian Cup 2023
- USL Championship (USA)
Two IDs, every response
Every event in the API includes mod_id and bsd_id. They serve different purposes:
| Field | Type | What it is |
|---|---|---|
| mod_id | integer | The ID used by the Odds API. Pass it to GET /odds/api/events/{mod_id}/ to get all bookmakers for that event. |
| bsd_id | integer | null | The event's ID in our master sports database. linked for football and tennis — use it with /api/v2/events/{bsd_id}/ or /tennis/api/v2/matches/{bsd_id}/. null for all other sports. |
| odds[ ] | array | One entry per (bookmaker × market × selection). Raw price, not averaged. Includes bookmaker, market, kind, selection, line, price, observed_at. |
// A single football event from GET /odds/api/events/?sport=football { "mod_id": 209476, // use this to call /odds/api/events/209476/ "bsd_id": 209476, // same for football — use with /api/v2/events/209476/ "sport": "football", "home_team": "Barcelona", "away_team": "Real Madrid", "kickoff_utc": "2026-06-08T19:00:00+00:00", "status": "notstarted", "league": "La Liga", "odds": [ { "bookmaker": "pinnacle", "market": "1X2_HOME_FT", "kind": "1X2", "selection": "HOME", "line": null, "price": 1.87, "observed_at": "2026-06-08T18:00:00+00:00" }, { "bookmaker": "bet365", "market": "1X2_HOME_FT", "kind": "1X2", "selection": "HOME", "line": null, "price": 1.83, "observed_at": "2026-06-08T17:55:00+00:00" }, { "bookmaker": "1xbet", "market": "OU_OVER_FT", "kind": "OU", "selection": "OVER", "line": 2.5, "price": 1.72, "observed_at": "2026-06-08T18:02:00+00:00" } ] }
From odds to match data in one step
When bsd_id is present, you can enrich any odds event with match detail, lineups, xG, H2H or ML predictions — all with the same token.
| Sport | bsd_id is | Enrich with | You get |
|---|---|---|---|
| ⚽ Football | Event.id |
/api/v2/events/{bsd_id}//api/v2/events/{bsd_id}/prediction//api/v2/events/{bsd_id}/lineups//api/v2/events/{bsd_id}/h2h/ |
Teams, live score, xG shotmap, lineups, ML prediction, H2H history |
| 🎾 Tennis | TennisMatch.id |
/tennis/api/v2/matches/{bsd_id}//tennis/api/v2/matches/{bsd_id}/h2h/ |
Players, surface, tournament, set scores, H2H, prediction |
| 🏀🏒⚾ Others | null | — | Odds only — no internal match database for these sports yet |
Code examples
Football — odds + prediction
Get today's football events, then use bsd_id to fetch the ML prediction.
# 1. List football events with per-bookmaker odds curl "https://sports.bzzoiro.com/odds/api/events/?sport=football&date=2026-06-08" \ -H "Authorization: Token <your_token>" # 2. Pick a bsd_id from the response and fetch the ML prediction curl "https://sports.bzzoiro.com/api/v2/events/209476/prediction/" \ -H "Authorization: Token <your_token>" # 3. Or get lineups + xG stats for the same event curl "https://sports.bzzoiro.com/api/v2/events/209476/lineups/" \ -H "Authorization: Token <your_token>" curl "https://sports.bzzoiro.com/api/v2/events/209476/stats/" \ -H "Authorization: Token <your_token>"
Tennis — odds + match detail
Tennis mod_id and bsd_id are different. Use mod_id for the Odds API, bsd_id for the Tennis API.
# 1. List today's tennis odds curl "https://sports.bzzoiro.com/odds/api/events/?sport=tennis&date=2026-06-08" \ -H "Authorization: Token <your_token>" # Response — note mod_id ≠ bsd_id for tennis { "mod_id": 1245, "bsd_id": 37240, "home_team": "Paul T.", "away_team": "Mpetshi Perricard G.", ... } # 2. Get all bookmakers for that match (use mod_id) curl "https://sports.bzzoiro.com/odds/api/events/1245/?sport=tennis" \ -H "Authorization: Token <your_token>" # 3. Enrich with match detail from tennis API (use bsd_id, Sports Addon required) curl "https://sports.bzzoiro.com/tennis/api/v2/matches/37240/" \ -H "Authorization: Token <your_token>"
Basketball / NHL / Baseball — odds only
bsd_id is null for these sports. Use mod_id to get the bookmaker detail.
# NBA odds curl "https://sports.bzzoiro.com/odds/api/events/?sport=basketball" \ -H "Authorization: Token <your_token>" # NHL odds curl "https://sports.bzzoiro.com/odds/api/events/?sport=hockey" \ -H "Authorization: Token <your_token>" # MLB odds curl "https://sports.bzzoiro.com/odds/api/events/?sport=baseball" \ -H "Authorization: Token <your_token>" # Response — bsd_id is null, mod_id is the only usable identifier { "mod_id": 1630, "bsd_id": null, "sport": "basketball", "home_team": "Boston Celtics", "away_team": "LA Lakers", "league": "NBA", "odds": [ { "bookmaker": "pinnacle", "market": "1X2_HOME_FT", "selection": "HOME", "price": 1.55 }, { "bookmaker": "bet365", "market": "OU_OVER_FT", "selection": "OVER", "line": 221.5, "price": 1.91 } ] }
Event detail — all bookmakers, grouped
Call /odds/api/events/{mod_id}/ with ?sport= to get every bookmaker's prices for one event.
# Football event detail (sport param is optional, defaults to football) curl "https://sports.bzzoiro.com/odds/api/events/209476/" \ -H "Authorization: Token <your_token>" # Tennis event detail — must pass sport=tennis curl "https://sports.bzzoiro.com/odds/api/events/1245/?sport=tennis" \ -H "Authorization: Token <your_token>" # Response — bookmakers grouped, each with their full market list { "mod_id": 1245, "bsd_id": 37240, "sport": "tennis", "home_team": "Paul T.", "away_team": "Mpetshi Perricard G.", "bookmakers": [ { "bookmaker": "pinnacle", "bookmaker_name": "Pinnacle", "markets": [ { "market": "MATCH_WINNER_HOME", "selection": "HOME", "price": 1.44 }, { "market": "MATCH_WINNER_AWAY", "selection": "AWAY", "price": 2.70 } ] }, { "bookmaker": "bet365", "bookmaker_name": "bet365", "markets": [ ... ] } ] }
Endpoints
Base: https://sports.bzzoiro.com · Auth: Authorization: Token <your_token>
| Endpoint | Description | Params |
|---|---|---|
| GET /odds/api/sports/ | List all sports with active odds — event count and bookmaker count. | — |
| GET /odds/api/events/ | Paginated events with per-bookmaker odds. Returns mod_id and bsd_id. |
sport, date (YYYY-MM-DD), status (live / upcoming / finished), limit (max 50), offset |
| GET /odds/api/events/{mod_id}/ | All bookmakers for one event, grouped. Pass mod_id from the list. |
sport (default: football) |
Your token is at /dashboard/ → API token. The same token works across all BSD APIs.
Ready to build?
$5/month · cancel any time · same token as your dashboard