Docs/Fortnite API

Fortnite API Reference

Competitive Fortnite, org rosters, player earnings, Creative map metrics, shop, cosmetics, and news.

Use these endpoints for tournament trackers, org sites, Discord bots, Creative discovery tools, and player profile pages.

Quickstart

Base URL

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

Authentication

Send your key in the x-api-key header.

Response Shape

Most endpoints return success, data, and optional metadata.

curl "https://api.citoapi.com/api/v1/fortnite/matches/live?includeLeaderboard=true" \
  -H "x-api-key: YOUR_API_KEY"

Trust Contract

Competitive endpoints expose identifier type, entity type, availability, freshness, and confidence fields so your product can decide what is safe to publish before making follow-up calls.

Identifiers

Tournament rows identify the Cito ID separately from Epic event IDs and source URLs. Player rows return slug, display name, Epic account ID, and Cito player ID when known.

Subresources

Tournament list and detail rows include available_subresources and unavailable_subresources so clients can avoid blind drill-down requests.

Missing data

Empty drill-down responses include data_available and reason values such as not_yet_indexed, tournament_upcoming, source_unavailable, or identifier_not_found.

Example tournament list responseShow
{
  "success": true,
  "count": 1,
  "data": [
    {
      "id": "fncs-2024-grand-finals",
      "tournamentId": "fncs-2024-grand-finals",
      "entity_type": "tournament",
      "identifier_type": "cito_tournament_id",
      "identifiers": {
        "cito_tournament_id": "fncs-2024-grand-finals",
        "epic_event_id": "epicgames_S29_FNCS_GrandFinals",
        "slug": "fncs-2024-grand-finals",
        "source_url": "https://fortnite-esports.fandom.com/wiki/..."
      },
      "name": "FNCS Grand Finals 2024",
      "status": "completed",
      "available_subresources": ["participants", "placements", "results", "earnings", "regions", "prizeBreakdown"],
      "unavailable_subresources": ["matches", "windows", "scoring"],
      "data_quality": "complete",
      "confidence_score": 0.92,
      "last_verified": "2024-11-15T10:00:00.000Z"
    }
  ]
}
Example missing-results responseShow
{
  "success": true,
  "count": 0,
  "data": [],
  "data_available": false,
  "reason": "not_yet_indexed",
  "missing_fields": ["results"],
  "message": "No result rows are indexed for this tournament yet.",
  "entity_type": "tournament"
}

Coverage Notes

Live events

Live leaderboard data depends on active Epic event windows and the regions Epic publishes for that event.

Team resolution

When teamAccountIds are present, Cito resolves teamMembers so duo/trio views can show individual names.

Historical data

Tournament, org, player, and transfer history is normalized from indexed competitive sources and may include dataQuality warnings.

Creative metrics

Creative rows include thumbnails, official fortnite.com links, map history, and estimated creator earnings when source metrics are available.

Analytics gaps

Career trajectory, head-to-head records, chapter/season filters, historical regional rankings, and tournament prestige weighting are planned analytics layers. Current endpoints return the raw rows needed to compute them.

Data quality dashboard

Account-level freshness and completeness dashboards are planned so teams can inspect endpoint health before deploys instead of relying only on response metadata.

Endpoints

Search by path, feature, parameter, or data type.

Competitive

Events, live windows, leaderboards, tournament results, and player/org history.

GET/api/v1/fortnite

Discover supported Fortnite endpoints and current limitations.

Freshness: Live capability metadata

GET/api/v1/fortnite/matches/live

Active competitive events with optional leaderboard rows and resolved duo/trio members.

Params: includeLeaderboard

Freshness: Live event windows

GET/api/v1/fortnite/tournaments/live

Live tournament windows and leaderboard summaries.

Params: includeLeaderboard, limit

GET/api/v1/fortnite/tournaments/live/{eventId}/{windowId}

One live event-window leaderboard with teamAccountIds and teamMembers where available.

Params: eventId, windowId, region, page

GET/api/v1/fortnite/tournaments

Historical, upcoming, and completed Fortnite tournaments.

Params: region, year, status, limit, offset

GET/api/v1/fortnite/tournaments/{id}

Tournament detail with entity type, identifiers, confidence, and available subresources.

Params: id

GET/api/v1/fortnite/tournaments/{id}/participants

