Back to Blog
TutorialMarch 4, 202514 min read

How to Use League of Legends Esports API: Complete Developer Guide 2025

Learn how to access LCS, LEC, LCK, and Worlds data with a LoL esports API. Step-by-step tutorial with code examples for player stats, live matches, and tournament brackets.

Share:

Introduction: Why Use a League of Legends Esports API?

League of Legends is the biggest esport in the world. The LCS, LEC, LCK, and LPL draw millions of viewers every week, and Worlds regularly breaks viewership records. If you're building a stats tracker, Discord bot, fantasy esports app, or content site, you need programmatic access to LoL esports data.

In this guide, you'll learn how to:

  • Set up API access and make your first request
  • Fetch player statistics, team rosters, and match data
  • Track live LCS, LEC, and LCK matches in real-time
  • Access Worlds tournament brackets and standings
  • Build a working stats tracker with code examples

By the end, you'll have everything you need to integrate League of Legends esports data into your application.

Try It Now (No Signup Required)

Test the API instantly with our demo key:

curl -H "Authorization: Bearer pk_demo_cito_live_a06c129e0a9ce1c39c3035bd187541c4" \

https://api.citoapi.com/api/v1/lol/leagues

Demo key limits: 50 calls/day, read-only. Get your free production key for 500 calls/month.

What LoL Esports Data Is Available?

The Cito API provides 102 endpoints for League of Legends esports. Here's what you can access:

Leagues & Standings

  • All leagues: LCS, LEC, LCK, LPL, CBLOL, PCS, and more
  • Standings: Current rankings with win/loss records
  • Schedules: Upcoming matches for any league
  • History: Past seasons and results

Teams & Rosters

  • All teams: Every professional LoL team
  • Current rosters: Active players with roles
  • Roster history: Past lineups and transfers
  • Team stats: Win rates, average game time, champion pools
  • Head-to-head: Direct matchup records between teams

Players & Stats

  • Player profiles: Bio, team, role, nationality
  • Career stats: KDA, CS/min, vision score, damage per minute
  • Champion pool: Most-played champions with win rates
  • Earnings: Prize money won across tournaments
  • Player comparison: Side-by-side stat comparisons

Matches & Live Data

  • Live matches: Currently playing games with real-time stats
  • Match details: Full game breakdowns with timelines
  • Game stats: Gold graphs, objective control, build paths
  • VOD links: Post-match replay access

Tournaments

  • Worlds: Brackets, standings, match history
  • MSI: International tournament data
  • Regional playoffs: LCS/LEC/LCK championship brackets

Champions & Meta

  • Pro pick rates: Champion priority across leagues
  • Meta tier list: Current professional meta
  • Patch impact: How patches affect champion priorities

Getting Started: Your First API Call

Step 1: Get Your API Key

Sign up at citoapi.com — it takes 60 seconds. No sales calls, no enterprise contracts.

Step 2: Set Up Your Project

mkdir lol-esports-tracker

cd lol-esports-tracker

npm init -y

npm install axios dotenv

Create a .env file:

CITO_API_KEY=your_api_key_here

Step 3: Create Your API Client

// api.js

const axios = require('axios');

require('dotenv').config();

const lolAPI = axios.create({

baseURL: 'https://api.citoapi.com/api/v1/lol',

headers: {

'Authorization': Bearer ${process.env.CITO_API_KEY}

}

});

module.exports = lolAPI;

Fetching League Standings

The most common starting point — get current standings for any league:

const api = require('./api');

async function getStandings(leagueId) {

const { data } = await api.get(/leagues/${leagueId}/standings);

return data;

}

// Get LCS standings

async function main() {

const standings = await getStandings('lcs');

console.log('LCS Standings:\n');

standings.data.forEach((team, i) => {

console.log(${(i + 1).toString().padStart(2)}. ${team.name.padEnd(20)} ${team.wins}W - ${team.losses}L);

});

}

main();

Example Output

LCS Standings:

1. Cloud9 14W - 4L

2. Team Liquid 13W - 5L

3. FlyQuest 12W - 6L

...

Getting Player Stats

Look up any pro player's statistics:

async function getPlayerStats(playerId) {

const { data } = await api.get(/players/${playerId}/stats);

return data;

}

async function showPlayerCard(playerId) {

const stats = await getPlayerStats(playerId);

const player = stats.data;

console.log(${player.name} (${player.team}));

console.log(Role: ${player.role});

console.log(KDA: ${player.kda});

console.log(CS/min: ${player.csPerMin});

console.log(DPM: ${player.damagePerMin});

console.log(Vision: ${player.visionScore});

console.log(Win Rate: ${player.winRate}%);

}

