Superbet Odds API
The ArbPlay Superbet odds API serves Superbet's own JSON over HTTPS in six files: live and pre-match for soccer, basketball and tennis. Pre-match soccer is the deepest file we serve — Superbet's full market list, including player markets, for matches about 6 days ahead — and most events carry a Betradar id.
The data comes from Superbet's Greek website.
Key facts
| Bookmaker | Superbet (Greece) |
|---|---|
| Company key | superbet |
| Files | 6: site_{live,pregame}_superbet_{soccer,basketball,tennis}.json |
| Pre-match coverage | Soccer about 6 days ahead; basketball and tennis about 2 days |
| Refresh | Live about every 1–3 s, pre-match about every 4–7 s |
| Odds format | Decimal (price) |
| Cross-bookmaker id | Betradar id: fixture.betradar_id — on most events |
| Schema | A list of events: event_id, fixture{…}, markets[].odds[] |
| File size | Pre-match soccer is by far the largest file we serve (around 200 MB) — use gzip and If-Modified-Since |
| Access | RapidAPI, Zyla API Hub or JoJ API listing, or a direct X-API-Key from ArbPlay |
Files and what's inside
Every file is Superbet's own JSON, served unchanged inside the API envelope. Refresh: live files about every 1–3 s, pre-match files about every 4–7 s.
| File | What's inside | Refresh |
|---|---|---|
site_live_superbet_soccer.json | Live soccer with every open market and in-play stats | ≈1–3 s |
site_live_superbet_basketball.json | Live basketball | ≈1–3 s |
site_live_superbet_tennis.json | Live tennis | ≈1–3 s |
site_pregame_superbet_soccer.json | Pre-match soccer — Superbet's full market list, including player markets (around 200 MB) | ≈4–7 s |
site_pregame_superbet_basketball.json | Pre-match basketball | ≈4–7 s |
site_pregame_superbet_tennis.json | Pre-match tennis | ≈4–7 s |
Pre-match markets by sport
| Sport | Markets |
|---|---|
| Soccer | Superbet's full market list: results, goals, handicaps, halves, corners and cards, plus player markets (scorers, assists, shots, cards) on some matches |
| Basketball | Winner, handicap and total points including overtime, regulation-time 1X2 (Full Time), halves, quarters, race to X points, plus player points, rebounds, assists, 3-pointers and combinations on some games |
| Tennis | Match and set winner, total games and sets, games handicap, correct score, tiebreaks, plus aces and double faults (match, per set, per player) on some matches |
Every bookmaker compared: sports and markets per bookmaker.
Field map: where each value lives
Paths start at data[] (a list of events); live and pre-match share one shape.
| Value | Path |
|---|---|
| Event id | event_id |
| Teams / name | fixture.event_name ("Home·Away", U+00B7) |
| Tournament | fixture.tournament_id (id only, no name) |
| Sport | fixture.sport_id (5 soccer, 4 basketball, 2 tennis) |
| Start time | fixture.utc_date (ISO) or unix_date_millis |
| Market | markets[].name ("Full Time", "Total Goals", "Double Chance", "Handicap"…) |
| Selection, price | markets[].odds[].metadata.name (1, X, 2…), .price |
| Selection text | odds[].metadata.info (e.g. "… to win the match") |
| Betradar id | fixture.betradar_id (string) |
| Line, player, period | odds[].metadata.specifiers (e.g. total, hcp, player, setnr, quarternr) |
| Status | odds[].status: 1 on open prices; we don't document 2. Also odds[].display |
| Live stats (live files) | inplay_stats, inplay_stats_metadata |
Real sample
An abridged record from site_pregame_superbet_soccer.json: real values, most fields left out so the structure is readable. The downloads below keep every field.
[
{
"event_id": 14906621,
"fixture": {
"betradar_id": "72415574",
"event_name": "Jablonec B·Hradec Kralove B",
"sport_id": 5,
"tournament_id": 40492,
"utc_date": "2026-09-27T08:15:00Z"
},
"markets": [
{
"name": "Full Time",
"odds": [
{
"price": 1.85,
"metadata": {
"name": "1",
"info": "Jablonec B to win the match"
}
},
{
"price": 3.65,
"metadata": {
"name": "X",
"info": "Draw result"
}
},
{
"price": 3.4,
"metadata": {
"name": "2",
"info": "Hradec Kralove B to win the match"
}
}
]
}
]
}
]
- site_live_superbet_soccer.sample.json — trimmed to a few events
- site_pregame_superbet_soccer.sample.json — trimmed to a few events
- site_pregame_superbet_basketball.sample.json — one game: winner, handicap and total points including overtime, a quarter total, and player points, rebounds, assists, 3-pointers and points + rebounds + assists
- site_pregame_superbet_tennis.sample.json — one match: winner, set winner, total games, and aces and double faults per match and per set
Each download is a complete GET /v1/data/{filename} response cut down to a few events, with every id reference still resolving. All samples are listed in samples/index.json.
Extract match-result (1X2) odds in Python
This function is tested against the samples on this page. Pass it the parsed JSON response.
def match_result(payload):
"""(event, 1, X, 2) rows from a Superbet soccer file (live or pre-match)."""
rows = []
for ev in payload["data"] or []:
name = ev["fixture"]["event_name"].replace("·", " - ") # "Home·Away"
for market in ev.get("markets", []):
if market["name"] == "Full Time":
odds = {o["metadata"]["name"]: o["price"] for o in market["odds"]}
rows.append((name, odds.get("1"), odds.get("X"), odds.get("2")))
return rows
Fetch Superbet odds
With a direct key
# 1. which files can this key read?
curl -sS --compressed -H "X-API-Key: YOUR_API_KEY" \
https://api.arbplay.app/v1/files
# 2. download one file (JSON envelope: company, file, updated_at, data)
curl -sS --compressed -H "X-API-Key: YOUR_API_KEY" \
https://api.arbplay.app/v1/data/site_pregame_superbet_soccer.json -o site_pregame_superbet_soccer.json
import requests # pip install requests
resp = requests.get(
"https://api.arbplay.app/v1/data/site_pregame_superbet_soccer.json",
headers={"X-API-Key": "YOUR_API_KEY"}, # gzip is negotiated automatically
timeout=60,
)
resp.raise_for_status()
payload = resp.json()
print(payload["updated_at"], payload["file"])
for event, home, draw, away in match_result(payload): # the function above
print(f"{event}: {home} / {draw} / {away}")
// Node 18+ (server-side: the API sends no CORS headers)
const res = await fetch("https://api.arbplay.app/v1/data/site_pregame_superbet_soccer.json", {
headers: { "X-API-Key": process.env.ARBPLAY_API_KEY },
});
if (!res.ok) throw new Error(`${res.status} ${(await res.json()).detail}`);
const { company, file, updated_at, data } = await res.json();
console.log(file, "updated", updated_at);
Through a marketplace
On RapidAPI, Zyla API Hub or JoJ API you call the marketplace's gateway with that marketplace's key. The two endpoints and the JSON they return are the same; copy the base URL and path from the listing.
| Marketplace | Your key goes in | Base URL and full path |
|---|---|---|
| RapidAPI | X-RapidAPI-Key and X-RapidAPI-Host | Endpoints tab of the listing |
| Zyla API Hub | Authorization: Bearer <access key> | Code sample on the listing |
| JoJ API | X-JoJAPI-Key (or Authorization: Bearer) | Code sample on the listing |
Freshness, gaps and caveats
- Refresh: live files about every 1–3 s, pre-match files about every 4–7 s. Every response carries
updated_atand aLast-Modifiedheader; sendIf-Modified-Sinceto get304 Not Modifiedwhen nothing changed. - There is no tournament name (only
fixture.tournament_id) and no separate team fields — splitfixture.event_nameon the middle dot (·). - Pre-match soccer is around 200 MB uncompressed. Request it with
Accept-Encoding: gzip, sendIf-Modified-Since, and poll it only as often as you need.
Get Superbet odds API access
- RapidAPI — Superbet odds listing
- Zyla API Hub — Superbet odds listing
- JoJ API — Superbet odds listing
- Contact ArbPlay for a direct key to
https://api.arbplay.app - Before you buy: direct keys for several bookmakers, trial keys, rate limits and data rights
Plans and quotas are set on each marketplace listing. More in the API reference and the API hub.
Frequently asked questions
Is this the official Superbet API?
No. ArbPlay is independent and is not affiliated with or endorsed by Superbet or its operator. It collects the odds Superbet publishes on its public website and serves them unchanged as JSON for informational use. ArbPlay does not place bets.
Which Superbet files can I download?
Six: site_live_superbet_soccer.json, site_live_superbet_basketball.json, site_live_superbet_tennis.json and the matching site_pregame_superbet_*.json files. Call GET /v1/files to list the files your key can read.
How often are Superbet odds updated?
During active hours live files are rewritten about every 1 to 3 seconds and pre-match files about every 4 to 7 seconds. Every response carries updated_at and a Last-Modified header, and If-Modified-Since returns 304 when nothing changed.
Can I match Superbet events with other bookmakers?
Yes. Most events carry fixture.betradar_id. Stoiximan, Novibet, OPAP and Bwin expose the same Betradar match id, so you can join on it.
Why is the Superbet pre-match soccer file so large?
It carries Superbet's full market list for every match, including player markets — thousands of distinct markets. Request it gzip-compressed and poll it sparingly.
How do I get access to the Superbet odds API?
Subscribe to the Superbet listing on RapidAPI, Zyla API Hub or JoJ API and call it with that marketplace's key; plans and quotas are set on each listing. For a direct key to https://api.arbplay.app (header X-API-Key), contact ArbPlay.
ArbPlay is independent and not affiliated with or endorsed by Superbet or its operator. Odds are collected from publicly available bookmaker odds and served unchanged for informational use; ArbPlay does not place bets. 21+.
Other bookmakers: Stoiximan · Novibet · Fonbet · Elabet · OPAP · Bwin. Machine-readable: /openapi.json · /llms.txt. Guide: Greek bookmaker odds API.