Participant rows derived from indexed results, with explicit missing-data reasons.

Params: id, limit, offset

GET/api/v1/fortnite/tournaments/{id}/placements

Placement rows. Alias for results with production-friendly naming.

Params: id, limit, offset

GET/api/v1/fortnite/tournaments/{id}/matches

Match/session rows for a tournament where indexed.

Params: id, limit, offset

GET/api/v1/fortnite/tournaments/{id}/results

Placement and result rows for a tournament where indexed.

Params: id, limit, offset

GET/api/v1/fortnite/tournaments/{id}/earnings

Tournament payout rows with normalized USD values, raw value, source, and confidence.

Params: id, limit, offset

GET/api/v1/fortnite/tournaments/player/{identifier}/history

Tournament history for a player by slug, name, or account identifier.

Params: identifier, limit, offset

GET/api/v1/fortnite/tournaments/org/{slug}/history

Tournament history for a Fortnite esports organization.

Params: slug, limit, offset

Players And Orgs

Profiles, rosters, former members, transfers, prize totals, and earnings history.

GET/api/v1/fortnite/players

List indexed competitive Fortnite players.

Params: search, country, org, limit, offset

GET/api/v1/fortnite/players/top-earners

Highest-earning tracked Fortnite pros with org and country context.

Params: limit, offset, country

GET/api/v1/fortnite/players/{identifier}

Player profile with current org, earnings, and tournament history.

Params: identifier

GET/api/v1/fortnite/players/{identifier}/transfers

Roster movement for a player where transfer history is known.

Params: identifier

GET/api/v1/fortnite/orgs

List Fortnite esports organizations.

Params: search, limit, offset

GET/api/v1/fortnite/orgs/{slug}/roster

Current pro/content roster with optional former members.

Params: slug, includeFormer

GET/api/v1/fortnite/orgs/{slug}/former

Former roster members for an organization.

Params: slug, limit, offset

GET/api/v1/fortnite/orgs/{slug}/earnings

Organization prize total summary.

Params: slug

GET/api/v1/fortnite/orgs/{slug}/earnings/history

Organization earnings history over time.

Params: slug, limit, offset

GET/api/v1/fortnite/transfers

Recent Fortnite roster changes.

Params: org, player, limit, offset

Creative

Island discovery, map metadata, thumbnails, official Fortnite links, metrics, and creator rollups.

GET/api/v1/fortnite/creative/maps

Search indexed Creative islands with media fields.

Params: search, tag, creator, limit, offset

GET/api/v1/fortnite/creative/maps/trending

Trending Creative maps with current metrics, thumbnails, creator metadata, and fortnite.com links.

Params: limit

GET/api/v1/fortnite/creative/maps/{code}

One Creative island by code with latest metrics and media.

Params: code

GET/api/v1/fortnite/creative/maps/{code}/history

Historical metric snapshots for a Creative island.

Params: code, limit

GET/api/v1/fortnite/creative/maps/{code}/discovery

Stored Discovery row/category observations for an island.

Params: code, limit

GET/api/v1/fortnite/creative/sponsored

Islands observed in sponsored or promoted Discovery placements.

Params: limit, offset

GET/api/v1/fortnite/creative/creators/{creator}/metrics

Creator-level Creative metrics and estimated earnings where available.

Params: creator

Game Content

Shop, cosmetics, news, server status, map, and creator-code lookups.

GET/api/v1/fortnite/shop

Current Fortnite item shop rows.

Freshness: Current shop when upstream source is available

GET/api/v1/fortnite/cosmetics

Search cosmetics by type, rarity, name, or introduction season.

Params: search, type, rarity, limit, offset

GET/api/v1/fortnite/cosmetics/new

Recently added cosmetics.

Params: limit

GET/api/v1/fortnite/cosmetics/{id}

One cosmetic by ID.

Params: id

GET/api/v1/fortnite/news

Battle Royale, Save the World, or Creative news.

Params: mode

GET/api/v1/fortnite/map

Current map image and metadata when available.

GET/api/v1/fortnite/status

Fortnite server status.

GET/api/v1/fortnite/creator-code/{code}

Creator-code lookup where upstream source returns a match.

Params: code

Common Parameters

