Volleyball Odds API: Live Odds from 70+ Bookmakers (Free Tier)

Volleyball Odds API - OddsPapi API Blog
How To Guides April 10, 2026

Why Volleyball Odds Data Is Hard to Find

Volleyball is the third most-watched sport on the planet. Over 800 million fans globally. Billions wagered every year across the VNL, CEV Champions League, Serie A, Polish SuperLiga, and hundreds of domestic leagues.

But try to find a volleyball odds API and you’ll hit a wall. Most providers treat volleyball like a second-class sport. A handful of bookmakers, match winner only, maybe the top 5 leagues if you’re lucky. No set handicaps, no totals, no sharp lines.

OddsPapi covers 256 volleyball tournaments with odds from 70+ bookmakers per fixture — including Pinnacle. Match winner, set handicaps, set totals, individual set winners, all in real-time. And the free tier gives you enough calls to build and test a real model.

Volleyball Odds Coverage: OddsPapi vs The Competition

Feature The Odds API SportsGameOdds OddsPapi
Bookmakers per match ~10-15 ~20 70+
Sharp books (Pinnacle) No No Yes
Crypto sportsbooks No No Yes (bcgame, rollbit, roobet, stake, blaze)
Markets per fixture 1-2 Limited 10+ (match winner, set handicaps, set totals)
Tournaments ~10 leagues ~15 leagues 256 tournaments
NCAA Volleyball No Limited Yes (82+ fixtures)
Asian leagues (Japan SV League) No No Yes
Live/in-play odds Delayed Limited Real-time (REST + WebSocket)
Historical data Paid add-on No Free tier
Free tier 500 req/mo Limited 250 req/mo

256 Tournaments: From VNL to NCAA

OddsPapi covers 256 volleyball tournaments globally. If bookmakers are pricing it, we have it:

Level Examples Bookmakers
International FIVB World Championship, VNL, Olympic Tournament, European Championship 70+
European Clubs CEV Champions League, CEV Cup, CEV Challenge Cup 60+
Top Domestic SuperLega (Italy), Liga Siatkówki (Poland), Bundesliga (Germany), Extraliga (Czech Republic) 60-70
Americas NCAA Regular Season (USA), Pro Volleyball Federation Women (USA) 30-50
Asia-Pacific SV League (Japan), SV League Women (Japan), Proliga (Indonesia) 30-50
Other Europe Ligue B (France), Elitserien (Sweden), Serie A1 Women (Italy), MEVZA 40-60

That’s not 10 “top leagues.” It’s 256 tournaments across every continent where volleyball is bet on professionally — including men’s and women’s competitions at every level.

Volleyball Markets: Match Winner to Set Handicaps

Each volleyball fixture on OddsPapi can have 10+ unique markets. Here are the key market IDs you’ll need for API calls:

Market Market ID Description
Match Winner 231 Who wins the match (2-way)
1st Set Winner 233 Who wins set 1
2nd Set Winner 235 Who wins set 2
3rd Set Winner 237 Who wins set 3
4th Set Winner 239 Who wins set 4
5th Set Winner 2311 Who wins set 5 (decider)
Total Sets O/U 2.5 2313 Over/Under 2.5 total sets
Total Sets O/U 3.5 2315 Over/Under 3.5 total sets
Total Sets O/U 4.5 2317 Over/Under 4.5 total sets
Set Handicap -1.5 2319 Team must win by 2+ sets
Set Handicap +1.5 2321 Team can lose by 1 set
Set Handicap -2.5 2323 Team must win 3-0
Set Handicap +2.5 2325 Team can lose 0-3 and still cover

Why set handicaps matter: In volleyball, a 3-0 sweep pays very differently than a 3-2 grind. Set handicaps let you express a view on match dominance, not just the winner. And with Pinnacle pricing these markets, you’re working with sharp lines — not inflated soft-book margins.

Tutorial: Pull Volleyball Odds with Python

Here’s a step-by-step guide to pulling live volleyball odds from OddsPapi. Every code snippet below was tested against the live API.

Step 1: Authentication

OddsPapi uses a query parameter for authentication — no OAuth, no headers, no tokens:

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"

# Test your key
response = requests.get(f"{BASE_URL}/sports", params={"apiKey": API_KEY})
print(response.status_code)  # 200 = you're in

Step 2: Discover Volleyball Tournaments

Volleyball is sportId: 23. Fetch all 256 tournaments:

response = requests.get(
    f"{BASE_URL}/tournaments",
    params={"apiKey": API_KEY, "sportId": 23}
)
tournaments = response.json()
print(f"Total volleyball tournaments: {len(tournaments)}")

# Filter to tournaments with upcoming fixtures
active = [t for t in tournaments if t["futureFixtures"] > 0]
print(f"Active tournaments: {len(active)}")

