Esports Odds API: CS2, LoL & Dota 2 Betting Data from 350+ Bookmakers

How To Guides December 8, 2025

Why Most Esports APIs Fall Short

If you’ve tried to build anything with esports odds data, you already know the problem. The enterprise providers — Sportradar, PandaScore, Abios — charge $2,000-$10,000/month and lock you into annual contracts. The generic sports APIs cover 5-10 bookmakers for esports, maybe Bet365 and a few soft books. Neither option gives you what actually matters: sharp bookmaker odds from Pinnacle alongside esports specialists like GG.BET and Thunderpick, all in one feed.

OddsPapi fills that gap. 350+ bookmakers, including sharp books (Pinnacle, Singbet), crypto books (1xBet, Stake), and esports-native books (GG.BET, Thunderpick, Betway) — all through one REST API with a free tier. No enterprise sales call. No scraping. JSON in, odds out.

This guide covers everything: what’s covered, how to fetch it, and how it compares to every alternative.

Esports Odds Feed: What’s Covered

OddsPapi treats each esports title as its own sport, with dedicated sport IDs, tournament structures, and market types. Here’s the coverage breakdown:

Game Sport ID Example Tournaments Markets
Counter-Strike 2 17 PGL Major, ESL Pro League, BLAST Premier, IEM Match Winner, Map Winner, Map Handicap, Total Maps, Correct Score
League of Legends 18 Worlds, LEC, LCS, LCK, LPL, CBLOL Match Winner, Map Winner, Map Handicap, Total Maps
Dota 2 16 The International, DreamLeague, ESL One, DPC Match Winner, Map Winner, Map Handicap, Total Maps
Valorant 61 VCT Champions Tour, Game Changers, EMEA Clash Match Winner, Map Winner, Map Handicap
Call of Duty 56 CDL Major, Call of Duty League Match Winner, Map Markets
Rocket League 59 RLCS, Rocket League Championship Series Match Winner, Map Markets

Key Bookmakers for Esports

The bookmakers that matter for esports aren’t the same ones that matter for NFL or Premier League. Here’s who you get through OddsPapi:

Bookmaker Type Why It Matters
Pinnacle Sharp The benchmark line for esports. Lowest vig, sharpest market.
GG.BET Esports Specialist Deepest esports market coverage. Player props, round markets.
Betway Major Soft Heavy esports sponsorship (formerly Betway Esports). Wide coverage.
1xBet Crypto/Global Covers tier-2 and tier-3 tournaments most books ignore.
Thunderpick Crypto Esports Esports-first book. CS2 and Dota 2 specialist markets.
Bet365 Soft Global Largest soft book. Mainstream esports coverage.
Stake Crypto Major CS2 sponsor. Fast odds updates for live esports.

REST API vs WebSocket

OddsPapi offers two ways to consume esports odds data:

Method Use Case Update Speed Tier
REST API Pre-match analysis, line shopping, model building Seconds (poll-based) Free
WebSocket Live betting bots, real-time dashboards, arb detection Sub-second (push-based) Pro

For pre-match esports data, the REST API on the free tier is all you need. If you’re building something that reacts to live odds movements during a CS2 match, the WebSocket feed on the Pro tier pushes updates as they happen — no polling delay.

Esports Betting API Comparison (2026)

Here’s how OddsPapi stacks up against the alternatives for esports odds data specifically:

Feature OddsPapi PandaScore Abios The Odds API
Esports Bookmakers 14+ per fixture (majors) N/A (stats only) N/A (stats only) 5-10
Total Bookmakers 350+ 0 (no odds) 0 (no odds) ~40
Sharp Books (Pinnacle) Yes No No Yes
Esports Specialists GG.BET, Thunderpick, Stake N/A N/A No
Games Covered (Odds) 6+ titles 20+ (stats only) 30+ (stats only) 4-5
Match Stats/Scores No Yes (deep) Yes (deep) No
Historical Odds Free tier N/A N/A Paid only
WebSocket Pro tier Yes Yes No
Free Tier Yes (350+ books) No No Yes (~40 books)
Price Free – $99/mo $2,000+/mo Enterprise Free – $199/mo

The honest take: If you need match stats, player performance data, or in-game events (kills, objectives, round scores), PandaScore and Abios are built for that — but they don’t provide odds data. If you need odds from multiple bookmakers to build line shopping tools, arb scanners, or predictive models, OddsPapi is the only API that covers esports-specialist bookmakers on a free tier.

Supported Esports Games & Tournaments

Counter-Strike 2 (Sport ID: 17)

CS2 has the deepest esports odds coverage across bookmakers. Major tournaments consistently have 10-14 bookmakers pricing matches.

Tournaments with odds coverage: PGL Majors, ESL Pro League, BLAST Premier, IEM Katowice/Cologne, ESL Challenger League (regional), CCT Series, NODWIN Clutch Series

Market depth: Match Winner (171), Map 1 Winner (173), Map 2 Winner (175), Map 3 Winner (177), Map Handicap, Total Maps, Correct Score

