Virgin Bet APIvirginbet.com ↗
Access Virgin Bet odds via API. List sports categories, fetch event listings with 1X2 odds, and retrieve full market breakdowns for any event.
What is the Virgin Bet API?
The Virgin Bet API covers 3 endpoints that expose betting odds data from virginbet.com, including traditional sports and esports. Use list_sports to enumerate all available categories with live and upcoming event counts, get_sport_events to pull event listings with main market odds for a given sport, and get_event_odds to retrieve complete market breakdowns — Full Time result, Both Teams To Score, Total Goals, Corners, Goalscorer, and more — for any specific event.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/5132fb6e-f490-47b0-9b80-455283adcee5/list_sports' \ -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 virginbet-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.virgin_bet_odds_api import VirginBet, Sport, EventSummary, Event, Market, Selection, SportId
client = VirginBet()
# List all available sports
for sport in client.sports.list():
print(sport.name, sport.total_inplay, sport.total_not_started)
# Get events for Football using the SportId enum
football = client.sport(id=SportId.FOOTBALL)
for event in football.events.list():
print(event.name, event.competition, event.start_time, event.state)
if event.main_odds:
print(event.main_odds.home)
# Navigate from an event summary to full event details with all markets
first_event = next(iter(football.events.list()))
detailed = first_event.details()
print(detailed.name, detailed.home_team, detailed.away_team)
for market in detailed.markets:
print(market.name, market.market_kind, market.period_type)
for selection in market.selections:
print(selection.name, selection.odds_decimal, selection.odds_fractional, selection.outcome_type)
List all available sports and esports categories with live and upcoming event counts. Returns both traditional sports (Football, Tennis, Basketball) and esports (E-Sports, Esports Football, Esports Basketball). Each sport includes its ID for use in get_sport_events, counters for in-play and upcoming events, and navigation metadata. The full list is returned in a single response with no pagination.
No input parameters required.
{
"type": "object",
"fields": {
"total": "integer count of sports returned",
"sports": "array of sport objects with id, name, type, counts"
},
"sample": {
"data": {
"total": 40,
"sports": [
{
"id": "SBTC1_1",
"name": "Football",
"type": "H2H",
"events_count": 680,
"total_inplay": 5,
"leagues_count": 117,
"total_not_started": 1433
},
{
"id": "SBTC1_2",
"name": "Basketball",
"type": "H2H",
"events_count": 24,
"total_inplay": 2,
"leagues_count": 14,
"total_not_started": 72
}
]
},
"status": "success"
}
}About the Virgin Bet API
Sports and Esports Coverage
The list_sports endpoint returns every sport category available on Virgin Bet, including traditional sports such as Football, Tennis, and Basketball alongside esports categories like E-Sports, Esports Football, and Esports Basketball. Each sport object carries an id, name, type, and counts of live and upcoming events. The total field gives the overall count of active categories at query time.
Event Listings and Main Market Odds
Passing a sport_id (e.g. SBTC1_1 for Football, SBTC1_311 for Esports Football) to get_sport_events returns an array of event objects, each including home and away team names, competition name, scheduled start time, and 1X2 odds where the market is available. The total field reflects the number of events returned. Sport IDs obtained from list_sports map directly to this parameter.
Detailed Market Breakdowns
For any event ID returned by get_sport_events (e.g. SBTE_2_1027115542), get_event_odds delivers the full market picture. Response fields include markets — an array of market objects each containing selections and associated odds — along with players, home_team, away_team, start_time, competition, state, and tags. Specific markets available depend on the event but commonly include Full Time Result, Both Teams To Score, Total Goals, Goalscorer, and Corners. The optional sport_id parameter narrows the query to the correct category context.
Event State and Identifiers
Each event returned by get_event_odds carries a state field indicating whether the event is upcoming or live. The structured ID format used throughout (SBTC1_* for sports, SBTE_* for events) is consistent across endpoints, so IDs from one call chain cleanly into the next.
The Virgin Bet API is a managed, monitored endpoint for virginbet.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when virginbet.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 virginbet.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?+
- Aggregating 1X2 odds from Virgin Bet alongside other bookmakers to build an odds comparison tool
- Monitoring live event state changes via the
statefield inget_event_oddsfor a betting alert system - Tracking available esports markets (Esports Football, Esports Basketball) not covered by many traditional bookmaker APIs
- Building a competition-level odds dashboard using the
competitionfield returned in event listings - Pulling Goalscorer and Corners market odds for pre-match statistical modeling
- Enumerating live event counts per sport category using
list_sportsto surface active betting opportunities
| 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 Virgin Bet have an official public developer API?+
What does `get_event_odds` return beyond the main 1X2 market?+
markets array covering all available markets for the event, which for football typically includes Full Time Result, Both Teams To Score, Total Goals, Goalscorer, and Corners. It also returns players (an array of player name strings relevant to goalscorer-type markets), state, tags, team names, start_time, and competition.Does the API cover historical odds or results?+
Are odds returned for all sports, or only football?+
get_sport_events returns 1X2 odds where available for any sport ID passed. Coverage varies by sport — football events typically have the most markets, while niche sports or esports categories may have fewer selections. The get_event_odds endpoint will reflect whichever markets Virgin Bet has priced for that specific event.Does the API support filtering events by date range or competition name?+
get_sport_events accepts a sport_id but does not accept date or competition filters; all upcoming and live events for that sport are returned. You can fork the API on Parse and revise it to add filtering logic on top of the returned event array.