BetsAPI APIbetsapi.com ↗
Retrieve match results, quarter scores, and team stats for the eBasketball H2H GG League (4x5mins) via two structured endpoints.
What is the BetsAPI API?
This API exposes match results and per-match statistics for the eBasketball H2H GG League (4x5mins) via two endpoints. get_results returns paginated match listings — 30 per page — with home/away team names, IDs, final scores, and UTC timestamps. get_match_details returns a single match record including period-by-period scores (quarters 1–4, half-time, and final), full-game stats arrays, and half-game stats where the source publishes them.
curl -X GET 'https://api.parse.bot/scraper/88bd064f-14ec-46b5-b471-f891f1332e53/get_results?page=1' \ -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 betsapi-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.
"""Walkthrough: H2H GG League SDK — bounded, re-runnable; every call capped."""
from parse_apis.betsapi_com_api import H2hGgLeague, InputNotFound
client = H2hGgLeague()
# List recent match results — limit caps TOTAL items fetched across all pages.
for match in client.matches.list(limit=5):
print(match.date, match.home_team, "vs", match.away_team, match.score)
# Drill-down: grab one match, then fetch its full details via the instance method.
match = client.matches.list(limit=1).first()
if match is not None:
detail = match.details()
print(f"{detail.home_team} vs {detail.away_team} — {detail.score}")
print(f"Sport: {detail.sport} League: {detail.league}")
# Walk period scores and match stats from the detail view.
for ps in detail.period_scores:
print(f" Period {ps.period}: {ps.home}-{ps.away}")
for stat in detail.match_stats:
print(f" {stat.name}: {stat.home}-{stat.away}")
# Point lookup using an event_id discovered from the list.
if match is not None:
try:
full = client.match_details.get(event_id=match.event_id)
print(f"Looked up: {full.home_team} vs {full.away_team}")
except InputNotFound as e:
print(f"Match not found: {e}")
print("exercised: matches.list / match.details / match_details.get")
Retrieve match results for the eBasketball H2H GG League (4x5mins), one row per match, 30 matches per page in reverse chronological order. Each row carries the match date/time (UTC ISO 8601), home and away team names and ids, the score string (e.g. "52-55", one shape), and event_id, which is the key for get_match_details. Matches currently in progress at the top of the list may appear with a partial or 0-0 score. One request per page; page selects the page (1 when omitted) and total_pages reports how many pages the site exposes.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
{
"type": "object",
"fields": {
"page": "current page number",
"matches": "array of match result objects",
"total_pages": "total number of available pages",
"matches[].date": "match start time, UTC ISO 8601",
"matches[].score": "final (or current) score as \"home-away\"",
"matches[].event_id": "numeric match identifier as a string; pass unchanged to get_match_details",
"matches[].away_team": "away team name",
"matches[].home_team": "home team name",
"matches[].away_team_id": "site team identifier of the away team (string)",
"matches[].home_team_id": "site team identifier of the home team (string)"
},
"sample": {
"data": {
"page": 1,
"matches": [
{
"date": "2026-09-11T18:07:00Z",
"score": "52-55",
"event_id": "13116150",
"away_team": "MEM Grizzlies (GRAVITY)",
"home_team": "MIL Bucks (INVINCIBLE)",
"away_team_id": "1133370",
"home_team_id": "1224590"
},
{
"date": "2026-09-11T18:03:00Z",
"score": "49-51",
"event_id": "13116070",
"away_team": "BKN Nets (NIGHTHAWK)",
"home_team": "MIA Heat (CYPHER)",
"away_team_id": "1170173",
"home_team_id": "1155064"
}
],
"total_pages": 8145
},
"status": "success"
}
}About the BetsAPI API
Match Listings with get_results
get_results returns up to 30 matches per page in reverse chronological order. Each object in the matches array includes home_team, away_team, home_team_id, away_team_id, the score string in home-away format, a UTC ISO 8601 date, and an event_id string. The total_pages field lets you calculate how many additional pages to fetch. Pass an integer page parameter to paginate through the full result history.
Per-Match Detail with get_match_details
get_match_details accepts a single required parameter event_id — taken directly from a get_results response — and returns the full match record for that event. The period_scores array includes one entry per scoring period: quarters labeled "1" through "4", half-time labeled "H", and the final labeled "F". The match_stats array contains full-game team stat rows, each with a name, home value, and away value. The half_stats array follows the same shape but covers only the first half; both arrays are empty when the source has not published stats for that match.
Coverage and IDs
All team and match identifiers (home_team_id, away_team_id, event_id) are stable string representations of the site's numeric IDs. They can be used to join data across paginated result pages or to build per-team match histories by filtering the matches array on the client side. The league and sport fields in get_match_details reflect exactly what the source publishes for the event.
The BetsAPI API is a managed, monitored endpoint for betsapi.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when betsapi.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 betsapi.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?+
- Build a historical results table for the eBasketball H2H GG League using paginated get_results responses.
- Calculate average quarter scores per team by aggregating period_scores entries across get_match_details calls.
- Track head-to-head records between two teams by filtering matches on home_team_id and away_team_id.
- Feed final scores and timestamps into a betting model that requires chronological match history.
- Compare first-half and full-game stats using the half_stats and match_stats arrays from get_match_details.
- Monitor score margins per quarter to identify teams that commonly lead or trail at half-time.
- Populate a league standings or results feed that refreshes with each new page from get_results.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.