Singbet (Crown) API: Access Asian Handicap Odds Without an Agent
Looking for the Singbet API? Here’s Why You Can’t Find It
If you’ve been searching for direct API access to Singbet (also known as Crown in Asian markets), you’ve probably noticed something frustrating: there isn’t one. Singbet doesn’t offer public API access. The only way in? Sign up through an agent, put down a deposit, and hope you don’t get limited.
But here’s the thing: you don’t actually need direct Singbet access to get their odds data.
This guide shows you how to fetch real-time Singbet odds—including their legendary Asian Handicap markets—using Python and a single API call. No agents, no contracts, no minimum deposits.
What is Singbet (Crown)?
Singbet, known as Crown throughout Asia, launched in 2004 and quickly became the largest Asian bookmaker by volume. If you’ve heard the term “sharp book” thrown around, Singbet is often what people mean—alongside Pinnacle and a handful of others.
Here’s why serious bettors and quants care about Singbet:
| Feature | Why It Matters |
|---|---|
| Massive Liquidity | Handles the majority of Asian gambling volume. Where the money flows, the lines move. |
| Asian Handicap Specialists | Deeper alternate lines than any Western book. Quarter-goal handicaps are standard. |
| Line Originator | Singbet often moves first. Pinnacle and soft books follow. That lag is your edge. |
| Multiple Odds Formats | Hong Kong, Malaysian, Indonesian, Decimal—native support for how Asian markets think. |
The problem? Singbet requires agent-based access. You can’t just sign up on their website. You need a broker like BetInAsia, VOdds, or VIP-IBC—and they all come with minimum deposits, contracts, and the risk of getting your account limited if you win too much.
The workaround: Use an odds aggregator that already has Singbet data piped through their infrastructure. That’s what we’ll do here with Oddspapi.
Asian Handicap Markets Explained
Before we pull Singbet odds, you need to understand what makes Asian Handicap different from the moneyline or spread betting you might be used to.
Why Asian Handicap Exists
Standard 3-way betting (1X2) gives you three outcomes: home win, draw, away win. The draw outcome often has odds around 3.0-4.0, which means the house takes a significant cut on what should be a common result in soccer.
Asian Handicap eliminates the draw entirely. You’re betting on one of two outcomes, which means:
- Better odds (closer to 1.90-2.00 on both sides)
- Lower house edge
- More efficient markets
Half-Goal Handicaps (0.5, 1.5, 2.5)
These are the simplest. The favorite gets a negative handicap, the underdog gets positive.
| Bet | Handicap | Result for Bet to Win |
|---|---|---|
| Home -0.5 | -0.5 | Home wins by 1+ goals |
| Away +0.5 | +0.5 | Away wins OR draws |
| Home -1.5 | -1.5 | Home wins by 2+ goals |
| Away +1.5 | +1.5 | Away loses by 1 or less, or wins/draws |
Quarter-Goal Handicaps (0.25, 0.75, 1.25)
This is where Asian Handicap gets interesting—and where Singbet shines. A quarter-goal handicap splits your stake across two bets.
Example: Home -0.25 at odds 1.95
Your $100 bet is actually two $50 bets:
- $50 on Home -0 (Draw No Bet)
- $50 on Home -0.5
Possible outcomes:
| Match Result | -0 Bet | -0.5 Bet | Total Return on $100 |
|---|---|---|---|
| Home wins | Win (+$47.50) | Win (+$47.50) | $195 (full win) |
| Draw | Push ($50 back) | Loss (-$50) | $50 (half loss) |
| Away wins | Loss (-$50) | Loss (-$50) | $0 (full loss) |
This “half-win, half-push” mechanic is why quarter-goal lines exist: they let you fine-tune your position when the true line sits between whole or half-goal numbers.
Asian Handicap 0 (Draw No Bet)
AH 0 is the gateway drug. If you bet on a team at AH 0 and they draw, you get your stake back. Only a loss costs you money. This is what European books call “Draw No Bet” but with typically better odds because it’s native to the market structure.
Python Tutorial: Fetch Singbet Asian Handicap Odds
Now let’s get to the code. We’ll use Oddspapi’s v4 API to pull live Singbet odds for Asian Handicap markets.
Step 1: Get Your API Key
Sign up at oddspapi.io and grab your free API key. The free tier includes historical data and real-time odds from 300+ bookmakers—including Singbet.
Step 2: List Available Sports
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"
# Get all sports
response = requests.get(
f"{BASE_URL}/sports",
params={"apiKey": API_KEY}
)
sports = response.json()
for sport in sports[:10]:
print(f"{sport['sportId']}: {sport['sportName']}")
Output:
10: Soccer
11: Basketball
12: Tennis
13: Baseball
14: American Football
15: Ice Hockey
...
Key point: Soccer is sportId: 10. Remember this—it’s not negotiable.
Step 3: Get Tournaments
In Oddspapi terminology, a “tournament” is what Americans call a “league.” Premier League, LaLiga, Serie A—they’re all tournaments.
# Get soccer tournaments
response = requests.get(
f"{BASE_URL}/tournaments",
params={"apiKey": API_KEY, "sportId": 10}
)
tournaments = response.json()
for t in tournaments[:10]:
print(f"{t['tournamentId']}: {t['tournamentName']} ({t.get('upcomingFixtures', 0)} upcoming)")
Output:
7: UEFA Champions League (36 upcoming)
8: LaLiga (193 upcoming)
17: Premier League (170 upcoming)
...
Step 4: Get Fixtures
A “fixture” is a match. We want fixtures that have odds available.
# Get LaLiga fixtures with odds
response = requests.get(
f"{BASE_URL}/fixtures",
params={
"apiKey": API_KEY,
"tournamentId": 8, # LaLiga
"hasOdds": "true"
}
)
fixtures = response.json()
print(f"Found {len(fixtures)} fixtures with odds\n")
for f in fixtures[:5]:
print(f"{f['fixtureId']}")
print(f" {f['participant1Name']} vs {f['participant2Name']}")
print(f" Kickoff: {f['startTime']}\n")
Step 5: Fetch Singbet Asian Handicap Odds
This is where the magic happens. We’ll pull odds for a specific fixture and extract Singbet’s Asian Handicap prices.
# Get odds for a fixture
fixture_id = "id1000000861624304" # Replace with actual fixture ID
response = requests.get(
f"{BASE_URL}/odds",
params={"apiKey": API_KEY, "fixtureId": fixture_id}
)
odds_data = response.json()
# Check available bookmakers
bookmakers = list(odds_data.get("bookmakerOdds", {}).keys())
print(f"Bookmakers available: {len(bookmakers)}")
print(f"Singbet available: {'singbet' in bookmakers}")
print(f"Pinnacle available: {'pinnacle' in bookmakers}")
Output:
Bookmakers available: 136
Singbet available: True
Pinnacle available: True
136 bookmakers in one API call. That’s what “enterprise-grade coverage at developer prices” actually means.
Step 6: Parse the Nested JSON
The odds response is deeply nested. Here’s the path you need to understand:
bookmakerOdds[bookmaker_slug]['markets'][market_id]['outcomes'][outcome_id]['players']['0']['price']
Asian Handicap markets have specific IDs based on the handicap line:
| Market ID | Handicap | Description |
|---|---|---|
| 1072 | 0 | Asian Handicap 0 (Draw No Bet) |
| 1070 | -0.25 | Asian Handicap -0.25 |
| 1068 | -0.5 | Asian Handicap -0.5 |
| 1066 | -0.75 | Asian Handicap -0.75 |
| 1064 | -1 | Asian Handicap -1 |
| 1074 | +0.25 | Asian Handicap +0.25 |
| 1076 | +0.5 | Asian Handicap +0.5 |
Now let’s extract Singbet’s Asian Handicap odds:
# Extract Singbet Asian Handicap odds
singbet = odds_data['bookmakerOdds'].get('singbet', {})
markets = singbet.get('markets', {})
# Asian Handicap market IDs
ah_markets = {
'1072': 'AH 0',
'1070': 'AH -0.25',
'1068': 'AH -0.5',
'1074': 'AH +0.25',
'1076': 'AH +0.5'
}
print("Singbet Asian Handicap Odds:")
print("-" * 40)
for market_id, label in ah_markets.items():
if market_id in markets:
market = markets[market_id]
outcomes = market.get('outcomes', {})
prices = []
for outcome_id, outcome in outcomes.items():
price = outcome['players']['0']['price']
prices.append(price)
if len(prices) == 2:
print(f"{label}: Home {prices[0]:.3f} | Away {prices[1]:.3f}")
Output:
Singbet Asian Handicap Odds:
----------------------------------------
AH 0: Home 1.570 | Away 2.515
AH -0.25: Home 2.538 | Away 1.560
AH -0.5: Home 2.149 | Away 1.780
Complete Working Script
Here’s everything in one copy-paste script:
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"
def get_singbet_asian_handicap(tournament_id=8):
"""Fetch Singbet Asian Handicap odds for upcoming fixtures."""
# Get fixtures with odds
response = requests.get(
f"{BASE_URL}/fixtures",
params={"apiKey": API_KEY, "tournamentId": tournament_id, "hasOdds": "true"}
)
fixtures = response.json()
if not fixtures:
print("No fixtures with odds available")
return
# Process first fixture
fixture = fixtures[0]
print(f"\n{fixture['participant1Name']} vs {fixture['participant2Name']}")
print(f"Kickoff: {fixture['startTime']}")
print("=" * 50)
# Get odds
response = requests.get(
f"{BASE_URL}/odds",
params={"apiKey": API_KEY, "fixtureId": fixture['fixtureId']}
)
odds_data = response.json()
# Extract Singbet odds
singbet = odds_data['bookmakerOdds'].get('singbet', {})
if not singbet:
print("Singbet not available for this fixture")
return
markets = singbet.get('markets', {})
# Asian Handicap markets
ah_markets = {
'1072': ('AH 0', 0),
'1070': ('AH -0.25', -0.25),
'1068': ('AH -0.5', -0.5),
'1066': ('AH -0.75', -0.75),
'1064': ('AH -1', -1),
'1074': ('AH +0.25', 0.25),
'1076': ('AH +0.5', 0.5),
}
print("\nSINGBET ASIAN HANDICAP ODDS")
print("-" * 50)
for market_id, (label, handicap) in ah_markets.items():
if market_id in markets:
outcomes = markets[market_id].get('outcomes', {})
prices = [o['players']['0']['price'] for o in outcomes.values()]
if len(prices) == 2:
print(f"{label:12} | Home: {prices[0]:.3f} | Away: {prices[1]:.3f}")
if __name__ == "__main__":
get_singbet_asian_handicap()
Use Cases: What to Build with Singbet Data
Now that you can pull Singbet odds programmatically, here’s what sharp bettors actually do with this data:
1. Arbitrage Scanner
Singbet often has different lines than soft bookmakers (Bet365, DraftKings, FanDuel). By comparing Singbet’s Asian Handicap to a soft book’s spread, you can find guaranteed profit opportunities.
# Simple arb check: compare Singbet to Bet365
def check_arb(singbet_home, bet365_away):
"""Check if there's an arbitrage opportunity."""
implied_prob = (1/singbet_home) + (1/bet365_away)
if implied_prob < 1:
profit_pct = (1 - implied_prob) * 100
print(f"ARB FOUND: {profit_pct:.2f}% guaranteed profit")
return True
return False
2. Closing Line Value (CLV) Tracking
Singbet’s closing line is one of the most efficient in the world. Track how your model’s predictions compare to where Singbet closes—if you’re consistently beating the close, your model has edge.
3. Line Movement Alerts
Singbet often moves before Pinnacle and Western books. Set up alerts when Singbet shifts a line by more than 0.05 in odds—that movement will propagate to other books within minutes.
# Track line movements
previous_odds = {}
def detect_movement(fixture_id, market_id, current_price):
key = f"{fixture_id}_{market_id}"
if key in previous_odds:
delta = current_price - previous_odds[key]
if abs(delta) > 0.05:
print(f"MOVEMENT: {delta:+.3f} on {fixture_id}")
previous_odds[key] = current_price
4. Model Validation
If you’ve built a match prediction model, validate it against Singbet’s implied probabilities. Singbet’s lines incorporate massive information flow from Asian syndicates—they’re hard to beat consistently.
Singbet vs Pinnacle vs SBOBet
These are the three sharp bookmakers most accessible via odds APIs. Here’s how they compare:
| Feature | Singbet (Crown) | Pinnacle | SBOBet |
|---|---|---|---|
| Primary Market | Asia | Global | Asia |
| Best For | Soccer Asian Handicap | All sports, closing line | Soccer, Basketball |
| Line Movement | Often first mover | Follows, but most liquid | Follows Singbet |
| Limit Tolerance | High (rarely limits winners) | Never limits | Medium |
| Quarter-Goal Lines | Extensive | Limited | Good |
| API Access | Agent-only (use Oddspapi) | Direct API available | Agent-only (use Oddspapi) |
| Available via Oddspapi | Yes | Yes | Yes |
The edge? All three are available through a single Oddspapi call. No need to maintain separate broker relationships or pay enterprise API fees.
Why Not Just Scrape?
You might be thinking: “Why pay for an API when I can scrape odds myself?”
Here’s why scraping sharp books is a terrible idea:
- Singbet has no public website. You literally can’t scrape what doesn’t exist publicly.
- Agent platforms actively block scrapers. BetInAsia, VOdds, and VIP-IBC will ban your account.
- Latency matters. By the time your scraper parses HTML, the line has moved.
- Maintenance hell. Bookmaker sites change constantly. Scrapers break weekly.
Oddspapi handles all of this—infrastructure, data normalization, latency optimization—so you can focus on building your model or scanner.
Get Started
Here’s your quickstart:
- Sign up for a free API key (no credit card required)
- Copy the Python script above
- Replace
YOUR_API_KEYwith your key - Run it—Singbet Asian Handicap odds in under 60 seconds
Stop chasing agent relationships. Stop paying enterprise rates. Get sharp odds data now.