for t in active[:10]:
    print(f"  {t['tournamentName']} ({t['categoryName']}) - {t['futureFixtures']} fixtures")

Output:

Total volleyball tournaments: 256
Active tournaments: 92

  NCAA, Regular Season (USA) - 82 fixtures
  Ligue B (France) - 35 fixtures
  Pro Volleyball Federation, Women (USA) - 33 fixtures
  SV League (Japan) - 28 fixtures
  SuperLega (Italy) - 12 fixtures
  Proliga (Indonesia) - 10 fixtures
  Serie A1 Women (Italy) - 8 fixtures
  Extraliga (Czech Republic) - 8 fixtures
  ...

Step 3: Fetch Fixtures

Pull upcoming volleyball fixtures within a date range (max 10 days):

response = requests.get(
    f"{BASE_URL}/fixtures",
    params={
        "apiKey": API_KEY,
        "sportId": 23,
        "from": "2026-04-03",
        "to": "2026-04-06"
    }
)
fixtures = response.json()
with_odds = [f for f in fixtures if f["hasOdds"]]

print(f"Fixtures (3 days): {len(fixtures)}")
print(f"With odds: {len(with_odds)}")

for f in with_odds[:5]:
    print(f"  {f['participant1Name']} vs {f['participant2Name']}")
    print(f"    Tournament: {f['tournamentName']} ({f['categoryName']})")
    print(f"    Kick-off: {f['startTime']}")
    print(f"    Fixture ID: {f['fixtureId']}")

Step 4: Parse Odds

Grab odds for a specific fixture. The response is nested — bookmakerOdds → slug → markets → marketId → outcomes:

fixture_id = "id2300080670394400"  # Fatra Zlin vs VK Ostrava

response = requests.get(
    f"{BASE_URL}/odds",
    params={"apiKey": API_KEY, "fixtureId": fixture_id}
)
data = response.json()
bookmaker_odds = data["bookmakerOdds"]

print(f"Bookmakers: {len(bookmaker_odds)}")

# Parse Match Winner (market 231) from Pinnacle
pinnacle = bookmaker_odds["pinnacle"]["markets"]["231"]["outcomes"]
for outcome_id, outcome in pinnacle.items():
    for player_id, player in outcome["players"].items():
        print(f"  Outcome {outcome_id}: {player['price']}")

Output:

Bookmakers: 64
  Outcome 231: 1.595   # Home
  Outcome 232: 2.37    # Away

Step 5: Compare Pinnacle vs Soft Books

This is where the sharp line matters. Compare Pinnacle’s match winner odds against soft books to spot value:

# Compare Match Winner (market 231) across bookmakers
compare_books = ["pinnacle", "unibet", "stake", "bcgame", "kto"]

for slug in compare_books:
    if slug not in bookmaker_odds:
        continue
    markets = bookmaker_odds[slug].get("markets", {})
    m231 = markets.get("231", {}).get("outcomes", {})

    prices = {}
    for outcome_id, outcome in m231.items():
        for player_id, player in outcome["players"].items():
            prices[outcome_id] = player["price"]

    if prices:
        print(f"  {slug:15s} | Home: {prices.get('231', 'N/A'):>6}  Away: {prices.get('232', 'N/A'):>6}")

Output:

  pinnacle        | Home:  1.595  Away:   2.37
  unibet          | Home:   1.73  Away:    2.0
  stake           | Home:   1.66  Away:   2.19
  bcgame          | Home:   1.52  Away:    2.3
  kto             | Home:   1.73  Away:    2.0

Pinnacle has the tightest margin. Notice how Unibet and KTO are pricing the home team at 1.73 while Pinnacle has 1.595 — that’s a significant gap that a sharp model would flag. The crypto books (bcgame at 1.52) are pricing even lower, suggesting they’re following different feed providers.

Step 6: Full Script — Volleyball Odds Scanner

Here’s a complete script that scans upcoming volleyball fixtures and finds the best odds across bookmakers:

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"

# Get upcoming volleyball fixtures
fixtures_resp = requests.get(
    f"{BASE_URL}/fixtures",
    params={
        "apiKey": API_KEY,
        "sportId": 23,
        "from": "2026-04-03",
        "to": "2026-04-06"
    }
)
fixtures = [f for f in fixtures_resp.json() if f["hasOdds"]]

print(f"Scanning {len(fixtures)} volleyball fixtures...\n")

