arbplay

Stoiximan Odds API

The ArbPlay Stoiximan odds API serves Stoiximan's own JSON over HTTPS: one live file covering every in-play sport, pre-match files for soccer, basketball and tennis, and a soccer-leagues file with the upcoming rounds of 15 major leagues, about 7 days ahead. Live odds are rewritten about every 1–3 seconds, pre-match about every 4–7. Subscribe on RapidAPI, Zyla or JoJ API.

Stoiximan is Kaizen Gaming's Greek brand (the company behind Betano). The data comes from Stoiximan's Greek website.

Key facts

Stoiximan odds API at a glance.
BookmakerStoiximan — Kaizen Gaming's Greek brand of Betano
Company keystoiximan
Files5: site_live_stoiximan.json, site_pregame_stoiximan_{soccer,basketball,tennis}.json and site_pregame_stoiximan_soccer_leagues.json
Live coverageEvery in-play sport in one file — soccer, basketball, tennis, ice hockey, handball, volleyball, American football, baseball, table tennis, darts, futsal, golf, esports and virtual sports
Pre-match coverageSoccer, basketball and tennis for events starting in the next few hours, plus the upcoming rounds of 15 major soccer leagues — about 7 days ahead
Soccer leagues filePremier League, Championship, League One, League Two, LaLiga, Serie A, Bundesliga, Ligue 1, Eredivisie, Primeira Liga, Süper Lig, Stoiximan Super League, Champions League, Europa League and Conference League — match result only
RefreshLive about every 1–3 s, pre-match about every 4–7 s
Odds formatDecimal (price)
Cross-bookmaker idBetradar match id: betradarMatchId (live), betRadarId (pre-match)
SchemaLive: a store of sports, zones, leagues, events, markets, selections keyed by id. Pre-match: data.blocks[].events[].markets[].selections[]; the leagues file is a list of such pages, one per league
Market codesMRES match result, HCTG over/under, BTSC both teams to score, DBLC double chance, DNOB draw no bet
AccessRapidAPI, Zyla API Hub or JoJ API listing, or a direct X-API-Key from ArbPlay

Files and what's inside

Every file is Stoiximan'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.

FileWhat's insideRefresh
site_live_stoiximan.jsonEvery live event of every sport, as a normalized store keyed by id; includes live score in liveData≈1⁠–⁠3 s
site_pregame_stoiximan_soccer.jsonSoccer events starting in the next few hours: match result, over/under, BTTS, double chance, draw no bet≈4⁠–⁠7 s
site_pregame_stoiximan_soccer_leagues.jsonUpcoming rounds of 15 major soccer leagues (Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, Champions League…), one page per league, match result≈4⁠–⁠7 s
site_pregame_stoiximan_basketball.jsonBasketball games starting in the next few hours; odds sit in sixPackBlocks (winner, spread, total)≈4⁠–⁠7 s
site_pregame_stoiximan_tennis.jsonTennis matches starting in the next few hours (winner market)≈4⁠–⁠7 s

Pre-match markets by sport

SportMarkets
SoccerMatch result, over/under goals (full time and first half), both teams to score, double chance, draw no bet; the 15-league file has match result only
BasketballWinner, spread and total (sixPackBlocks), for games starting in the next few hours
TennisWinner, for matches starting in the next few hours

Every bookmaker compared: sports and markets per bookmaker.

Field map: where each value lives

Live paths start at data; pre-match paths start at data.data.blocks[] (the file has its own data key). In site_pregame_stoiximan_soccer_leagues.json, data is a list of league pages and each page has its own data.blocks[].

ValueLive filesPre-match files
Event idevents[id].idevents[].id
Teams / nameevents[id].participants[].name (isHome)events[].name ("Home - Away")
Leagueleagues[str(leagueId)].nameevents[].leagueName
Country / regionzones[str(zoneId)].nameevents[].regionName
Sportsports.byId[sportId].name (sportId = FOOT, BASK, TENN…)events[].sportId
Start timeevents[id].startTime (epoch ms)events[].startTime (epoch ms)
Marketmarkets[str(id)].name, .typeevents[].markets[].name, .type
Selection, priceselections[str(id)].name, .pricemarkets[].selections[].name, .price
Linemarkets[…].handicapmarkets[].handicap
Betradar idevents[id].betradarMatchIdevents[].betRadarId
Linkevents[id].url (path on stoiximan.gr)events[].url
Statusevents[id].isSuspended, markets[id].isSuspended (present only when true)— (no status field)
Live scoreevents[id].liveData.score—

Real sample

An abridged record from site_pregame_stoiximan_soccer.json: real values, most fields left out so the structure is readable. The downloads below keep every field.