League of Legends (Sport ID: 18)

LoL coverage spans all major regional leagues and international events.

Tournaments with odds coverage: Worlds, LEC (Europe), LCS (North America), LCK (Korea), LPL (China), CBLOL (Brazil), LJL (Japan), Prime League Pro Division

Typical coverage: 20-25 fixtures per week with odds across 10+ bookmakers on tier-1 events.

Dota 2 (Sport ID: 16)

Dota 2 coverage focuses on the DPC circuit and major LANs.

Tournaments with odds coverage: The International, DreamLeague, ESL One, DPC Regional Leagues, BetBoom Dacha

Valorant (Sport ID: 61)

Valorant coverage has grown rapidly since VCT franchising.

Tournaments with odds coverage: VCT Champions Tour, VCT Game Changers, EMEA Clash, Americas League, Pacific League

Call of Duty (Sport ID: 56) & Rocket League (Sport ID: 59)

Coverage for CoD and Rocket League is available for major events — CDL Majors for Call of Duty, RLCS for Rocket League. Market depth is narrower (primarily Match Winner), but Pinnacle and other sharp books do price these events.

Sport ID Reference

Game Sport ID API Slug
Dota 2 16 esport-dota
Counter-Strike 2 17 esport-counter-strike
League of Legends 18 esport-league-of-legends
Call of Duty 56 esport-call-of-duty
Rocket League 59 esport-rocket-league
Valorant 61 esport-valorant

Esports Markets & Odds Types

Esports markets follow a different structure than traditional sports. The core unit is a map (or game/round depending on the title), not a half or quarter. Here are the verified market IDs for esports:

Market Market ID Outcomes Available For
Match Winner 171 171 (Team 1), 172 (Team 2) All titles
Map 1 Winner 173 173 (Team 1), 174 (Team 2) CS2, LoL, Dota 2, Valorant
Map 2 Winner 175 175 (Team 1), 176 (Team 2) CS2, LoL, Dota 2, Valorant
Map 3 Winner 177 177 (Team 1), 178 (Team 2) CS2, LoL, Dota 2 (Bo3+)
Correct Score 2-0 1721 1721 (Team 1), 1722 (Team 2) CS2, LoL, Dota 2
Map 1 Handicap 1725 1725 (Team 1), 1726 (Team 2) CS2
Total Maps Over 1737 1737 (Over), 1738 (Under) CS2, LoL, Dota 2
Map 1 Total Over 1741 1741 (Over), 1742 (Under) CS2

Note: Market availability varies by bookmaker and tournament tier. Pinnacle and GG.BET typically offer the widest range of esports markets. Smaller bookmakers may only price the Match Winner (171) market.

Python Tutorial: Fetch Esports Odds in 5 Minutes

Everything below uses the free tier. No credit card required.

Step 1: Get Your API Key

Sign up at oddspapi.io and grab your API key from the dashboard. Authentication is via query parameter — no headers, no OAuth.

Step 2: Discover Esports Sports

import requests

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

# List all sports — filter for esports
response = requests.get(f"{BASE}/sports", params={"apiKey": API_KEY})
sports = response.json()

esports = [s for s in sports if s["slug"].startswith("esport")]
for s in esports:
    print(f"{s['sportId']:>3}  {s['sportName']}")

# Output:
# 16  ESport Dota
# 17  ESport Counter-Strike
# 18  ESport League of Legends
# 56  ESport Call of Duty
# 57  ESport Overwatch
# 58  ESport Rainbow Six
# 59  ESport Rocket League
# 60  ESport StarCraft
# 61  ESport Valorant
# 62  ESport Arena of Valor
# 63  ESport King of Glory
# 65  ESport Honor of Kings

Step 3: Find CS2 Matches with Odds

# Fetch CS2 fixtures for the next 7 days
from datetime import datetime, timedelta

today = datetime.now().strftime("%Y-%m-%d")
week_out = (datetime.now() + timedelta(days=7)).strftime("%Y-%m-%d")

response = requests.get(f"{BASE}/fixtures", params={
    "apiKey": API_KEY,
    "sportId": 17,          # CS2
    "from": today,
    "to": week_out,
    "hasOdds": True          # Only fixtures with odds
})
fixtures = response.json()

print(f"CS2 fixtures with odds: {len(fixtures)}\n")
for f in fixtures[:5]:
    print(f"{f['participant1Name']} vs {f['participant2Name']}")
    print(f"  Tournament: {f['tournamentName']}")
    print(f"  Fixture ID: {f['fixtureId']}")
    print(f"  Start: {f['startTime']}\n")

Step 4: Compare Odds Across Bookmakers

# Get odds for a specific fixture
fixture_id = fixtures[0]["fixtureId"]

response = requests.get(f"{BASE}/odds", params={
    "apiKey": API_KEY,
    "fixtureId": fixture_id
})
data = response.json()

print(f"{data.get('participant1Name', 'Team 1')} vs {data.get('participant2Name', 'Team 2')}\n")
print(f"{'Bookmaker':<20} {'Team 1':>8} {'Team 2':>8}")
print("-" * 38)