NameTypeRequiredDescription
includeLeaderboardbooleanNoSet false to list live events without leaderboard rows.
regionstringNoFilter event windows or historical rows by region where supported.
limitintegerNoMaximum rows returned for list endpoints.
offsetintegerNoPagination offset for list endpoints.
yearintegerNoFilter historical tournaments by year where supported.

Live Competitive Events

Match routes are aliases for tournament/event data. Use teamMembers for duo/trio UI instead of parsing displayName.

curl "https://api.citoapi.com/api/v1/fortnite/matches/live?includeLeaderboard=true" \
  -H "x-api-key: YOUR_API_KEY"
Example live event responseShow
{
  "success": true,
  "count": 1,
  "data": [
    {
      "eventId": "epicgames_S37_FNCS",
      "eventWindowId": "epicgames_S37_FNCS_Event1",
      "name": "FNCS Major",
      "regions": ["NAE", "EU"],
      "startTime": "2026-04-29T18:00:00.000Z",
      "endTime": "2026-04-29T21:00:00.000Z",
      "isLive": true,
      "leaderboardCount": 100,
      "leaderboard": [
        {
          "rank": 1,
          "displayName": "PlayerOne / PlayerTwo",
          "accountId": "primary-account-id",
          "teamAccountIds": ["account-id-1", "account-id-2"],
          "teamMembers": [
            { "accountId": "account-id-1", "displayName": "PlayerOne" },
            { "accountId": "account-id-2", "displayName": "PlayerTwo" }
          ],
          "score": 532,
          "kills": 141,
          "matchesPlayed": 10
        }
      ]
    }
  ]
}

Tournament Results And Earnings

Read available_subresources from the tournament object before requesting results, placements, participants, matches, or earnings. Earnings rows include normalized USD values plus raw/source/confidence fields.

curl "https://api.citoapi.com/api/v1/fortnite/tournaments/fncs-2024-grand-finals/earnings" \
  -H "x-api-key: YOUR_API_KEY"
Example earnings responseShow
{
  "success": true,
  "data_available": true,
  "count": 1,
  "data": [
    {
      "playerId": "bugha-us-001",
      "accountId": "4735ce9132924caf8a5b17789b40f79c",
      "displayName": "Bugha",
      "placement": 1,
      "earnings": 3400000,
      "earnings_usd": 3400000,
      "earnings_raw": "3400000",
      "earnings_currency": "USD",
      "earnings_source": "https://fortnite-esports.fandom.com/wiki/...",
      "earnings_confidence": "high",
      "earnings_last_verified": "2024-11-01T00:00:00.000Z",
      "earnings_note": null
    }
  ]
}

Organization Rosters

Roster responses separate active pro players, content creators, and former members. Use this for org pages and transfer context.

curl "https://api.citoapi.com/api/v1/fortnite/orgs/xset/roster?includeFormer=true" \
  -H "x-api-key: YOUR_API_KEY"
Example roster responseShow
{
  "success": true,
  "data": {
    "slug": "xset",
    "name": "XSET",
    "currentRoster": {
      "total": 8,
      "proPlayers": [
        { "name": "Clix", "role": "Player", "isActive": true },
        { "name": "MrSavage", "role": "Player", "isActive": true }
      ],
      "contentCreators": [
        { "name": "Moxie", "role": "Content Creator", "isActive": true }
      ]
    },
    "formerRoster": {
      "total": 19,
      "members": [
        { "name": "Av", "role": "Former Player", "isActive": false }
      ]
    },
    "dataQuality": {
      "normalized": true,
      "warnings": []
    }
  }
}

Players And Earnings

Player detail endpoints accept Cito player IDs, Epic account IDs, exact display names, and known aliases. Use verified_competitive plus identity_confidence to decide which profiles are safe for a public directory.

Identifier examplesShow
// These all resolve to the same player when the values exist in Cito:
GET /api/v1/fortnite/players/bugha
GET /api/v1/fortnite/players/FaZe%20Bugha
GET /api/v1/fortnite/players/4735ce9132924caf8a5b17789b40f79c

// Response objects include all known identifier formats:
{
  "identifiers": {
    "player_id": "bugha-us-001",
    "slug": "bugha",
    "display_name": "Bugha",
    "epic_account_id": "4735ce9132924caf8a5b17789b40f79c",
    "wiki_url": "https://fortnite-esports.fandom.com/wiki/Bugha"
  }
}
curl "https://api.citoapi.com/api/v1/fortnite/players/bugha" \
  -H "x-api-key: YOUR_API_KEY"