{
  "data": {
    "blocks": [
      {
        "name": "International - Friendlies",
        "events": [
          {
            "id": "92917069",
            "name": "USA - Peru",
            "leagueName": "Friendlies",
            "regionName": "International",
            "sportId": "FOOT",
            "startTime": 1790454600000,
            "betRadarId": 73600382,
            "url": "/match-odds/usa-peru/92917069/",
            "markets": [
              {
                "name": "Match Result",
                "type": "MRES",
                "selections": [
                  {
                    "name": "1",
                    "fullName": "USA",
                    "price": 1.47
                  },
                  {
                    "name": "X",
                    "fullName": "Draw",
                    "price": 4.45
                  },
                  {
                    "name": "2",
                    "fullName": "Peru",
                    "price": 6.9
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

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 any Stoiximan file: live store, pre-match or leagues."""
    data, rows = payload["data"], []
    if isinstance(data, dict) and "events" in data:  # site_live_stoiximan.json: records keyed by string id
        for ev in data["events"].values():
            name = " - ".join(p["name"] for p in ev.get("participants", []))
            for market_id in ev.get("marketIdList", []):
                market = data["markets"].get(str(market_id))
                if market and market["type"] == "MRES":
                    sels = [data["selections"].get(str(s)) for s in market["selectionIdList"]]
                    odds = {s["name"]: s["price"] for s in sels if s}
                    rows.append((name, odds.get("1"), odds.get("X"), odds.get("2")))
    else:  # pre-match: one page (may be {}), or a list of league pages in the soccer_leagues file
        for page in data if isinstance(data, list) else [data]:
            for block in page.get("data", {}).get("blocks", []):
                for ev in block["events"]:
                    for market in ev.get("markets", []):
                        if market["type"] == "MRES":
                            odds = {s["name"]: s["price"] for s in market["selections"]}
                            rows.append((ev["name"], odds.get("1"), odds.get("X"), odds.get("2")))
    return rows

Fetch Stoiximan 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_stoiximan_soccer_leagues.json -o site_pregame_stoiximan_soccer_leagues.json
import requests  # pip install requests

resp = requests.get(
    "https://api.arbplay.app/v1/data/site_pregame_stoiximan_soccer_leagues.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_stoiximan_soccer_leagues.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.

MarketplaceYour key goes inBase URL and full path
RapidAPIX-RapidAPI-Key and X-RapidAPI-HostEndpoints tab of the listing
Zyla API HubAuthorization: Bearer <access key>Code sample on the listing
JoJ APIX-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_at and a Last-Modified header; send If-Modified-Since to get 304 Not Modified when nothing changed.
  • The soccer, basketball and tennis pre-match files mirror Stoiximan's upcoming view — events starting in the next few hours — and can be {} when nothing is scheduled. For a longer horizon use site_pregame_stoiximan_soccer_leagues.json: the upcoming rounds of 15 major leagues, about 7 days ahead, with the match-result market.
  • Pre-match basketball odds are in sixPackBlocks (winner, spread and total columns); its markets list is empty.
  • In the live store the id lists (marketIdList, selectionIdList) hold numbers but the dictionary keys are strings — look them up with str(id).
  • Live events have no name; build it from participants. Not every live event carries betradarMatchId.

Get Stoiximan odds API access

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 Stoiximan API?

No. ArbPlay is independent and is not affiliated with or endorsed by Stoiximan or its operator. It collects the odds Stoiximan publishes on its public website and serves them unchanged as JSON for informational use. ArbPlay does not place bets.

Which Stoiximan files can I download?

Five: site_live_stoiximan.json, which holds every in-play sport in one file; site_pregame_stoiximan_soccer.json, site_pregame_stoiximan_basketball.json and site_pregame_stoiximan_tennis.json for events starting soon; and site_pregame_stoiximan_soccer_leagues.json for 15 major soccer leagues. Call GET /v1/files to list the files your key can read.

Which leagues does the Stoiximan soccer-leagues file cover?

Premier League, Championship, League One, League Two, LaLiga, Serie A, Bundesliga, Ligue 1, Eredivisie, Primeira Liga, Süper Lig, Stoiximan Super League, Champions League, Europa League and Conference League. It holds each league's upcoming matches, about 7 days ahead, with the match-result market.

How often are Stoiximan 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 Stoiximan events with other bookmakers?

Yes. Most events carry a Betradar match id (betradarMatchId in the live file, betRadarId in pre-match files). Novibet, Superbet, OPAP and Bwin expose the same id, so you can join on it; for Elabet and Fonbet match on team names and start time.

How do I get access to the Stoiximan odds API?

Subscribe to the Stoiximan 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 Stoiximan 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: Novibet · Fonbet · Superbet · Elabet · OPAP · Bwin. Machine-readable: /openapi.json · /llms.txt. Guide: Greek bookmaker odds API.

Build on Stoiximan odds

RapidAPI · Zyla API Hub · JoJ API · direct key