Singbet (Crown) API: Access Asian Handicap Odds Without an Agent

How To Guides January 10, 2026

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:

  1. Sign up for a free API key (no credit card required)
  2. Copy the Python script above
  3. Replace YOUR_API_KEY with your key
  4. Run it—Singbet Asian Handicap odds in under 60 seconds

Stop chasing agent relationships. Stop paying enterprise rates. Get sharp odds data now.

Get your free API key →