Access real-time betting odds from Winner.bet, Betika, and Superbet through a unified REST API. No authentication required.
https://alybet.ioNo authentication required. All endpoints are publicly accessible.
curl https://alybet.io/api/v2/oddsAll endpoints are relative to the Base URL above.
/api/v2/oddsAll matches from all bookmakers (recommended)
Returns {version, matches[], matches_count} with odds {"1","X","2"}/api/v2/odds?bookmaker=winnerFilter by bookmaker (winner, betika, superbet)
Returns only matches from the specified bookmaker/api/statsScraper statistics and system health
Returns match counts, error counts, cache metrics per bookmaker/api/capabilitiesEndpoint discovery (call at startup)
Returns available endpoints, filters, and bookmaker list/healthSimple health check for uptime monitoring
Returns {status: "ok"}Use the version field to detect changes.
Only process data when the version number increases. This avoids redundant work.
{
"version": 13500,
"matches": [
{
"id": "superbet_11521552",
"sport": "football",
"bookmaker": "Superbet",
"home": "Lech Poznan",
"away": "Gornik Zabrze",
"league": "Ekstraklasa",
"odds": { "1": 2.10, "X": 3.40, "2": 3.20 },
"start_time": 1772722800,
"updated": 1770477003
}
],
"matches_count": 10275
}{
"error": "Bad Request",
"message": "Unknown bookmaker: invalid"
}curl https://alybet.io/api/v2/odds | jq '.matches[0]'import requests
import time
BASE_URL = "https://alybet.io"
last_version = 0
while True:
response = requests.get(f"{BASE_URL}/api/v2/odds", timeout=10)
if response.status_code == 200:
data = response.json()
if data["version"] != last_version:
last_version = data["version"]
print(f"v{last_version}: {data['matches_count']} matches")
for m in data["matches"][:3]:
odds = m["odds"]
print(f" {m['home']} vs {m['away']} 1:{odds['1']} X:{odds['X']} 2:{odds['2']}")
time.sleep(15)const BASE_URL = "https://alybet.io";
let lastVersion = 0;
async function pollOdds() {
const res = await fetch(`${BASE_URL}/api/v2/odds`);
const data = await res.json();
if (data.version !== lastVersion) {
lastVersion = data.version;
console.log(`v${lastVersion}: ${data.matches_count} matches`);
data.matches.slice(0, 3).forEach(m =>
console.log(` ${m.home} vs ${m.away} 1:${m.odds["1"]} X:${m.odds["X"]} 2:${m.odds["2"]}`)
);
}
}
setInterval(pollOdds, 15000);Test your connection to the API directly from this page:
| HTTP Code | Cause | Solution |
|---|---|---|
200 | Success | Process the response normally |
400 | Invalid bookmaker filter | Use valid bookmaker: winner, betika, or superbet |
404 | Endpoint not found | Check /api/capabilities for available endpoints |
500 | Server error | Retry with exponential backoff |
504 | Gateway timeout | Retry after 5 seconds |