LOL Odds API

Our LOL odds API delivers LOL odds, player props, status and results for every event from 4 bookmakers, 4 of them Australian. leagueID=LOL. Free tier available.

Whether you're building a betting app, an odds comparison tool or a pricing model, the LOL odds API gives you structured data in the SportsGameOdds v2 shape so you can move fast.

LOL Odds API Features

Every endpoint is filterable, so you pull exactly the markets you need. Coverage spans 4 teams and 2 events currently carried, with 3 market families.

Available LOL betting markets include:

  • Head to head / moneylines (2-way and 3-way markets)
  • Lines, spreads and handicaps
  • Totals (over/under)
  • Alternative lines
  • Player props and game props
  • Period-specific markets (full game)

All market data is pre-match, refreshed every ~2 minutes; see pricing for what each plan can see.

LOL Player Props API

The Australian books price LOL at match and team level today; player props arrive in the same shape (the playerID in the statEntityID slot) as soon as a covered book offers them.

LOL Odds API with Results

SockOdds delivers LOL odds and event data together in one response — no need to stitch data from multiple sources. Each response includes:

  • Upcoming LOL events with status flags
  • Home and away team data with ids
  • Players with production ids where present
  • Full odds coverage: lines, totals, head to head, props and alternative lines
  • Results and scoringSupported flags where the source grades

Line movement tracking is yours to build: every bookmaker entry carries lastUpdatedAt, and finished events are retained.

Quick start: your first LOL odds API call

Getting LOL odds takes a single HTTP request:

https://api.sockodds.com/v2/events?apiKey=YOUR_API_KEY&oddsAvailable=true&leagueID=LOL&limit=10
curl -X GET "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10" -H "x-api-key: YOUR_API_KEY"
const response = await fetch("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10", { headers: { "x-api-key": "YOUR_API_KEY" } });
const { data, nextCursor, notice } = await response.json();
console.log(JSON.stringify(data, null, 2));
import requests

response = requests.get("https://api.sockodds.com/v2/events", params=dict(oddsAvailable="true", leagueID="LOL", limit="10"), headers={"x-api-key": "YOUR_API_KEY"})
output = response.json()
print(output["data"])
require 'net/http'
require 'json'