showPlayerCard('faker');

Tracking Live Matches

Get real-time data during LCS, LEC, and LCK broadcasts:

async function getLiveMatches() {

const { data } = await api.get('/live');

return data;

}

async function showLive() {

const live = await getLiveMatches();

if (live.data.length === 0) {

console.log('No live matches right now.');

return;

}

live.data.forEach(match => {

console.log([${match.league}] ${match.team1.name} vs ${match.team2.name});

console.log( Score: ${match.team1.score} - ${match.team2.score});

console.log( Game ${match.currentGame} | ${match.status});

});

}

// Poll every 30 seconds during broadcast

setInterval(showLive, 30000);

Building a Complete Stats Tracker

Let's combine everything into a practical class:

class LoLTracker {

constructor(api) {

this.api = api;

}

async getTeamProfile(slug) {

const [team, roster, stats] = await Promise.all([

this.api.get(/teams/${slug}),

this.api.get(/teams/${slug}/roster),

this.api.get(/teams/${slug}/stats)

]);

return {

info: team.data,

roster: roster.data,

stats: stats.data

};

}

async compareTeams(slug1, slug2) {

const [t1, t2, h2h] = await Promise.all([

this.getTeamProfile(slug1),

this.getTeamProfile(slug2),

this.api.get(/teams/${slug1}/h2h/${slug2})

]);

return { team1: t1, team2: t2, headToHead: h2h.data };

}

async getLeagueOverview(leagueId) {

const [standings, schedule, teams] = await Promise.all([

this.api.get(/leagues/${leagueId}/standings),

this.api.get(/leagues/${leagueId}/schedule),

this.api.get(/leagues/${leagueId}/teams)

]);

return {

standings: standings.data,

upcomingMatches: schedule.data,

teams: teams.data

};

}

async getTournamentBracket(tournamentId) {

const { data } = await this.api.get(/tournaments/${tournamentId}/bracket);

return data;

}

}

// Usage

const tracker = new LoLTracker(api);

const lcs = await tracker.getLeagueOverview('lcs');

console.log(JSON.stringify(lcs, null, 2));

Accessing Worlds & MSI Data

International tournaments are a huge draw. Access brackets, standings, and match data:

// Get Worlds bracket

const bracket = await api.get('/tournaments/worlds-2025/bracket');

console.log('Worlds 2025 Bracket:', bracket.data);

// Get tournament stats and MVP

const stats = await api.get('/tournaments/worlds-2025/stats');

const mvp = await api.get('/tournaments/worlds-2025/mvp');

console.log('Tournament MVP:', mvp.data);

// Historical Worlds data

const history = await api.get('/history/worlds');

history.data.forEach(year => {

console.log(${year.year}: ${year.winner} defeated ${year.runnerUp});

});

Champion Meta & Analytics

Track which champions are dominating professional play:

// Current meta tier list

const meta = await api.get('/champions/meta');

meta.data.forEach(champ => {

console.log(${champ.name}: ${champ.pickRate}% pick, ${champ.banRate}% ban, ${champ.winRate}% WR);

});

// How did the latest patch change the meta?

const patchImpact = await api.get('/champions/patches/14.10');

console.log('Biggest winners:', patchImpact.data.winners);

console.log('Biggest losers:', patchImpact.data.losers);

Caching Best Practices

LoL esports data has different freshness requirements:

Data TypeRecommended TTL
League standings5 minutes
Player career stats15 minutes
Team rosters1 hour
Live match dataNo cache (real-time)
Tournament brackets2 minutes during events
Champion meta1 hour
Historical data24 hours

Pricing

PlanPriceRequests/MonthBest For
Free$0500Learning & testing
Basic$2050,000Side projects & Discord bots
Pro$50250,000Production apps
Business$2002,000,000High-traffic platforms
View full pricing

Get Started Today

  • Sign up for free — 500 API calls/month, no credit card
  • Copy your API key from the dashboard
  • Explore all 102 LoL endpoints in the dashboard sandbox
  • Read the LoL API docs for detailed endpoint reference
  • Build something awesome for the LoL community
  • Conclusion

    League of Legends has the richest esports ecosystem in the world, and now you can access all of it programmatically. Whether you're building a stats site, a Discord bot for your viewing party, or a full fantasy esports platform, the Cito API gives you 102 endpoints covering every aspect of professional LoL.

    No Riot API key application process. No enterprise sales calls. No $2,000/month minimums. Just sign up, get your key, and start building.

    Get your free API key now and start building with LoL esports data today.

    ---

    Related reading:

    Ready to Build?

    Get your API key and start building with esports data in minutes.