for slug, bk_data in data["bookmakerOdds"].items():
    markets = bk_data.get("markets", {})
    if "171" in markets:  # Match Winner market
        outcomes = markets["171"]["outcomes"]
        p1 = outcomes.get("171", {}).get("players", {}).get("0", {}).get("price", "—")
        p2 = outcomes.get("172", {}).get("players", {}).get("0", {}).get("price", "—")
        print(f"{slug:<20} {p1:>8} {p2:>8}")

This prints something like:

Parivision vs Team Vitality

Bookmaker                Team 1   Team 2
--------------------------------------
pinnacle                  1.303     3.44
betway                     4.40     1.17
vbet                       1.33     3.10
paddypower                 1.30     3.50
roobet                     1.35     2.94
bcgame                     1.33     3.10

Step 5: Fetch Odds for Multiple Esports

# Scan all esports titles for upcoming matches
ESPORTS = {
    16: "Dota 2",
    17: "CS2",
    18: "League of Legends",
    61: "Valorant",
}

import time

for sport_id, name in ESPORTS.items():
    response = requests.get(f"{BASE}/fixtures", params={
        "apiKey": API_KEY,
        "sportId": sport_id,
        "from": today,
        "to": week_out,
        "hasOdds": True
    })
    fixtures = response.json()
    print(f"{name}: {len(fixtures)} fixtures with odds")
    time.sleep(2)  # Respect rate limits

# Output (example):
# Dota 2: 7 fixtures with odds
# CS2: 27 fixtures with odds
# League of Legends: 25 fixtures with odds
# Valorant: 10 fixtures with odds

Historical Esports Odds: Free Backtesting Data

Most APIs charge extra for historical data. OddsPapi includes it on the free tier — every odds movement, timestamped, for every bookmaker that priced the match.

This is the data you need to backtest esports betting models: Did Pinnacle’s opening line predict the winner? How much did odds move after map vetoes? Where did the value sit before the market corrected?

# Fetch historical odds for a CS2 match
fixture_id = "id1704591169167084"  # PGL Major match

response = requests.get(f"{BASE}/historical-odds", params={
    "apiKey": API_KEY,
    "fixtureId": fixture_id,
    "bookmakers": "pinnacle",    # Up to 3 bookmakers per request
    "marketId": 171              # Match Winner
})
data = response.json()

# Historical odds are timestamped arrays
pinnacle = data["bookmakers"]["pinnacle"]["markets"]["171"]
team1_history = pinnacle["outcomes"]["171"]["players"]["0"]

print(f"Pinnacle odds history ({len(team1_history)} snapshots):\n")
for snap in team1_history[:5]:
    print(f"  {snap['createdAt'][:19]}  →  {snap['price']}")

Output:

Pinnacle odds history (7 snapshots):

  2026-02-22T04:18:46  →  1.303
  2026-02-22T04:18:41  →  1.307
  2026-02-22T04:17:52  →  1.3
  2026-02-22T04:17:52  →  1.317
  2026-02-22T04:17:51  →  1.308

You get the full line movement history — from opening price to kickoff — for free. Compare this to The Odds API, where historical data requires a paid plan, or PandaScore, which doesn’t provide odds data at all.

Esports Odds API FAQ

Is the esports odds API free?

Yes. OddsPapi’s free tier includes odds from 350+ bookmakers across all esports titles — CS2, League of Legends, Dota 2, Valorant, Call of Duty, and Rocket League. Historical odds data is also included for free.

Which esports titles are covered?

Counter-Strike 2 (CS2), League of Legends, Dota 2, Valorant, Call of Duty, Rocket League, Overwatch, Rainbow Six, StarCraft, Arena of Valor, King of Glory, and Honor of Kings. Each title has its own sport ID and tournament structure.

Does the API include Pinnacle esports odds?

Yes. OddsPapi includes Pinnacle odds for esports alongside specialists like GG.BET, Thunderpick, and Betway. Pinnacle is the industry benchmark for sharp esports pricing.

What’s the difference between an esports odds feed and an API?

An odds feed is a real-time push-based stream (WebSocket) that delivers updates as they happen. An API is request-response — you poll for data. OddsPapi provides both: a REST API (free tier) and a WebSocket feed (Pro tier).

How fast are esports odds updates?

REST API: seconds. WebSocket feed: sub-second. For pre-match line shopping and model building, REST is sufficient. For live betting automation during a CS2 match, use the WebSocket feed.

Can I get BLAST Premier or IEM odds through the API?

Yes. Major CS2 tournaments — BLAST Premier, IEM, ESL Pro League, PGL Majors — have odds from 10-14 bookmakers per fixture. Use sportId=17 and filter fixtures by tournament.

Start Building

350+ bookmakers. CS2, LoL, Dota 2, Valorant, and more. Historical odds included. Free forever on the starter tier.

Stop scraping. Stop paying enterprise rates for esports data you can get in 5 minutes.

Get Your Free API Key →