uri = URI("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10")
req = Net::HTTP::Get.new(uri)
req['x-api-key'] = 'YOUR_API_KEY'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.pretty_generate(JSON.parse(res.body)['data'])
<?php
$ch = curl_init("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-api-key: YOUR_API_KEY']);
$output = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($output['data']);
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10"))
    .header("x-api-key", "YOUR_API_KEY").GET().build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
req, _ := http.NewRequest("GET", "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))

This returns all available markets — lines, totals, head to head and props — for upcoming LOL events.

To narrow to a specific market, use the oddID parameter:

https://api.sockodds.com/v2/events?apiKey=YOUR_API_KEY&oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true
curl -X GET "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true" -H "x-api-key: YOUR_API_KEY"
const response = await fetch("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true", { headers: { "x-api-key": "YOUR_API_KEY" } });
const { data, nextCursor, notice } = await response.json();
console.log(JSON.stringify(data, null, 2));
import requests

response = requests.get("https://api.sockodds.com/v2/events", params=dict(oddsAvailable="true", leagueID="LOL", oddID="maps-all-game-ou-over", includeOpposingOdds="true"), headers={"x-api-key": "YOUR_API_KEY"})
output = response.json()
print(output["data"])
require 'net/http'
require 'json'

uri = URI("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true")
req = Net::HTTP::Get.new(uri)
req['x-api-key'] = 'YOUR_API_KEY'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.pretty_generate(JSON.parse(res.body)['data'])
<?php
$ch = curl_init("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-api-key: YOUR_API_KEY']);
$output = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($output['data']);
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true"))
    .header("x-api-key", "YOUR_API_KEY").GET().build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
req, _ := http.NewRequest("GET", "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))

OddIDs follow the format {statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID}, where the entity is a player for props and home, away or all for team and game markets.

Tips to keep responses fast:

  • Add bookmakerID=neds,tab to limit to the bookmakers you care about
  • Use includeOpposingOdds=true so you only need to specify one side of a market
  • Keep your oddID list tight — only request markets you're actively using

What a LOL response looks like

Every event returns an odds object keyed by oddID. Here's a real market from the feed with the bookmaker list cut to two books:

{
  "eventID": "lol_lcs_2026-09-25_flyquest_vs_shopify_rebellion",
  "leagueID": "LOL",
  "odds": {
    "maps-all-game-ou-over": {
      "oddID": "maps-all-game-ou-over",
      "opposingOddID": "maps-all-game-ou-under",
      "marketName": "Total Maps",
      "statID": "maps",
      "statEntityID": "all",
      "periodID": "game",
      "betTypeID": "ou",
      "sideID": "over",
      "fairOdds": null,
      "bookOdds": null,
      "byBookmaker": {
        "betright": {
          "odds": "-250",
          "decimal": 1.4,
          "available": true
        },
        "neds": {
          "odds": "+170",
          "decimal": 2.7,
          "available": true
        }
      }
    }
  }
}

Two things worth noting. Odds values are strings, not numbers, so -108 arrives as "-108" — that keeps the leading + intact on underdog prices — and every book also carries decimal, because Australian books quote decimal. bookOdds is the consensus with the vig left in; fairOdds is the de-vigged price on Rookie and above, null where it cannot be computed.

LOL Odds API Technical Specifications

API Architecture

  • REST API — Simple HTTP endpoints with JSON responses, identical to the SportsGameOdds v2 paths
  • Native WebSocket snapshots - Pro/Platform at /v2/stream/events; polling-backed, with unchanged upstream freshness
  • Rate limits — per-key, per-minute meters that bind under concurrency; plans sized to your usage
  • Authentication — secure API key access via the x-api-key header or apiKey query parameter

Data Update Speed

  • Odds updates — every ~2 minutes across every bookmaker lane
  • Event status — status flags and info.stale tell you exactly how current a price is

Developer Resources

LOL betting market coverage in the SockOdds API, by category

Market categoryExample marketsMarketsAvailabilityTypical bookmakers
Team & game specialsMaps O/U, Maps, Maps line6 oddIDsPre-matchNeds, TAB, Unibet, BetRight

See every LOL market with its exact oddID in the markets browser.

Use Cases

  • Arbitrage & +EV tools — compare LOL odds across every Australian bookmaker to uncover arbitrage opportunities and positive expected value angles.
  • Odds comparison platforms — display LOL odds from every book side by side for comprehensive line shopping.
  • Pricing models & trading — use LOL market data as inputs for proprietary pricing algorithms and betting strategies.
  • Sports analytics & research — examine LOL line movements and betting-market patterns, and build predictive models on retained events.
  • Betting automation — build systems that monitor LOL lines across bookmakers and trigger actions when your target odds appear.
  • Sportsbook & fantasy apps — power your LOL product with reliable odds, status and bet-slip deeplinks.

LOL Odds API Documentation

Our interactive documentation covers everything you need to integrate LOL odds into your project:

  • Full endpoint reference with parameters and response schemas
  • Live request and response examples
  • Code snippets in Python, JavaScript, Ruby, Go and Java
  • Authentication setup and API key management
  • Rate limiting and the notice field
  • Error handling and troubleshooting

View documentation

For more on querying /v2/events with LOL-specific examples, see the API documentation.

Frequently asked questions

What LOL betting markets does the API cover?

6 distinct markets right now: Maps and more — pre-match, across 4 bookmakers.

Does the API cover props, status and results in one feed?

Yes, from the same request. A single /v2/events call returns the game lines, the props, the event status and the results the source has, so there is no separate results API to reconcile. Each market carries scoringSupported and the event carries status.finalized.

How often is LOL odds data updated?

Every ~2 minutes across every bookmaker lane. Each bookmaker entry carries lastUpdatedAt.

Can I get historical LOL odds data?

Pro/Platform include recorded odds history and observed opening/closing main-line quotes with includeOpenCloseOdds=true and one eventID.

Is there a free trial?

Yes — a free Developer key covers AFL and NRL; Rookie unlocks every league including LOL. Get a key →

Which bookmakers are included?

4 bookmakers price LOL, 4 of them Australian: Neds, TAB, Unibet, BetRight.

Are live LOL odds available?

Event status is live; prices are pre-match first and refresh every ~2 minutes.

How are markets identified in the API?

Every market uses a structured oddID in the format {statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID} — for example maps-all-game-ou-over. The same pattern lets you construct, filter and parse markets programmatically.

Can I compare bookmaker odds?

Yes — every market returns prices from every supporting bookmaker under one oddID, so lining up the best available price across Neds, TAB, Unibet, BetRight and the rest is straightforward.

Start building today

Free plan available. Set up in 5 minutes. Scale when you're ready.

Search across the SockOdds documentation and catalogue.