LVBet APIlvbet.pl ↗
Access LVBet.pl betting odds via 3 endpoints: browse sports hierarchies, list upcoming matches, and fetch full market odds including handicaps and totals.
What is the LVBet API?
The LVBet.pl API provides 3 endpoints for extracting betting odds and market data from the LVBet.pl sportsbook. Use list_sports_groups to navigate the full sports hierarchy from top-level categories down to individual competitions, get_matches to retrieve upcoming pre-match listings with primary market odds, and get_match_odds to pull every available betting market for a specific match including decimal, American, and fractional odds formats.
curl -X GET 'https://api.parse.bot/scraper/d64342a4-b7f2-41f1-8f37-88781c3d54b1/list_sports_groups?lang=en&parent_id=null' \ -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 lvbet-pl-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.lvbet_odds_api import LVBet, SportsGroup, Match, Market, Selection, MatchNotFound
lvbet = LVBet()
# List top-level sports categories
for group in lvbet.sportsgroups.list():
print(group.name, group.sports_group_id, group.prematch_count, group.live_count)
# Drill into a specific sports group's matches using constructible SportsGroup
efootball = lvbet.sportsgroup(sports_group_id=79382)
for match in efootball.matches.list():
print(match.match_id, match.date, match.home, match.away, match.status, match.markets_count)
# Get all betting markets for a specific match using constructible Match
target = lvbet.match(match_id="bp:552720")
for market in target.markets.list():
print(market.market_id, market.name, market.label, market.line, market.markets_group)
for sel in market.selections:
print(sel.selection_id, sel.label, sel.odds_decimal, sel.odds_american, sel.odds_fractional)
List sports groups (sports, regions, competitions) in LVBet's hierarchy. Use parent_id=null to get top-level sports, then use a sports_group_id as parent_id to drill into sub-categories (e.g. Football → England → Premier League). Returns all children of the specified parent along with prematch/live event counts.
| Param | Type | Description |
|---|---|---|
| lang | string | Language code for labels. |
| parent_id | string | Parent sports group ID to list children of. Use 'null' for top-level sports categories, or a numeric ID like '78674' to get sub-groups. |
{
"type": "object",
"fields": {
"total": "integer total count of sports groups returned",
"sports_groups": "array of sports group objects with id, name, label, parent_id, prematch_count, live_count, order"
},
"sample": {
"data": {
"total": 157,
"sports_groups": [
{
"name": "Football",
"label": "Football",
"order": 1,
"parent_id": null,
"live_count": 0,
"prematch_count": 288,
"sports_group_id": 1
}
]
},
"status": "success"
}
}About the LVBet API
Sports Hierarchy Navigation
The list_sports_groups endpoint exposes LVBet's full category tree. Pass parent_id=null to retrieve top-level sports (e.g. Football, Basketball, E-Football). Each object in the sports_groups array includes an id, name, label, parent_id, and counts for prematch_count and live_count. Use the returned id as the parent_id in subsequent calls to drill down through regions and competitions. All endpoints accept a lang parameter for localized labels.
Match Listings and Primary Markets
get_matches accepts a sports_group_id (e.g. 79382 for E-Football Europe) and returns an array of match objects containing match_id, date, home, away, status, is_live, and markets_count. Alongside the match list, the primary_markets array delivers the main column markets — match result, total goals, first goal scorer — with each selection carrying decimal, American, and fractional odds. This lets you scan odds across all fixtures in a competition without making per-match calls.
Full Match Odds
get_match_odds takes a match_id (e.g. bp:536155, obtained from get_matches) and returns the complete market set for that fixture. The markets array includes market objects with market_id, name, label, line, status, and a markets_group field for grouping (e.g. match result, totals, handicaps, half-time markets). Each selection within a market carries all three odds formats. The total_markets integer tells you how many distinct betting options are available for the match.
Coverage Notes
The API covers pre-match markets. The is_live flag is present on match objects but live in-play odds are not the primary target of these endpoints. Coverage spans all sports and competitions available in LVBet.pl's pre-match offering, navigable via the list_sports_groups hierarchy.
The LVBet API is a managed, monitored endpoint for lvbet.pl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when lvbet.pl 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 lvbet.pl 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?+
- Compare pre-match odds across all fixtures in a specific competition using
get_matchesand theprimary_marketsresponse. - Track odds movements on match result, handicap, and totals markets for a specific event via repeated
get_match_oddscalls. - Build a sports hierarchy browser using
list_sports_groupswithparent_idtraversal from sport to region to competition. - Aggregate
prematch_countvalues across sports groups to identify which competitions have the most available markets. - Monitor E-Football or esports betting markets by targeting the relevant
sports_group_idinget_matches. - Convert and display odds in decimal, American, or fractional format depending on user locale using the multi-format odds fields.
- Identify value across sportsbooks by pulling
get_match_oddsdata and comparing LVBet lines against other sources.
| 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 LVBet.pl offer an official public developer API?+
What does `get_match_odds` return beyond the basic match result market?+
market_id, name, label, line, status, and markets_group, with selections carrying decimal, American, and fractional odds. The total_markets integer shows the total count of distinct markets returned.Does the API cover live in-play odds?+
is_live flag and live_count values appear in sports group objects, but real-time in-play odds updates are not the current scope. You can fork this API on Parse and revise it to add a live-odds endpoint if that coverage is needed.Can I filter matches by date range or team name?+
get_matches endpoint filters by sports_group_id — it returns all upcoming fixtures within a competition. There are no built-in date-range or team-name filter parameters. You can fork this API on Parse and revise it to add server-side or response-level filtering on the date, home, or away fields.How do I identify the correct `sports_group_id` for a competition?+
list_sports_groups iteratively. Start with parent_id=null to get top-level sports, then pass a sport's id as parent_id to get regions, then pass a region's id to get individual competitions. Each returned object includes id, name, and prematch_count so you can confirm the right target before calling get_matches.