# LOL Odds API | LOL Odds, Player Props & Results
URL: https://sockodds.com/leagues/lol-odds-api/

> Our LOL odds API delivers LOL odds, player props and results for every event from 4 bookmakers, 4 Australian. Free tier available.

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](https://sockodds.com/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:

**Browser URL** · **cURL** · **JavaScript** · **Python** · **Ruby** · **PHP** · **Java** · **Go**

```text
https://api.sockodds.com/v2/events?apiKey=YOUR_API_KEY&oddsAvailable=true&leagueID=LOL&limit=10
```

```bash
curl -X GET "https://api.sockodds.com/v2/events?oddsAvailable=true&leagueID=LOL&limit=10" -H "x-api-key: YOUR_API_KEY"
```

```javascript
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));
```

```python
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"])
```

```ruby
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
<?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']);
```

```java
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());
```

```go
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:

**Browser URL** · **cURL** · **JavaScript** · **Python** · **Ruby** · **PHP** · **Java** · **Go**

```text
https://api.sockodds.com/v2/events?apiKey=YOUR_API_KEY&oddsAvailable=true&leagueID=LOL&oddID=maps-all-game-ou-over&includeOpposingOdds=true
```

```bash
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"
```

```javascript
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));
```

```python
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"])
```

```ruby
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
<?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']);
```

```java
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());
```

```go
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:

```json
{
  "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

- [Interactive documentation](https://sockodds.com/docs/) — live examples, copy-paste snippets and an [AI (vibe coding)](https://sockodds.com/docs/info/ai-vibe-coding/) context
- [SDKs & libraries](https://sockodds.com/docs/sdk/) — the SportsGameOdds SDKs for TypeScript, Python, Ruby, Go and Java work unchanged with the base URL pointed here
- [Postman collection](https://sockodds.com/postman-collection/) — pre-built requests ready to run
- [Support](https://sockodds.com/docs/help/) — email support on every plan, priority on paid plans

### LOL betting market coverage in the SockOdds API, by category

| Market category | Example markets | Markets | Availability | Typical bookmakers |
| --- | --- | --- | --- | --- |
| **Team & game specials** | Maps O/U, Maps, Maps line | 6 oddIDs | Pre-match | [Neds](https://sockodds.com/bookmakers/neds-odds-api/), [TAB](https://sockodds.com/bookmakers/tab-odds-api/), [Unibet](https://sockodds.com/bookmakers/unibet-odds-api/), [BetRight](https://sockodds.com/bookmakers/betright-odds-api/) |

**See every LOL market with its exact oddID** in the [markets browser](https://sockodds.com/docs/data-types/markets/?league=LOL).

## Use Cases

- [Arbitrage](https://sockodds.com/use-cases/arbitrage-betting-api/) & [+EV tools](https://sockodds.com/use-cases/positive-ev-betting-api/) — compare LOL odds across every Australian bookmaker to uncover arbitrage opportunities and positive expected value angles.
- [Odds comparison platforms](https://sockodds.com/use-cases/odds-comparison-api/) — 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](https://sockodds.com/use-cases/sports-betting-machine-learning/) — examine LOL line movements and betting-market patterns, and build predictive models on retained events.
- [Betting automation](https://sockodds.com/use-cases/odds-alert-bot-api/) — build systems that monitor LOL lines across bookmakers and trigger actions when your target odds appear.
- [Sportsbook & fantasy apps](https://sockodds.com/use-cases/sports-betting-app-api/) — 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](https://sockodds.com/docs/)

For more on querying `/v2/events` with LOL-specific examples, see the [API documentation](https://sockodds.com/docs/basics/).

## 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 →](https://sockodds.com/signup/)

### 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.
