SportyBet APIsportybet.com ↗
Access SportyBet odds, live scores, and betting markets via API. Get upcoming events, real-time match data, virtual football, and booking codes across sports.
What is the SportyBet API?
This API exposes 6 endpoints covering SportyBet's prematch and live betting data across football, basketball, and other sports. Use get_upcoming_events to retrieve paginated tournament brackets with full market odds including 1X2, Over/Under, Handicap, and Double Chance, or call get_live_events to pull currently active matches with real-time scores, match periods, and live market odds. Virtual football fixtures and single-event market depth are also available.
curl -X GET 'https://api.parse.bot/scraper/8ffd9f0c-6174-43af-80dc-4898f47f074b/get_upcoming_events?page=1&sport=football&page_size=10&market_ids=1%2C18&today_only=False&tournament_id=sr%3Atournament%3A16' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sportybet-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.sportybet_odds_api import SportyBet, Product, Sport, Tournament, Event
client = SportyBet()
# List available sports for prematch events
for sport in client.sports.list(product=Product.PREMATCH):
print(sport.name, sport.sport_id, sport.event_count)
# Get upcoming football tournaments with events and odds
for tournament in client.tournaments.upcoming(sport="football", page_size=10, today_only=False):
print(tournament.tournament_name, tournament.category)
for event in tournament.events:
print(event.home_team, "vs", event.away_team, event.start_time, event.match_status)
# Get live tournaments with real-time scores
for tournament in client.tournaments.live(sport="football"):
for event in tournament.events:
print(event.home_team, "vs", event.away_team, event.score, event.played_seconds)
# Get full odds for a specific event
match = client.events.get(event_id="sr:match:66456904")
print(match.home_team, match.away_team, match.match_status)
for market in match.markets:
print(market.name, market.specifier)
for outcome in market.outcomes:
print(outcome.description, outcome.odds, outcome.is_active)
Get upcoming and today's events with full betting odds for a sport. Returns tournaments with events, each containing multiple markets (1X2, Over/Under, Handicap, etc.) with odds for each outcome. Paginated by page number; each page returns up to page_size events grouped by tournament. Use tournament_id to filter results to a specific tournament.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| sport | string | Sport name ('football', 'basketball') or a raw sport ID (e.g. 'sr:sport:1', 'sr:sport:2') |
| page_size | integer | Number of events per page (max 100) |
| market_ids | string | Comma-separated market IDs to include in results |
| today_only | boolean | If true, only return today's games |
| tournament_id | string | Tournament ID to filter by (e.g. 'sr:tournament:16' for World Cup). Obtain tournament IDs from the tournament_id field in get_upcoming_events results. When omitted, returns events from all tournaments. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"sport": "string, the sport queried",
"page_size": "integer, events per page",
"today_only": "boolean, whether filtered to today only",
"tournaments": "array of tournament objects with events and odds",
"total_events": "integer, total number of events available"
},
"sample": {
"data": {
"page": 1,
"sport": "football",
"page_size": 10,
"today_only": false,
"tournaments": [
{
"events": [
{
"status": 0,
"game_id": "43966",
"markets": [
{
"name": "1X2",
"group": "Main",
"status": 0,
"outcomes": [
{
"id": "1",
"odds": "1.46",
"is_active": 1,
"description": "Home"
}
],
"market_id": "1",
"description": "1X2"
}
],
"event_id": "sr:match:66456904",
"away_team": "South Africa",
"home_team": "Mexico",
"start_time": 1781204400000,
"match_status": "Not start",
"total_markets": 625
}
],
"category": "International",
"tournament_id": "sr:tournament:16",
"tournament_name": "World Cup"
}
],
"total_events": 570
},
"status": "success"
}
}About the SportyBet API
Upcoming and Live Events
The get_upcoming_events endpoint returns events grouped by tournament, with each event carrying multiple betting markets and their outcomes. Filter by sport (e.g. 'football' or a raw sport ID like 'sr:sport:1'), narrow to a specific competition using tournament_id, and control pagination with page and page_size (up to 100 events per page). Set today_only to true to restrict results to today's schedule. The total_events field in the response gives the full count of available events for that query. get_live_events takes a single sport parameter and returns live matches with match_status, current score, and active market odds. If no matches are live, tournaments returns an empty array.
Event-Level Market Detail
get_event_odds accepts an event_id in the format sr:match:<number> and returns every available market for that match: market_id, name, status, group, specifier, and each outcome with its current odds. The product_id parameter distinguishes prematch ('3') from live ('1') pricing. home_team, away_team, start_time (millisecond timestamp), and match_status are also included in the response. Event IDs are sourced from get_upcoming_events or get_live_events.
Sport Discovery and Virtual Football
get_sport_list returns every sport available on SportyBet, each with a sport_id, name, and event_count. Pass product as 'live' or 'prematch' to scope the count. These sport IDs feed directly into the sport parameter of the event endpoints. get_virtual_football returns simulated matches grouped by virtual league (e.g. England, World Cup) with standard market odds. New fixtures are generated continuously; filter by league and control page size to manage the volume.
Bet Booking
book_bet accepts a JSON array of selections — each specifying eventId, marketId, and outcome details — and returns a booking_code, a share_url, a deadline timestamp, and an outcomes array confirming each selection's teams, odds, and event details. The booking code is valid for use at SportyBet Tanzania retail shops or for sharing a pre-built bet slip.
The SportyBet API is a managed, monitored endpoint for sportybet.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sportybet.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sportybet.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate prematch odds across multiple sports for a betting comparison tool, using
get_upcoming_eventswithmarket_idsto pull only relevant markets. - Display real-time match scores and live odds on a sports dashboard using
get_live_eventsand polling for score and period updates. - Discover available sports and their event volumes with
get_sport_listto dynamically populate a sport selector in a betting app. - Retrieve full market depth for a specific match using
get_event_oddsto show all available bet types beyond basic 1X2. - Build a virtual football odds feed using
get_virtual_footballwith league and market filters for continuous simulated match data. - Generate shareable bet slips programmatically with
book_betto pre-load multi-selection accumulators for end users. - Track tournament-level betting lines by filtering
get_upcoming_eventsbytournament_idto monitor odds movement within a single competition.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does SportyBet have an official public developer API?+
What does `get_event_odds` return beyond basic win/draw/lose markets?+
get_event_odds returns the full set of markets SportyBet has priced for that match: Over/Under at multiple goal lines, Double Chance, Both Teams to Score, Correct Score, Handicap variants, and more. Each market object includes market_id, name, specifier (e.g. the goal line value), group, status, and an outcomes array with individual odds values.Are historical odds or settled match results available?+
What is the `tournament_id` parameter in `get_upcoming_events` and where do I get valid IDs?+
sr:tournament:<number> (e.g. sr:tournament:16 for the FIFA World Cup). Valid IDs appear in the tournaments array returned by get_upcoming_events itself when you fetch events without a tournament filter. Pagination via the page parameter lets you browse across all available tournaments.