for fixture in fixtures[:5]:
    name = f"{fixture['participant1Name']} vs {fixture['participant2Name']}"
    print(f"{name} - {fixture['tournamentName']}")

    odds_resp = requests.get(
        f"{BASE_URL}/odds",
        params={"apiKey": API_KEY, "fixtureId": fixture["fixtureId"]}
    )
    bo = odds_resp.json().get("bookmakerOdds", {})

    # Find best odds for Match Winner (market 231)
    best_home = {"price": 0, "book": ""}
    best_away = {"price": 0, "book": ""}

    for slug, bdata in bo.items():
        m231 = bdata.get("markets", {}).get("231", {}).get("outcomes", {})
        for oid, odata in m231.items():
            for pid, pdata in odata.get("players", {}).items():
                price = pdata.get("price", 0)
                if oid == "231" and price > best_home["price"]:
                    best_home = {"price": price, "book": slug}
                elif oid == "232" and price > best_away["price"]:
                    best_away = {"price": price, "book": slug}

    print(f"  Best Home: {best_home['price']} ({best_home['book']})")
    print(f"  Best Away: {best_away['price']} ({best_away['book']})")
    print(f"  Books: {len(bo)}\n")

70+ Bookmakers: Who Covers Volleyball?

Here’s a breakdown of the bookmaker types you’ll find on OddsPapi volleyball fixtures:

Category Bookmakers Markets
Sharp Pinnacle 7-10 per match
Crypto bcgame, rollbit, roobet, blaze, stake, duelbits, vave Up to 20 per match
European Unibet, Bwin, Coral, Ladbrokes, LeoVegas, Winamax, BetMGM UK 4-7 per match
Brazilian EstrelaBet, Sportingbet BR, Stake BR, KTO, Blaze 1-7 per match
Regional BetRivers, Dafabet, SportyBet, TabTouch, Svenska Spel 1-7 per match

Notable: Bet365, DraftKings, FanDuel, Singbet, and SBOBet do not currently price volleyball through our feed. If sharp volleyball lines are your priority, Pinnacle is the anchor — and OddsPapi is one of the only APIs that includes it.

Real-Time Volleyball Odds via WebSocket

REST polling works for pre-match odds. But volleyball sets move fast — a set can swing in 5 minutes. For live in-play volleyball betting models, OddsPapi’s WebSocket feed pushes odds updates the moment bookmakers adjust their lines.

Instead of polling every 30 seconds and missing moves, you get instant updates across all 70+ bookmakers simultaneously. When Pinnacle shifts a set handicap line from -1.5 to -2.5 mid-match, your system knows within milliseconds — not minutes.

This matters most for:

  • Live set handicap trading — volleyball momentum shifts are rapid and predictable
  • In-play arb detection — soft books lag behind Pinnacle on set-by-set adjustments
  • Model validation — compare your live model predictions against real-time market prices

Free Historical Volleyball Data

Most odds APIs charge extra for historical data. OddsPapi includes it on the free tier. That means you can:

  • Backtest set handicap models — did your 3-0 sweep prediction model beat Pinnacle’s closing line?
  • Track line movements — how do volleyball opening lines move from 24h pre-match to tip-off?
  • Compare bookmaker accuracy — which books consistently misprice volleyball compared to Pinnacle?
  • Build training data — feed historical odds into ML models for match outcome prediction

For volleyball specifically, historical data is valuable because the sport is less efficiently priced than soccer or basketball. Soft books often set volleyball lines based on basic ELO, leaving gaps for anyone with better data.

FAQ

What sport ID is volleyball in OddsPapi?

Volleyball is sportId: 23. Beach Volleyball is a separate sport at sportId: 30.

Does OddsPapi cover NCAA volleyball?

Yes. NCAA volleyball (tournament ID 27743) regularly has 80+ upcoming fixtures with odds from 30+ bookmakers.

Which sharp bookmakers cover volleyball?

Pinnacle covers volleyball with 7-10 markets per match including match winner, set totals, and set handicaps. Bet365, Singbet, and SBOBet do not currently price volleyball through our feed.

How many markets are available per volleyball match?

Typically 10+ unique markets: match winner (231), individual set winners (233-2311), total sets over/under (2313-2317), and set handicaps (2319-2339).

Can I get live in-play volleyball odds?

Yes. OddsPapi offers both REST API polling and WebSocket feeds for real-time volleyball odds updates across all bookmakers.

Is there a free tier for volleyball data?

Yes. The free tier includes 250 requests per month — enough to build and test a volleyball model. Historical data is also included at no extra cost.

Stop Scraping. Start Building.

Volleyball is one of the most underserved sports in the odds API space. Most providers give you 10 bookmakers and a match winner market. OddsPapi gives you 70+ bookmakers, Pinnacle sharp lines, set handicaps, set totals, and 256 tournaments — from the VNL and CEV Champions League to NCAA and the Japanese SV League.

Get your free API key and start pulling volleyball odds in minutes. No credit card. No enterprise sales call. Just data.