Fortnite Leaderboard API - Global Rankings by Stat
Access Fortnite global leaderboards via API. Rank players by any stat key — total kills, wins, matches — with time window and pagination support.
Fortnite Leaderboards
The Fortnite API exposes a global leaderboard endpoint that ranks players by any stat key. You can build ranking tables, season ladders, or competitive dashboards on top of this data.
Base URL: https://prod.api-fortnite.com
Auth: x-api-key: YOUR_API_KEY
Leaderboard Endpoint
GET /api/v2/stats/leaderboard/{stat}Where {stat} is the stat key to rank by (e.g. br_kills_total, br_wins_total).
Query Parameters
| Parameter | Description |
|-----------|-------------|
| limit | Maximum entries to return |
| offset | Pagination offset |
| window | Time window: season or alltime |
Example: Top Players by Total Kills
curl -H "x-api-key: YOUR_API_KEY" \
"https://prod.api-fortnite.com/api/v2/stats/leaderboard/br_kills_total?limit=10&window=season"const res = await fetch(
"https://prod.api-fortnite.com/api/v2/stats/leaderboard/br_kills_total?limit=10&window=season",
{ headers: { "x-api-key": process.env.FORTNITE_API_KEY } }
);
const leaderboard = await res.json();Example: Top Players by Wins (All Time)
const res = await fetch(
"https://prod.api-fortnite.com/api/v2/stats/leaderboard/br_wins_total?limit=25&window=alltime",
{ headers: { "x-api-key": process.env.FORTNITE_API_KEY } }
);
const leaderboard = await res.json();Building a Leaderboard UI
Show Rank Changes
Cache the previous leaderboard response and compare positions to show ▲/▼ movement:
function getRankChange(accountId, currentRanked, previousRanked) {
const prevIndex = previousRanked.findIndex((p) => p.accountId === accountId);
const currIndex = currentRanked.findIndex((p) => p.accountId === accountId);
if (prevIndex === -1) return "new";
return prevIndex - currIndex; // positive = moved up
}Paginate
async function getLeaderboardPage(stat, page, pageSize = 25) {
const offset = (page - 1) * pageSize;
const res = await fetch(
`https://prod.api-fortnite.com/api/v2/stats/leaderboard/${stat}?limit=${pageSize}&offset=${offset}`,
{ headers: { "x-api-key": process.env.FORTNITE_API_KEY } }
);
return res.json();
}Live Leaderboard Widget
For streaming overlays or tournament dashboards, poll on an interval:
async function startLiveLeaderboard(stat, intervalMs = 120_000) {
async function refresh() {
const res = await fetch(`/api/leaderboard?stat=${stat}&limit=10`);
const data = await res.json();
renderLeaderboard(data);
}
await refresh();
setInterval(refresh, intervalMs);
}Caching Strategy
Leaderboards don't need to update every second. A 30-minute cache is appropriate for most use cases:
// Next.js
const res = await fetch(url, {
headers: { "x-api-key": process.env.FORTNITE_API_KEY! },
next: { revalidate: 1800 }, // 30 minutes
});