Patch 6.2.0 is live — Clean up of duplicated endpoints & improvement of Typescript SDK.
api-fortnite
← Back to Blog

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.

leaderboardcompetitiveguide

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
});

Related Guides


  • How to Track Fortnite Player Stats in Real-Time
  • Getting Started with the Fortnite API