Example player responseShow
{
  "success": true,
  "data": {
    "player_id": "bugha-us-001",
    "entity_type": "player",
    "identifiers": {
      "player_id": "bugha-us-001",
      "slug": "bugha",
      "display_name": "Bugha",
      "epic_account_id": "4735ce9132924caf8a5b17789b40f79c",
      "wiki_url": "https://fortnite-esports.fandom.com/wiki/Bugha"
    },
    "display_name": "Bugha",
    "verified_competitive": true,
    "identity_confidence": "high",
    "duplicate_of": null,
    "active_since": "2019-01-01",
    "last_active_tournament": "2024-10-15",
    "profile_completeness": 0.94,
    "country": "United States",
    "currentTeam": "Dignitas",
    "earnings": {
      "total": 3402100,
      "earnings_usd": 3402100,
      "earnings_raw": "3402100",
      "earnings_currency": "USD",
      "earnings_source": "https://fortnite-esports.fandom.com/wiki/Bugha",
      "earnings_confidence": "high",
      "earnings_last_verified": "2024-11-01T00:00:00.000Z",
      "earnings_note": null
    }
  }
}

Creative Map Metrics

Creative endpoints are built for discovery pages, creator dashboards, map history charts, and island detail pages.

curl "https://api.citoapi.com/api/v1/fortnite/creative/maps/trending?limit=10" \
  -H "x-api-key: YOUR_API_KEY"
Example Creative responseShow
{
  "success": true,
  "data": [
    {
      "code": "8179-7540-8163",
      "title": "2v3 Clutch Realistics",
      "creatorName": "wzf",
      "thumbnailUrl": "https://api.citoapi.com/api/v1/public/images/fortnite/...",
      "imageUrl": "https://api.citoapi.com/api/v1/public/images/fortnite/...",
      "imageUrls": ["https://api.citoapi.com/api/v1/public/images/fortnite/..."],
      "fortniteUrl": "https://www.fortnite.com/@wzf/8179-7540-8163",
      "latestMetrics": {
        "plays": 366,
        "peakCcu": 56,
        "minutesPlayed": 6001,
        "averageMinutes": 18.52,
        "estimates": {
          "creatorEarningsUsdLow": 0.5,
          "creatorEarningsUsdHigh": 3
        }
      }
    }
  ]
}

Errors And Empty States

Cito distinguishes transport errors from indexed-empty states. A request can return success: true with data_available: false when the tournament exists but the requested subresource is not indexed yet.

Example error responsesShow
// Invalid or missing API key
{
  "success": false,
  "error": "Invalid API key",
  "code": "UNAUTHORIZED"
}

// Rate limit
{
  "success": false,
  "error": "Rate limit exceeded",
  "code": "RATE_LIMITED",
  "retry_after_seconds": 60
}

// Wrong tournament identifier or polluted entity
{
  "success": false,
  "error": "This identifier is not a verified tournament entity.",
  "entity_type": "unknown",
  "missing_fields": ["tournament"],
  "dataQualityWarnings": [
    "The stored row was marked as non-tournament pollution from a player-results import."
  ]
}

Code Examples

Node.js

const response = await fetch(
  "https://api.citoapi.com/api/v1/fortnite/orgs/xset/roster?includeFormer=true",
  { headers: { "x-api-key": process.env.CITO_API_KEY } }
);

const { data } = await response.json();
console.log(data.currentRoster.proPlayers.map((player) => player.name));

Python

import os
import requests

response = requests.get(
    "https://api.citoapi.com/api/v1/fortnite/players/top-earners",
    params={"limit": 10},
    headers={"x-api-key": os.environ["CITO_API_KEY"]},
    timeout=15,
)

response.raise_for_status()
for player in response.json()["data"]:
    print(player["name"], player.get("totalEarnings"))

React Roster Render

export function FortniteRoster({ roster }) {
  return (
    <ul>
      {roster.currentRoster.proPlayers.map((player) => (
        <li key={player.name}>
          {player.name}
          {player.country ? <span> - {player.country}</span> : null}
        </li>
      ))}
    </ul>
  );
}

Next

Call of Duty API

Continue