{"openapi":"3.0.1","info":{"title":"API Fortnite","description":"Unofficial API for Fortnite","version":"v1","contact":{"name":"API Fortnite","url":"https://api-fortnite.com/contact"}},"paths":{"/api/v1/account/{accountId}":{"get":{"tags":["Account"],"summary":"Get account information by Epic account ID.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/bulk":{"get":{"tags":["Account"],"summary":"Get multiple accounts by Epic account IDs in a single request.","parameters":[{"name":"accountId","in":"query","description":"One or more Epic account IDs (repeat the parameter for multiple).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/displayName/{displayName}":{"get":{"tags":["Account"],"summary":"Get account information by Epic display name.","parameters":[{"name":"displayName","in":"path","description":"Epic display name (case-sensitive).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/external/{externalAuthType}/displayName/{displayName}":{"get":{"tags":["Account"],"summary":"Get account by display name from an external auth provider (e.g. psn, xbl, nintendo).","parameters":[{"name":"externalAuthType","in":"path","description":"External auth type (e.g. psn, xbl, nintendo, github).","required":true,"schema":{"type":"string"}},{"name":"displayName","in":"path","description":"Display name on the external platform.","required":true,"schema":{"type":"string"}},{"name":"caseInsensitive","in":"query","description":"Set to \"true\" to perform a case-insensitive lookup.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/external/displayNames/bulk":{"post":{"tags":["Account"],"summary":"Bulk lookup accounts by external display names.","requestBody":{"content":{"application/json":{"schema":{}},"text/json":{"schema":{}},"application/*+json":{"schema":{}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/external/ids/bulk":{"post":{"tags":["Account"],"summary":"Bulk lookup accounts by external platform IDs.","requestBody":{"content":{"application/json":{"schema":{}},"text/json":{"schema":{}},"application/*+json":{"schema":{}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/{accountId}/externalAuths":{"get":{"tags":["Account"],"summary":"Get all external auth connections for an account.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/{accountId}/externalAuths/{authType}":{"get":{"tags":["Account"],"summary":"Get a specific external auth connection for an account.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}},{"name":"authType","in":"path","description":"External auth type (e.g. psn, xbl).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/displaynames":{"get":{"tags":["Account"],"summary":"Resolve one or more Epic account IDs to their display names.","parameters":[{"name":"ids","in":"query","description":"Comma-separated Epic account IDs.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/account/sdk":{"get":{"tags":["Account"],"summary":"Epic ID SDK v2 account lookup — returns extended account info via the Developer Portal API.\r\nAccepts one or more comma-separated Epic account IDs.","parameters":[{"name":"accountId","in":"query","description":"Comma-separated Epic account IDs.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/aes/history":{"get":{"tags":["Aes"],"summary":"Every build whose AES keys and mappings we hold.","description":"Keys are not returned here — this lists what is archived, not the material itself.\r\nEpic serves only the current build, so anything missing from this list cannot be\r\nrecovered from Epic later.","responses":{"200":{"description":"OK"}}}},"/api/v1/aes":{"get":{"tags":["Aes"],"summary":"Current AES main key and dynamic pak keys.","responses":{"200":{"description":"OK"},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/mappings":{"get":{"tags":["Aes"],"summary":"Current .usmap mappings download URLs.","responses":{"200":{"description":"OK"},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/assets/bundles/tournaments":{"get":{"tags":["Assets"],"summary":"Get tournament asset bundles (images, icons, rewards).","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/assets/bundles/shop":{"get":{"tags":["Assets"],"summary":"Get shop asset bundles.","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/battlepass":{"get":{"tags":["BattlePass"],"summary":"The current battle pass, or an archived one via `?season=`.","description":"Rewards are grouped into the pages the game itself uses, each entry carrying the item's\r\nreal display name, rarity and icon — read from the item's own definition, never derived\r\nfrom its id — plus its cost (`Included` means free with the pass).","parameters":[{"name":"season","in":"query","description":"Season number, e.g. 42. Omit for the current pass.","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/BattlePassCatalog"}},"application/json":{"schema":{"$ref":"#/components/schemas/BattlePassCatalog"}},"text/json":{"schema":{"$ref":"#/components/schemas/BattlePassCatalog"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/battlepass/seasons":{"get":{"tags":["BattlePass"],"summary":"Every season we hold a pass for, newest first.","description":"Epic ships one season-pass GameFeature plugin at a time and deletes the previous one, so\r\na season missing from this list cannot be recovered from a later build.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BattlePassSeasonDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BattlePassSeasonDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BattlePassSeasonDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/season":{"get":{"tags":["CalendarSeason"],"summary":"Get the current Fortnite season number and start/end dates.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SeasonEntryDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/SeasonEntryDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/SeasonEntryDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/cosmetics/all":{"get":{"tags":["Cosmetics"],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","format":"int32","default":25}},{"name":"type","in":"query","schema":{"type":"string"}},{"name":"rarity","in":"query","schema":{"type":"string"}},{"name":"set","in":"query","schema":{"type":"string"}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"season","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"chapter","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"lang","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}}}}}}},"/api/v2/cosmetics/search":{"get":{"tags":["Cosmetics"],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","format":"int32","default":25}},{"name":"type","in":"query","schema":{"type":"string"}},{"name":"rarity","in":"query","schema":{"type":"string"}},{"name":"set","in":"query","schema":{"type":"string"}},{"name":"lang","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/cosmetics/new":{"get":{"tags":["Cosmetics"],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","format":"int32","default":25}},{"name":"lang","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/CosmeticDtoPaginatedResultDto"}}}}}}},"/api/v2/cosmetics/{id}":{"get":{"tags":["Cosmetics"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/CosmeticDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/CosmeticDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/CosmeticDto"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/crew/current":{"get":{"tags":["Crew"],"summary":"Get the current Fortnite Crew pack.","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/crew/history":{"get":{"tags":["Crew"],"summary":"Get the history of past Fortnite Crew packs.","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/custom-match/initiate":{"post":{"tags":["CustomMatch"],"summary":"Queue a custom key push for a list of players.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/InitiateRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/InitiateRequest"}}}},"responses":{"202":{"description":"Accepted"},"503":{"description":"Service Unavailable"}}}},"/api/v1/custom-match/status/{playerId}":{"get":{"tags":["CustomMatch"],"summary":"Get the current or historical status of a player's key-push job.","parameters":[{"name":"playerId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/custom-match/bots":{"get":{"tags":["CustomMatch"],"summary":"Show the caller's own bot pool with live per-worker readiness — use this to check\r\ncapacity before launching a large multi-lobby scrim.","responses":{"200":{"description":"OK"}}}},"/api/v1/custom-match/accounts":{"post":{"tags":["CustomMatch"],"summary":"Register one of the caller's OWN Epic accounts into their dedicated bot pool. The account's\r\ndevice-auth is encrypted at rest. Lands as `provisioning` until a worker is attached.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAccountRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/RegisterAccountRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/RegisterAccountRequest"}}}},"responses":{"201":{"description":"Created"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/custom-match/accounts/{id}":{"delete":{"tags":["CustomMatch"],"summary":"Remove one of the caller's own registered accounts (ownership-enforced).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/events/{eventId}/windows/{eventWindowId}/leaderboard":{"get":{"tags":["EventsV2"],"summary":"Get the paginated leaderboard for a specific event window.\r\nUse leaderboardDef to resolve a cumulative or rank-tier leaderboard definition.","parameters":[{"name":"eventId","in":"path","description":"Event identifier (e.g. epicgames_S40_FNCS_Major1_EU).","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"path","description":"Event window identifier.","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number, zero-indexed (default: 0).","schema":{"type":"integer","format":"int32"}},{"name":"leaderboardDef","in":"query","description":"Optional leaderboard definition ID for cumulative or rank-tier views.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/EventLeaderboardDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/EventLeaderboardDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/EventLeaderboardDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/events/players/{accountId}/history":{"get":{"tags":["EventsV2"],"summary":"Get a player's event participation history.\r\nRequires x-fortnite-token — Epic's history endpoint does not accept service auth.\r\nObtain a token via GET /api/v1/oauth/get-token → POST /api/v1/oauth/complete.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID of the player.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/events/{eventId}/windows/{eventWindowId}/leaderboard/player":{"get":{"tags":["EventsV2"],"summary":"Find a player's rank and surrounding entries in an event window leaderboard.\r\nWorks for any placement including beyond top 10k. No x-fortnite-token required.","parameters":[{"name":"eventId","in":"path","description":"Event identifier.","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"path","description":"Event window identifier.","required":true,"schema":{"type":"string"}},{"name":"accountId","in":"query","description":"Epic account ID of the player to look up.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventLeaderboardEntryDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventLeaderboardEntryDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventLeaderboardEntryDto"}}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/events/{eventId}/windows/{eventWindowId}/players/{accountId}":{"get":{"tags":["EventsV2"],"summary":"Get a player's standing (rank, points, team and per-match tracked stats) in an\r\nevent window. Service token only, no x-fortnite-token needed.","description":"Results are keyed by **team**, not by account: `teamAccountIds` lists every member\r\nand the tracked stats in each match (including `TEAM_ELIMS_STAT_INDEX`) are team\r\ntotals. Passing any member of a duo/trio returns that whole team's standing.\r\n            \r\nPass `rankHint` when you already know roughly where the player placed — the\r\nlookup then reads a single leaderboard page instead of scanning.","parameters":[{"name":"eventId","in":"path","description":"Event identifier.","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"path","description":"Event window identifier.","required":true,"schema":{"type":"string"}},{"name":"accountId","in":"path","description":"Epic account ID of any member of the team.","required":true,"schema":{"type":"string"}},{"name":"rankHint","in":"query","description":"Optional approximate rank, to skip straight to that page.","schema":{"type":"integer","format":"int32"}},{"name":"maxPages","in":"query","description":"Max leaderboard pages to scan when rankHint is absent (default 15, max 100).","schema":{"type":"integer","format":"int32","default":15}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/PlayerWindowStandingDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/PlayerWindowStandingDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/PlayerWindowStandingDto"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/br-inventory/{accountId}":{"get":{"tags":["FortniteGame"],"summary":"Get the Battle Royale inventory for a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/keychain":{"get":{"tags":["FortniteGame"],"summary":"Get the current keychain (used for Save the World trading).","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/receipts/{accountId}":{"get":{"tags":["FortniteGame"],"summary":"Get purchase receipts for a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/enabled-features":{"get":{"tags":["FortniteGame"],"summary":"Get the list of enabled game features.","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/version/{platform}":{"get":{"tags":["FortniteGame"],"summary":"Get the current Fortnite version for a platform.","parameters":[{"name":"platform","in":"path","description":"Platform code (e.g. Windows, Android, iOS).","required":true,"schema":{"type":"string"}},{"name":"version","in":"query","description":"Optional version string to check against.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/privacy/{accountId}":{"get":{"tags":["FortniteGame"],"summary":"Get privacy settings for a player. Requires x-fortnite-token.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"post":{"tags":["FortniteGame"],"summary":"Update privacy settings for a player. Requires x-fortnite-token.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{}},"text/json":{"schema":{}},"application/*+json":{"schema":{}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/entitlement":{"get":{"tags":["FortniteGame"],"summary":"Get entitlements for the authenticated player. Requires x-fortnite-token.","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/fn/entitlement/{accountId}":{"post":{"tags":["FortniteGame"],"summary":"Request an entitlement grant for a player. Requires x-fortnite-token.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/summary":{"get":{"tags":["Friends"],"summary":"Get a summary of a player's friends, incoming/outgoing requests, and blocklist counts.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/friends":{"get":{"tags":["Friends"],"summary":"Get a player's full friends list.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/incoming":{"get":{"tags":["Friends"],"summary":"Get incoming friend requests for a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/outgoing":{"get":{"tags":["Friends"],"summary":"Get outgoing friend requests sent by a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/friends/{friendId}/mutual":{"get":{"tags":["Friends"],"summary":"Get mutual friends between two players.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID of the first player.","required":true,"schema":{"type":"string"}},{"name":"friendId","in":"path","description":"Epic account ID of the second player.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/blocklist":{"get":{"tags":["Friends"],"summary":"Get a player's blocklist.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/friends/{friendId}":{"get":{"tags":["Friends"],"summary":"Get details for a specific friend of a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID of the player.","required":true,"schema":{"type":"string"}},{"name":"friendId","in":"path","description":"Epic account ID of the friend.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/friends/{accountId}/suggested":{"get":{"tags":["Friends"],"summary":"Get suggested friends for a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/identity/link":{"post":{"tags":["Identity"],"summary":"Store a Discord→Epic link. The caller runs the /oauth flow first (so it holds a\r\nreal, API-minted epic_account_id) and reports the Discord user who authorised.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/LinkRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/LinkRequest"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/identity/{discordId}":{"get":{"tags":["Identity"],"summary":"Resolve a Discord user to their linked Epic account.","parameters":[{"name":"discordId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/map":{"get":{"tags":["Map"],"summary":"Get map data including POIs and minimap metadata for a given version.","parameters":[{"name":"version","in":"query","description":"Map version (patch number). Defaults to current version.","schema":{"type":"string"}},{"name":"mode","in":"query","description":"Which map to return: `br` (default), `og`, or `rotating:<codename>`\r\n(e.g. `rotating:blastberry`). `rotating` alone picks whichever rotating map that\r\nversion shipped. The available values are listed in the response's `modes` field.","schema":{"type":"string"}},{"name":"lang","in":"query","description":"Language code for POI labels. Only `en` is currently extracted, so any other supported\r\ncode returns English labels rather than failing.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/MapDataDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/MapDataDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/MapDataDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/map/image":{"get":{"tags":["Map"],"summary":"Redirects to the raw map image on GitHub for a given version.","parameters":[{"name":"version","in":"query","description":"Map version (patch number). Defaults to current version.","schema":{"type":"string"}},{"name":"mode","in":"query","description":"Which map image: `br` (default), `og`, or `rotating:<codename>`.","schema":{"type":"string"}}],"responses":{"302":{"description":"Found"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/map/history":{"get":{"tags":["Map"],"summary":"Get map history entries, optionally filtered by chapter and/or season.","parameters":[{"name":"chapter","in":"query","description":"Filter by chapter number.","schema":{"type":"integer","format":"int32"}},{"name":"season","in":"query","description":"Filter by season number.","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MapHistoryEntryDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MapHistoryEntryDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MapHistoryEntryDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/news":{"get":{"tags":["News"],"summary":"Get all in-game news across all modes.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/news/br":{"get":{"tags":["News"],"summary":"Get Battle Royale news.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/news/stw":{"get":{"tags":["News"],"summary":"Get Save the World news.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/news/creative":{"get":{"tags":["News"],"summary":"Get Creative mode news.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/oauth/get-token":{"get":{"tags":["OAuth"],"summary":"Initiate the device code OAuth flow.\r\nReturns a flowId and a user-facing URL where the user must authenticate.\r\nPoll POST /oauth/complete with the flowId to retrieve the token once the user has authorized.","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/oauth/complete":{"post":{"tags":["OAuth"],"summary":"Complete the device code OAuth flow by polling with the flowId returned from GET /oauth/get-token.\r\nReturns 202 with AUTHORIZATION_PENDING while the user has not yet authenticated.\r\nReturns 429 with RATE_LIMITED if polling too fast.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteOAuthRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/CompleteOAuthRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CompleteOAuthRequest"}}}},"responses":{"200":{"description":"OK"},"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/oauth/refresh-token":{"post":{"tags":["OAuth"],"summary":"Refresh an Epic access token using a refresh token.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/oauth/exchange-code":{"post":{"tags":["OAuth"],"summary":"Exchange an authorization code for an Epic access token.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeCodeRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/ExchangeCodeRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/ExchangeCodeRequest"}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/oauth/refresh-device":{"post":{"tags":["OAuth"],"summary":"Re-authenticate silently using stored device auth credentials (accountId + deviceId + secret).","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshDeviceRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/RefreshDeviceRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/RefreshDeviceRequest"}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/oauth/authorize-url":{"get":{"tags":["OAuth"],"summary":"Returns the Epic Games authorization URL to redirect the user to.\r\nThe user will see Epic's standard login page — no scary device confirmation page.\r\nAfter login, Epic redirects to your redirect_uri with ?code=...\r\nThen call POST /oauth/link with that code to get the Fortnite access token + device auth.","parameters":[{"name":"redirectUri","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Service Unavailable"}}}},"/api/v1/oauth/link":{"post":{"tags":["OAuth"],"summary":"Exchanges an Epic authorization code for a Fortnite access token and device auth credentials.\r\nUse the code returned by Epic after the user authorizes via the URL from GET /oauth/authorize-url.\r\nThe returned deviceAuth (accountId + deviceId + secret) can be stored and used with\r\nPOST /oauth/refresh-device to silently re-authenticate in the future — no browser required.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkAccountRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/LinkAccountRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/LinkAccountRequest"}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/health":{"get":{"tags":["Others"],"responses":{"200":{"description":"OK"}}}},"/health/version":{"get":{"tags":["Others"],"responses":{"200":{"description":"OK"}}}},"/api/v1/parsing":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and extract match statistics.\r\nSubject to per-plan parsing quota limits.","description":"Send the replay file as multipart/form-data with key \"file\".","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/stats":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return only basic match statistics.\r\nSignificantly faster than full parsing — skips movement, zones, and kill feed.\r\nReturns: name, replayId, version, stats (elims, damage, accuracy, placement, assists, damageTaken, damageStructures, matsFarm, matsUsed, totalPlayers).","description":"Send the replay file as multipart/form-data with key \"file\".","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/map":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return full map context.\r\nReturns: bus flight path + drop window, all storm circles with timing, supply drops, llamas, reboot vans.","description":"Send the replay file as multipart/form-data with key \"file\".","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/loot":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return ground loot data.\r\nReturns all items that were on the ground near the player: position, item ID, picked-up status and time.\r\nTimes are on the replay world clock — subtract referenceTime, NOT matchStartTime\r\n(a heuristic kept only for existing consumers). See docs/PARSE_FIELD_MAP.md.","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/timeline":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return a time-ordered match timeline.\r\nReturns all events relative to bus drop: kills, knocks, own death, damage dealt, damage taken, healed, pickups.\r\nRequires full parse mode — slower than /parsing/stats but richer than /parsing.","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/zones":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return storm zone data.\r\nReturns all safe zone phases with circle positions, timing, damage per tick, and phase count.","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/lobby":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return the full player lobby.\r\nReturns all players with placement, kills, death info, cosmetics, and team data.","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/parsing/broadcast":{"post":{"tags":["Parsing (File Upload)"],"summary":"Parse a single Fortnite .replay file and return the complete broadcast payload.\r\nCombines all data: header, stats, full player lobby, storm zones, map objects, ground loot, and timeline events.\r\nRequires full parse mode — equivalent to calling all endpoints in one request.","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}},"encoding":{"file":{"style":"form"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/playlists":{"get":{"tags":["Playlists"],"summary":"Get all playlists (game modes).","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/playlists/active":{"get":{"tags":["Playlists"],"summary":"Get currently active playlists.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/playlists/{playlistId}":{"get":{"tags":["Playlists"],"summary":"Get a specific playlist by its ID.","parameters":[{"name":"playlistId","in":"path","description":"Playlist identifier.","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/profile/progress":{"get":{"tags":["Profile"],"summary":"Get raw Habanero track progress for a single account. Public — no token required.","parameters":[{"name":"accountId","in":"query","description":"Epic account ID of the player.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/profile/level":{"get":{"tags":["Profile"],"summary":"Get a player's XP, level, accountLevel, and battle pass tier.\r\nParsed from QueryProfile (profileId=athena) — requires x-fortnite-token.","parameters":[{"name":"accountId","in":"query","description":"Epic account ID of the player.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/profile/ranked":{"get":{"tags":["Profile"],"summary":"Get a player's enriched ranked progress — human-readable rank names, game mode labels,\r\nseason dates, and isCurrent flag.\r\nAccepts either ?displayName= or ?accountId= (accountId skips the name lookup and is preferred).","parameters":[{"name":"displayName","in":"query","description":"Epic display name of the player (use accountId instead if available).","schema":{"type":"string"}},{"name":"accountId","in":"query","description":"Epic account ID of the player — preferred over displayName.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/profile/tracks":{"get":{"tags":["Profile"],"summary":"Get all available ranked game mode tracks — modes, division counts, and season dates.\r\nUseful for building mode selectors or understanding what tracks exist.","parameters":[{"name":"endsBefore","in":"query","description":"Optional ISO 8601 date — only return tracks ending before this date.","schema":{"type":"string"}},{"name":"endsAfter","in":"query","description":"Optional ISO 8601 date — only return tracks ending after this date.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/profile/trackprogress/bulk":{"post":{"tags":["Profile"],"summary":"Get ranked track progress for multiple account IDs in a single request (L3AGUE bulk endpoint).\r\nBody: array of Epic account IDs.","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/profile/leaderboard/{gameId}":{"post":{"tags":["Profile"],"summary":"Get a Habanero game leaderboard centered around an account (e.g. HazelnutSpread).\r\nThe gameId maps to the internal Habanero game identifier.","parameters":[{"name":"gameId","in":"path","description":"Habanero game identifier (e.g. HazelnutSpread).","required":true,"schema":{"type":"string"}},{"name":"accountId","in":"query","description":"Epic account ID to center the leaderboard around.","schema":{"type":"string"}},{"name":"fromIndex","in":"query","description":"Start index in the leaderboard (default: 0).","schema":{"type":"integer","format":"int32","default":0}},{"name":"findTeams","in":"query","description":"Whether to look up team scores (default: false).","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/quests/{accountId}":{"get":{"tags":["Quests"],"summary":"Get active quests and challenges for a player.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID of the player.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download a tournament .replay file by match ID.\r\nReturns the raw .replay binary (application/octet-stream).\r\nMatch IDs come from Epic's tournament events API.","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/metadata":{"get":{"tags":["Replays (by Match ID)"],"summary":"Get the raw chunk manifest (metadata) for a tournament replay.\r\nReturns Events, DataChunks, Checkpoints arrays with timing info.","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and fully parse a tournament replay by match ID — the whole file.\r\nReturns everything the sub-endpoints return, combined: per-player stats and\r\nweapon tables (lobby), storm zones, map objects (bus/drops/llamas/reboot vans),\r\nground loot, and the timeline with the full killfeed.\r\n            \r\nThe rows are identical to the sub-endpoints', but the envelope differs: everything is\r\nunder \"game\", and the loot array is \"game.loot\" (it is \"loot.pickups\" on /parse/loot).\r\nSubtract \"referenceTime\" from any absolute time. worldBounds and the map projection of\r\nthe storm (map.zones) are only on /parse/map. Full mapping: docs/PARSE_FIELD_MAP.md.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/stats":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — stats only.\r\nFaster than full parse. Returns name, replayId, version, playlist, teamSize, teamCount, isTournament, tournamentRound, stats.\r\nSubject to per-plan parsing quota limits (1 credit).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/map":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — map context.\r\nReturns bus path, storm circles, supply drops, llamas, reboot vans.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/loot":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — ground loot.\r\nServer replays give whole-map loot coverage (vs ~150m radius for client replays).\r\nReturns all item spawns: position, item ID, picked-up status and time.\r\nCoordinates are map units derived from Unreal world cm: x = ueX/18.2 − 550,\r\ny = −ueY/18.2, z = ueZ/18.2 (invert to get Unreal coords). All times (spawnTime,\r\npickedUpTime) are on the replay world clock, which starts during the warmup lobby —\r\nsubtract <b>referenceTime</b> for match-relative times. Do NOT subtract matchStartTime:\r\nit is a skydive-gap heuristic that can land minutes into the match and push most\r\npickups negative; it is kept only for existing consumers. Warmup-island loot appears\r\nfar outside the main map bounds. spawnTime for pre-placed floor loot is when the actor\r\nfirst replicated, not when a player could see it.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/lobby":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — full player lobby.\r\nReturns all players with kills, placement, damage, reboots, headshots, teamKills, death info, and cosmetics.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/zones":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — storm zones.\r\nReturns all safe zone phases with timing, positions, and damage per tick.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/timeline":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — match timeline.\r\nReturns chronological event feed: kills, knocks, death, damage dealt/taken, heals, pickups.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/tracks":{"get":{"tags":["Replays (by Match ID)"],"summary":"Download and parse a tournament replay — per-player tracks for interactive map playback.\r\nFor every player: downsampled movement samples [t, x, y, z, stateFlags], health/shield\r\ncurve, held-weapon changes, item pickups, material deltas, damage dealt and life events\r\n(knock/death/revive/reboot) — plus storm circle phases and the kill feed.\r\nThis is the ONLY endpoint that returns player positions: /parse and the deprecated\r\n/parse/broadcast never carried them. Sample times are already relative to referenceTime;\r\nx/y are map units (same convention as /parse/loot), z = ueZ/18.2.\r\nSubject to per-plan parsing quota limits (5 credits).","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/replays/{matchId}/parse/broadcast":{"get":{"tags":["Replays (by Match ID)"],"summary":"DEPRECATED — use GET /{matchId}/parse instead, which returns the same combined\r\npayload for 5 credits. This route now serves the exact same result as /parse\r\n(same cache, 5 credits) and will be removed in v2.","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"deprecated":true}},"/api/v1/shop":{"get":{"tags":["Shop"],"summary":"Get the current Item Shop.","parameters":[{"name":"type","in":"query","description":"Filter by item type (e.g. outfit, pickaxe).","schema":{"type":"string"}},{"name":"section","in":"query","description":"Filter by shop section name.","schema":{"type":"string"}},{"name":"rarity","in":"query","description":"Filter by rarity (e.g. rare, epic, legendary).","schema":{"type":"string"}},{"name":"search","in":"query","description":"Search term to filter items by name.","schema":{"type":"string"}},{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ShopResponseDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/ShopResponseDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/ShopResponseDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/shop/battlepass":{"get":{"tags":["Shop"],"summary":"Get the current Battle Pass content and rewards.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites":{"get":{"tags":["Sprites"],"summary":"Get the full sprite catalog: families with nested variants, current + PAK-base drop\r\nweights, normalized drop chances, rarity, icons, boons, the level-up XP curve, and\r\nalternate event weight sets.","parameters":[{"name":"search","in":"query","description":"Filter by sprite name or id (family or variant, contains match).","schema":{"type":"string"}},{"name":"rarity","in":"query","description":"Filter by rarity (e.g. epic, legendary).","schema":{"type":"string"}},{"name":"variant","in":"query","description":"Filter to one variant label across families (e.g. gold, candy, galaxy, holofoil).","schema":{"type":"string"}},{"name":"version","in":"query","description":"Serve an archived catalog instead of the live one, e.g. \"41.30\". See /sprites/versions, or /sprites/all for every season at once.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpritesResponseDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/SpritesResponseDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/SpritesResponseDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/all":{"get":{"tags":["Sprites"],"summary":"Every season's catalog in one call — the whole sprite archive, grouped by game version,\r\ncurrent season first.","description":"This is the cross-season view of `GET /api/v2/sprites`, which only ever describes the\r\nlive season. Kept grouped rather than merged into one list because a family that survives\r\na rollover does not keep its spawn rate — the version a sprite is read under is part of\r\nits data. The `search`/`rarity`/`variant` filters apply within each season\r\nand seasons left with no match are dropped, so `?search=llama` answers \"which seasons\r\nhad this sprite\".","parameters":[{"name":"search","in":"query","description":"Filter by sprite name or id (family or variant, contains match).","schema":{"type":"string"}},{"name":"rarity","in":"query","description":"Filter by rarity (e.g. epic, legendary).","schema":{"type":"string"}},{"name":"variant","in":"query","description":"Filter to one variant label across families (e.g. gold, candy, galaxy).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/AllSpritesResponseDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/AllSpritesResponseDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/AllSpritesResponseDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/versions":{"get":{"tags":["Sprites"],"summary":"Every archived sprite catalog version, newest first.","description":"A season rollover swaps the whole SpriteLibrary — 42.00 went from 25 families to 12\r\novernight — so the live catalog only ever describes what drops right now. Past seasons\r\nremain readable here, spawn rates included, which is data that exists nowhere else once\r\nEpic has moved on. Pass one of these to `GET /api/v2/sprites?version=`.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpriteVersionDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpriteVersionDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpriteVersionDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/boons":{"get":{"tags":["Sprites"],"summary":"Get all SpriteBoons perks with names and descriptions.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpriteBoonDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpriteBoonDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpriteBoonDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/collection":{"get":{"tags":["Sprites"],"summary":"Get the caller's own sprite collection — the catalog annotated with what they own,\r\neach variant carrying `owned`, `count`, `xp` and `mastered`, plus their equipped\r\nvariant, starter sprite, season currency and a completion percentage.","description":"Requires `x-fortnite-token` — Epic's sprite inventory is scoped to the token's\r\nown account, so a player's collection can only be read with their own token.\r\nObtain one via GET /api/v1/oauth/get-token → POST /api/v1/oauth/complete.\r\nEpic tokens expire after a few hours; a 401 here means refresh and retry.","parameters":[{"name":"accountId","in":"query","description":"Optional Epic account id. Resolved from the token when omitted.","schema":{"type":"string"}},{"name":"version","in":"query","description":"Optional game version, e.g. `41.30`. Defaults to the live season. Epic replaces the\r\nwhole sprite roster at a season rollover, so sprites collected earlier only resolve\r\nagainst the season that shipped them — pass a version from GET /sprites/versions to read\r\nthat season's collection.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpriteCollectionResponseDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/SpriteCollectionResponseDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/SpriteCollectionResponseDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/collection/all":{"get":{"tags":["Sprites"],"summary":"The caller's collection across EVERY season in one call — each season's catalog annotated\r\nwith what they own, plus cumulative cross-season totals.","description":"Same auth as `GET /sprites/collection`: requires the caller's own `x-fortnite-token`.\r\nEpic's entitlements are account-wide and season-agnostic — it is the catalog they are joined\r\nagainst that makes an answer seasonal — so this reads Epic once and joins every archived\r\nseason onto it, rather than costing one Epic round-trip per season.\r\n            \r\nThe top-level totals are de-duplicated by variant id, so they do NOT equal the sum of the\r\nper-season counts: a sprite that survived a rollover is one sprite, not one per season.","parameters":[{"name":"accountId","in":"query","description":"Optional Epic account id. Resolved from the token when omitted.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/AllSpriteCollectionsResponseDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/AllSpriteCollectionsResponseDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/AllSpriteCollectionsResponseDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/collection/publish":{"post":{"tags":["Sprites"],"summary":"Publish (or refresh) the caller's OWN collection so others can view it — this is the\r\nopt-in basis for \"see another player's collection\". Requires the caller's own\r\n`x-fortnite-token`; the share is keyed to the account that token verifies as, so\r\nno one can publish on another account's behalf.","description":"Body: <c>{ \"visibility\": \"public|unlisted|private\", \"autoRefresh\": false,\r\n\"deviceAuth\": { \"accountId\": \"...\", \"deviceId\": \"...\", \"secret\": \"...\" } }</c>.\r\n`public` is discoverable by display name or account id; `unlisted` only by\r\nexact account id; `private` hides it from others. Supplying `deviceAuth` with\r\n`autoRefresh: true` stores it encrypted so stale snapshots refresh server-side;\r\nomit it to store a snapshot only (no credentials retained).","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishCollectionRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/PublishCollectionRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/PublishCollectionRequest"}}}},"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpriteSharePublishResultDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/SpriteSharePublishResultDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/SpriteSharePublishResultDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}},"delete":{"tags":["Sprites"],"summary":"Remove the caller's shared collection (verified from their own token).","responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/collection/shared/{accountIdOrName}":{"get":{"tags":["Sprites"],"summary":"Get another player's opt-in shared collection by Epic account id or display name.\r\nOnly returns collections the owner has published: public shares resolve by name or id,\r\nunlisted shares only by exact account id, and private/never-published resolve to 404.\r\nNo Epic token is required and none of the target player's credentials are used.","parameters":[{"name":"accountIdOrName","in":"path","description":"Epic account id (32 hex) or a published display name.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SharedSpriteCollectionDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/SharedSpriteCollectionDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/SharedSpriteCollectionDto"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/sprites/{id}":{"get":{"tags":["Sprites"],"summary":"Get a single sprite family by family id, variant id, or name.","parameters":[{"name":"id","in":"path","description":"Family id (e.g. DuckSprite), variant id (e.g. DuckSprite_Variant_Gold), or name (e.g. Duck Sprite).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpriteFamilyDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/SpriteFamilyDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/SpriteFamilyDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/stats/{accountId}":{"get":{"tags":["Stats"],"summary":"Get stats for a single player by Epic account ID.","description":"Returns 403 when the account exists but has \"Public Game Stats\" disabled, and 404 when the account does not exist.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID.","required":true,"schema":{"type":"string"}},{"name":"startTime","in":"query","description":"Optional start time filter (Unix timestamp, e.g. 1773900001).","schema":{"type":"string"}},{"name":"endTime","in":"query","description":"Optional end time filter (Unix timestamp, e.g. 1782950340).","schema":{"type":"string"}},{"name":"stats","in":"query","description":"Comma-separated list of stat keys to include.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/stats/bulk":{"post":{"tags":["Stats"],"summary":"Get stats for multiple players in one request.","description":"Body: {\"accountIds\": [\"id1\", \"id2\"], \"stats\": [\"br_kills_keyboardmouse_m0_playlist_defaultsolo\"]}.\r\nBoth fields are required and non-empty; \"stats\" lists the exact stat keys to fetch\r\n(a full listing per player is only available via GET /api/v2/stats/{accountId}).\r\nEpic's native fields (\"owners\", \"appId\", \"startDate\", \"endDate\") are also accepted.\r\nAccounts that are private or unknown are silently omitted from the response — they do not fail the batch.","requestBody":{"content":{"application/json":{"schema":{}},"text/json":{"schema":{}},"application/*+json":{"schema":{}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/stats/leaderboard/{stat}":{"get":{"tags":["Stats"],"summary":"Get the global leaderboard for a specific stat.","parameters":[{"name":"stat","in":"path","description":"Stat key to rank by (e.g. br_kills_total).","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of entries to return.","schema":{"type":"integer","format":"int32"}},{"name":"offset","in":"query","description":"Number of entries to skip.","schema":{"type":"integer","format":"int32"}},{"name":"window","in":"query","description":"Time window (e.g. season, alltime).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/tracker":{"get":{"tags":["TournamentTracker"],"summary":"Get tournament tracker data for a player — token progression and past event participation.\r\nRequires x-fortnite-token and accountId.","parameters":[{"name":"accountId","in":"query","description":"Epic account ID of the player.","schema":{"type":"string"}},{"name":"validOnly","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/tracker/eligibility/{identifier}/{eventId}":{"get":{"tags":["TournamentTracker"],"summary":"Check a player's eligibility for a specific event — verifies all token requirements\r\n(requireAllTokens, requireAnyTokens, requireNoneTokensCaller, etc.) when x-fortnite-token\r\nis provided. Without the token, all requirements are listed as unverified.\r\nAccepts display name or account ID (with or without dashes).","parameters":[{"name":"identifier","in":"path","description":"Player display name or Epic account ID.","required":true,"schema":{"type":"string"}},{"name":"eventId","in":"path","description":"Epic event ID (e.g. epicgames_S40_FNCSMajor1_LCQ_EU).","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"query","description":"Optional event window ID. Defaults to the most relevant window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/EventTokenEligibilityDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/EventTokenEligibilityDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/EventTokenEligibilityDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/tracker/eligibility":{"get":{"tags":["TournamentTracker"],"summary":"Check whether a player is eligible for tournaments based on their participation history.\r\nEligibility is determined by the number of tournaments played in the last N days.\r\nRequires x-fortnite-token and accountId.\r\n            \r\n\n\r\nEpic's live payload only remembers about a day of participation, so history older\r\nthan that is rebuilt from per-window leaderboards in the background. The response\r\ncarries a `history` block saying how much of the look-back has actually been\r\nverified. Until `history.complete` is true, `tournaments_played` is a\r\nLOWER BOUND and `eligible` is `null` rather than `false` — reaching\r\nthe threshold still proves eligibility, but falling short proves nothing yet.\r\nThe first call for a player kicks off that backfill; it takes a few minutes.\r\n","parameters":[{"name":"accountId","in":"query","description":"Epic account ID of the player.","schema":{"type":"string"}},{"name":"days","in":"query","description":"Look-back window in days (1–365, default: 180).","schema":{"type":"integer","format":"int32","default":180}},{"name":"requiredTournaments","in":"query","description":"Minimum number of tournaments required (1–50, default: 14).","schema":{"type":"integer","format":"int32","default":14}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/tokens":{"get":{"tags":["TournamentTracker"],"summary":"Get the raw token set for one or more players directly from Epic's tokens endpoint.\r\nTokens represent eligibility flags earned by participating in tournaments.\r\nPass multiple IDs as comma-separated values: ?teamAccountIds=id1%2Cid2%2C...","parameters":[{"name":"teamAccountIds","in":"query","description":"Comma-separated Epic account IDs (URL-encoded).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/PlayerTokensDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/PlayerTokensDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/PlayerTokensDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/player":{"get":{"tags":["TournamentV1"],"summary":"Get the authenticated player's tournament data — token progression and event participation.\r\nRequires x-fortnite-token and accountId.","parameters":[{"name":"region","in":"query","description":"Optional region filter (e.g. EU, NAE, NAW).","schema":{"type":"string"}},{"name":"platform","in":"query","description":"Optional platform filter (e.g. Windows, PlayStation).","schema":{"type":"string"}},{"name":"accountId","in":"query","description":"Epic account ID of the player.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/sessions":{"get":{"tags":["TournamentV1"],"summary":"Get sessions for a specific event.","parameters":[{"name":"eventId","in":"query","description":"Event identifier.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/EventSessionDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/EventSessionDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/EventSessionDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/player/{accountId}/matches":{"get":{"tags":["TournamentV1"],"summary":"Get a player's RECENT tournament sessions (session IDs), grouped by event window.\r\nSourced from Epic's player-scoped /download data, which Epic keeps for roughly the\r\nlast 36 hours only (measured 2026-09-01) — this is not a full history. Tournament\r\nsessions only: private custom-key matches are not events and never appear here.\r\nEpic only serves this data to the player it belongs to, so x-fortnite-token is\r\nrequired for any account other than the service account (403 otherwise).\r\nFor a 180-day participation history use GET /events/tracker; for a token-less\r\nlookup of one tournament use GET {eventId}/{eventWindowId}/player/{accountId}/matches;\r\nfor the match a player is in right now use GET player/{accountId}/session.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID of the player.","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","description":"Only matches ending at or after this UTC timestamp (e.g. 2026-01-01).","schema":{"type":"string","format":"date-time"}},{"name":"before","in":"query","description":"Only matches ending before this UTC timestamp (e.g. 2026-02-01).","schema":{"type":"string","format":"date-time"}},{"name":"region","in":"query","description":"Optional region for the events catalogue (default: EU). The player's sessions themselves are global.","schema":{"type":"string"}},{"name":"platform","in":"query","description":"Optional platform (default: Windows).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/player/{accountId}/session":{"get":{"tags":["TournamentV1"],"summary":"Get the match a consenting player is in right now — any mode: Battle Royale, Reload,\r\nRanked, or a custom-key scrim hosted by anyone. Requires the player's OWN\r\nx-fortnite-token: the token is verified against the accountId before anything is\r\nforwarded (403 otherwise). That token comes from Epic's device-authorization flow,\r\nwhich authenticates as the Fortnite client rather than as your application; Epic\r\nAccount Services developer terms do not allow routing your users through it, so it\r\nsuits tools a player runs for themselves, not third-party apps asking other players\r\nto log in. Because Fortnite kills every other session of an account\r\nwhen the game launches, obtain the token from stored device auth (/oauth/link, then\r\n/oauth/refresh-device on 401), not from a one-off login.\r\nWhile the player is in a game, sessionId is the replay match ID — pass it to\r\n/replays/{matchId} once the match has ended; playlist lets you filter (e.g. scrims)\r\nbefore parsing. The custom match key is never returned (hasCustomKey only); teammates\r\nare listed by account id only. inParty is false when the player's client is offline.\r\nCached 10 s per account — polling faster gains nothing — and Epic's own party state\r\nlags the real match by 1-2 min. Rate limit: 1200 requests/min per API key.","parameters":[{"name":"accountId","in":"path","description":"Epic account ID of the player — must match the token.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/{eventId}/{eventWindowId}/player/{accountId}/matches":{"get":{"tags":["TournamentV1"],"summary":"Get a player's matches (session IDs + per-match stats) in one event window, without\r\nany player token: the leaderboard is scanned page by page until the player's team\r\nis found. Pass rankHint (their approximate final rank) to hit the right page first —\r\nwithout it up to maxPages pages are scanned in order.","parameters":[{"name":"eventId","in":"path","description":"Event identifier (e.g. epicgames_S39_PlayStationCup_EU).","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"path","description":"Event window identifier (e.g. S39_PlayStationCup_Qualifier1_EU).","required":true,"schema":{"type":"string"}},{"name":"accountId","in":"path","description":"Epic account ID of any player on the team.","required":true,"schema":{"type":"string"}},{"name":"rankHint","in":"query","description":"Approximate leaderboard rank, if known — makes the lookup a single page fetch.","schema":{"type":"integer","format":"int32"}},{"name":"maxPages","in":"query","description":"Max leaderboard pages to scan (default 15, max 100).","schema":{"type":"integer","format":"int32","default":15}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/PlayerWindowStandingDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/PlayerWindowStandingDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/PlayerWindowStandingDto"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/global":{"get":{"tags":["TournamentV1"],"summary":"Get currently active and upcoming tournaments, enriched with CMS metadata.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalEventDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalEventDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalEventDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/global/history":{"get":{"tags":["TournamentV1"],"summary":"Get all tournaments including past ones, enriched with CMS metadata.","parameters":[{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalEventDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalEventDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalEventDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/cashprizes":{"get":{"tags":["TournamentV1"],"summary":"Get all payout tables extracted from Epic's events download.\r\nPlayer data is stripped — only reward/prize structures are returned.\r\nResponse is cached for 4 hours.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeScoringDto"}}}},"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeScoringDto"}}}},"text/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeScoringDto"}}}}}}}}},"/api/v1/events/cashprize/{eventWindowId}":{"get":{"tags":["TournamentV1"],"summary":"Get the payout table for a specific event window.","parameters":[{"name":"eventWindowId","in":"path","description":"Event window identifier (e.g. epicgames_S40_RankedCupSolo_EU_1_Elite).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeScoringDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeScoringDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeScoringDto"}}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/scoring":{"get":{"tags":["TournamentV1"],"summary":"Get the per-match scoring rules (placement/elimination reward tiers) for every\r\nevent window, keyed by eventWindowId. Extracted from Epic's events data\r\n(scoringRuleSets + scoreLocationScoringRuleSets, with event-template fallback).","responses":{"200":{"description":"OK"}}}},"/api/v1/events/scoring/{eventWindowId}":{"get":{"tags":["TournamentV1"],"summary":"Get the per-match scoring rules for a specific event window — the authoritative\r\n\"how does this session score\" (exists before the first game is played, and\r\ndiffers between a weekly cup's qualifier round and its final).","parameters":[{"name":"eventWindowId","in":"path","description":"Event window identifier (e.g. S42_PerformanceEvaluation_Event2Round1_EU).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/stats/{eventId}/{eventWindowId}/{statKey}":{"get":{"tags":["TournamentV1"],"summary":"Get the top performers for a specific tracked stat across the entire leaderboard.\r\nFetches all pages in parallel batches so low-scoring but high-stat teams (e.g. top fraggers\r\nin a placement-only event) are always included regardless of their leaderboard position.\r\nResponse includes an `availableStats` array listing every stat key tracked in this tournament.","parameters":[{"name":"eventId","in":"path","description":"Event identifier (e.g. epicgames_Bratwurst_Official).","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"path","description":"Event window identifier (e.g. Bratwurst_UpperBracket_Day1).","required":true,"schema":{"type":"string"}},{"name":"statKey","in":"path","description":"Tracked stat key to rank by (e.g. TEAM_ELIMS_STAT_INDEX, DamageDealt, Headshots).","required":true,"schema":{"type":"string"}},{"name":"top","in":"query","description":"Number of teams to return (default: 10, max: 100).","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/EventStatsLeaderboardDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/EventStatsLeaderboardDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/EventStatsLeaderboardDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/stats/{eventId}/{eventWindowId}/{statKey}/{teamIdentifier}":{"get":{"tags":["TournamentV1"],"summary":"Get all tracked stats for a specific team identified by Epic account ID or display name.\r\nReturns every stat tracked in this tournament for that team (total + per-game), plus their\r\nrank in the requested statKey across all teams in the event.\r\nAccepts account ID (32 hex chars) or display name — clan tags are stripped for matching.","parameters":[{"name":"eventId","in":"path","description":"Event identifier (e.g. epicgames_Bratwurst_Official).","required":true,"schema":{"type":"string"}},{"name":"eventWindowId","in":"path","description":"Event window identifier (e.g. Bratwurst_UpperBracket_Day1).","required":true,"schema":{"type":"string"}},{"name":"statKey","in":"path","description":"Stat to show this team's rank in (e.g. DamageDealt, TEAM_ELIMS_STAT_INDEX).","required":true,"schema":{"type":"string"}},{"name":"teamIdentifier","in":"path","description":"Epic account ID or display name of any player on the team.","required":true,"schema":{"type":"string"}},{"name":"twitter","in":"query","description":"Admin only — return a plain-text Twitter snippet instead of JSON.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/TeamEventStatsDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/TeamEventStatsDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/TeamEventStatsDto"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/powerrankings":{"get":{"tags":["TournamentV1"],"summary":"Get the Fortnite Power Rankings leaderboard — the official competitive skill rating.\r\n            \r\nReturns 100 players per page (100 pages total = top 10,000 players).\r\nThe service account used to query Epic is stripped from the response.\r\n            \r\nSupply x-fortnite-token + accountId to also receive the caller's own\r\nPR entry as `playerEntry` in the response (null if they are unranked).\r\nWithout a token the response is the plain global page — that part needs no auth.\r\n            \r\ntrackedStats keys: PR (score), countingEvents (max 20), peakPerf, deltaPR, peakPR.\r\n            \r\nFor a single player use `powerrankings/search` or `powerrankings/archive/{accountId}`\r\n(no token), or `powerrankings/player/{identifier}` (x-fortnite-token required).","parameters":[{"name":"page","in":"query","description":"Zero-indexed page (default: 0). 100 entries per page, 100 pages total.","schema":{"type":"integer","format":"int32","default":0}},{"name":"accountId","in":"query","description":"Optional — Epic account ID of the caller. Required when x-fortnite-token is provided.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/PowerRankingsPageDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/PowerRankingsPageDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/PowerRankingsPageDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/powerrankings/search":{"get":{"tags":["TournamentV1"],"summary":"Search Power Rankings players by display name (partial, case-insensitive).\r\nResults come from an in-memory index built from the full 10,000-player leaderboard.\r\nThe index is rebuilt every 2 hours and cached in Redis — no user token required.","parameters":[{"name":"q","in":"query","description":"Display name search term (partial match, min 2 chars recommended).","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max results to return (default: 10, max: 50).","schema":{"type":"integer","format":"int32","default":10}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/PowerRankingSearchDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/PowerRankingSearchDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/PowerRankingSearchDto"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/powerrankings/player/{identifier}":{"get":{"tags":["TournamentV1"],"summary":"Look up a player's Power Rankings entry by display name or account ID.\r\n**Requires the x-fortnite-token of the player being looked up.**","description":"Returns rank, pointsEarned, and trackedStats (PR, countingEvents, peakPerf, deltaPR, peakPR).\r\nAccepts a 32-char hex account ID or an Epic display name (clan tags stripped automatically).\r\n            \r\n**x-fortnite-token is mandatory here.** Epic rejects the `teamAccountIds` filter this\r\nendpoint relies on when the request carries service auth, so a token-less call returns\r\n**400** for every account — including accounts that are in the top 10,000. With the token\r\nthe entry resolves even when the player is ranked beyond the top 10,000.\r\nObtain a token via GET /api/v1/oauth/get-token then POST /api/v1/oauth/complete.\r\n            \r\n**Token-free alternatives** (same PR figures, no OAuth flow required):\r\n- GET `powerrankings/search?q={displayName}` — partial name search over the top-10,000 index.\r\n- GET `powerrankings/archive/{accountId}` — last archived entry for any account that has\r\n  appeared in the top 10,000.","parameters":[{"name":"identifier","in":"path","description":"Epic display name or account ID (e.g. KAMSLAM1x or b9b4aec...).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/powerrankings/archive/{accountId}":{"get":{"tags":["TournamentV1"],"summary":"Look up a player's most recent Power Rankings entry by account ID from the archive.\r\nReturns rank, score, bestRank, peakPr, deltaPr, countingEvents and the last-updated time.\r\nUnlike `powerrankings/player/{identifier}`, this does NOT require an x-fortnite-token\r\nand works for any account that has appeared in the top-10,000 leaderboard.","parameters":[{"name":"accountId","in":"path","description":"32-char hex Epic account ID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/PowerRankingArchiveDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/PowerRankingArchiveDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/PowerRankingArchiveDto"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/events/global/leaderboard":{"get":{"tags":["TournamentV1"],"summary":"Get a paginated tournament leaderboard for the given event window.","description":"The optional `leaderboardDef` parameter controls which leaderboard is returned:\r\n            \r\n**Cumulative leaderboard** — pass the def ID found in `eventWindow.scoreLocations`\r\nwhere `isMainWindowLeaderboard = false` (e.g. `S40_FNCSMajor1_PlayInStage_CumulativeLeaderboardDef`).\r\nThe server forwards it as Epic's `sm=` query parameter, returning the combined\r\nleaderboard across all sessions in the same group (Day 1 + Day 2, etc.).\r\n            \r\n**Ranked Cup (rank-tier)** — pass a def ID from `eventWindow.metadata.defaultLeaderboardByRank`\r\n(e.g. `ranked_br_division_7`). The server resolves it to an internal window ID to filter\r\nresults by rank tier.\r\n            \r\nInclude `x-fortnite-token` header for a personalized leaderboard view.","parameters":[{"name":"eventId","in":"query","description":"Event identifier (e.g. epicgames_S40_FNCSMajor1_PlayInStage_EU).","schema":{"type":"string"}},{"name":"eventWindowId","in":"query","description":"Event window identifier (e.g. S40_FNCSMajor1_PlayInStage_Day1_EU).","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number, zero-indexed (default: 0).","schema":{"type":"integer","format":"int32"}},{"name":"leaderboardDef","in":"query","description":"Optional leaderboard definition ID — cumulative def or rank-tier def.","schema":{"type":"string"}},{"name":"accountId","in":"query","description":"Optional Epic account ID to highlight in the response.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/EventLeaderboardDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/EventLeaderboardDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/EventLeaderboardDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/weapons":{"get":{"tags":["Weapons"],"summary":"Get weapons for a given patch, with optional filters.","parameters":[{"name":"patch","in":"query","description":"Patch version (e.g. 32.00). Defaults to current patch.","schema":{"type":"string"}},{"name":"category","in":"query","description":"Filter by category (e.g. Assault, Shotgun).","schema":{"type":"string"}},{"name":"search","in":"query","description":"Search term to filter weapons by name.","schema":{"type":"string"}},{"name":"rarity","in":"query","description":"Filter by rarity (e.g. rare, epic, legendary).","schema":{"type":"string"}},{"name":"type","in":"query","description":"Filter by weapon type.","schema":{"type":"string"}},{"name":"ammoType","in":"query","description":"Filter by ammo type.","schema":{"type":"string"}},{"name":"gamemode","in":"query","description":"Filter by game mode (e.g. BattleRoyale, ZeroBuild).","schema":{"type":"string"}},{"name":"itemType","in":"query","description":"Filter by item type.","schema":{"type":"string"}},{"name":"lang","in":"query","description":"Language code (default: en).","schema":{"type":"string"}},{"name":"major","in":"query","description":"Snapshot major version (e.g. 41). Overrides patch.","schema":{"type":"integer","format":"int32"}},{"name":"minor","in":"query","description":"Snapshot minor version (e.g. 0 for 41.00).","schema":{"type":"integer","format":"int32"}},{"name":"date","in":"query","description":"Snapshot date — serves the catalog as of that hotfix.","schema":{"type":"string","format":"date-time"}},{"name":"secondary","in":"query","description":"Use the secondary loot pool for the gamemode filter.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WeaponListItemDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WeaponListItemDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WeaponListItemDto"}}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/weapons/{id}":{"get":{"tags":["Weapons"],"summary":"Get a single weapon by its WID (e.g. WID_Assault_...) with full stats.","parameters":[{"name":"id","in":"path","description":"The weapon id (WID) — matches the `item` field of loot pool weapon entries.","required":true,"schema":{"type":"string"}},{"name":"major","in":"query","description":"Snapshot major version. Defaults to latest.","schema":{"type":"integer","format":"int32"}},{"name":"minor","in":"query","description":"Snapshot minor version.","schema":{"type":"integer","format":"int32"}},{"name":"date","in":"query","description":"Snapshot date.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/WeaponListItemDto"}},"application/json":{"schema":{"$ref":"#/components/schemas/WeaponListItemDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/WeaponListItemDto"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/weapons/lootpool":{"get":{"tags":["Weapons"],"summary":"Get the resolved loot pool for a gamemode: one entry per item with per-container\r\nchances (P(item | one roll of that container)) and the underlying per-drop-list\r\nrows under `sources`, self-extracted from game data + live hotfixes.","parameters":[{"name":"gamemode","in":"query","description":"Pool key: br, br_ranked, zerobuild, zb_ranked, reload, reload_zb, reload_ranked, og, og_zb, og_ranked (default: br).","schema":{"type":"string","default":"br"}},{"name":"major","in":"query","description":"Snapshot major version. Defaults to latest.","schema":{"type":"integer","format":"int32"}},{"name":"minor","in":"query","description":"Snapshot minor version.","schema":{"type":"integer","format":"int32"}},{"name":"date","in":"query","description":"Snapshot date — serves the pool as of that hotfix.","schema":{"type":"string","format":"date-time"}},{"name":"secondary","in":"query","description":"Serve the secondary pool variant if one exists.","schema":{"type":"boolean","default":false}},{"name":"withStats","in":"query","description":"Embed each weapon entry's full stats inline (default false — join to /weapons/{id} instead).","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/weapons/patches":{"get":{"tags":["Weapons"],"summary":"Get all available weapon patches, with the current patch flagged.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PatchInfoDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PatchInfoDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PatchInfoDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v2/weapons/rarity":{"get":{"tags":["Weapons"],"summary":"Get rarity definitions and their display colors.","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RarityDefinitionDto"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RarityDefinitionDto"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RarityDefinitionDto"}}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}},"components":{"schemas":{"AllSpriteCollectionsResponseDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"versionCount":{"type":"integer","format":"int32"},"ownedVariants":{"type":"integer","format":"int32"},"totalVariants":{"type":"integer","format":"int32"},"ownedFamilies":{"type":"integer","format":"int32"},"totalFamilies":{"type":"integer","format":"int32"},"completionPercent":{"type":"number","format":"double"},"currency":{"type":"array","items":{"$ref":"#/components/schemas/SpriteCurrencyDto"},"nullable":true},"versions":{"type":"array","items":{"$ref":"#/components/schemas/SpriteCollectionResponseDto"},"nullable":true}},"additionalProperties":false},"AllSpritesResponseDto":{"type":"object","properties":{"versionCount":{"type":"integer","format":"int32"},"familyCount":{"type":"integer","format":"int32"},"versions":{"type":"array","items":{"$ref":"#/components/schemas/SpritesResponseDto"},"nullable":true}},"additionalProperties":false},"BattlePassCatalog":{"type":"object","properties":{"gameVersion":{"type":"string","nullable":true},"season":{"type":"integer","format":"int32"},"plugin":{"type":"string","nullable":true},"generated":{"type":"string","nullable":true},"levelRewards":{"type":"object","additionalProperties":{"type":"integer","format":"int32"},"nullable":true},"prices":{"type":"array","items":{"$ref":"#/components/schemas/BattlePassPrice"},"nullable":true},"pages":{"type":"array","items":{"$ref":"#/components/schemas/BattlePassPage"},"nullable":true}},"additionalProperties":false},"BattlePassPage":{"type":"object","properties":{"id":{"type":"string","nullable":true},"track":{"type":"string","nullable":true},"page":{"type":"integer","format":"int32"},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/BattlePassReward"},"nullable":true}},"additionalProperties":false},"BattlePassPrice":{"type":"object","properties":{"name":{"type":"string","nullable":true},"cost":{"type":"integer","format":"int32"},"currency":{"type":"string","nullable":true}},"additionalProperties":false},"BattlePassReward":{"type":"object","properties":{"item":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"rarity":{"type":"string","nullable":true},"icon":{"type":"string","nullable":true},"quantity":{"type":"integer","format":"int32"},"priceRow":{"type":"string","nullable":true},"cost":{"type":"integer","format":"int32"},"currency":{"type":"string","nullable":true},"tileSize":{"type":"string","nullable":true},"offerGuid":{"type":"string","nullable":true}},"additionalProperties":false},"BattlePassSeasonDto":{"type":"object","properties":{"season":{"type":"integer","format":"int32"},"gameVersion":{"type":"string","nullable":true},"isCurrent":{"type":"boolean"},"pages":{"type":"integer","format":"int32"},"rewards":{"type":"integer","format":"int32"},"generated":{"type":"string","nullable":true}},"additionalProperties":false},"CashPrizePayoutDto":{"type":"object","properties":{"rewardType":{"type":"string","nullable":true},"rewardMode":{"type":"string","nullable":true},"value":{"type":"string","nullable":true},"quantity":{"type":"number","format":"double"},"notifiesPlayer":{"type":"boolean"}},"additionalProperties":false},"CashPrizeRankDto":{"type":"object","properties":{"threshold":{"type":"integer","format":"int32"},"payouts":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizePayoutDto"},"nullable":true}},"additionalProperties":false},"CashPrizeScoringDto":{"type":"object","properties":{"scoringType":{"type":"string","nullable":true},"ranks":{"type":"array","items":{"$ref":"#/components/schemas/CashPrizeRankDto"},"nullable":true}},"additionalProperties":false},"CompleteOAuthRequest":{"type":"object","properties":{"flowId":{"type":"string","nullable":true}},"additionalProperties":false},"CosmeticDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"rarity":{"type":"string","nullable":true},"series":{"type":"string","nullable":true},"set":{"type":"string","nullable":true},"icon":{"type":"string","nullable":true},"introduction":{"$ref":"#/components/schemas/CosmeticIntroductionDto"},"images":{"$ref":"#/components/schemas/CosmeticImagesDto"},"tags":{"type":"array","items":{"type":"string"},"nullable":true},"weaponActorClass":{"type":"string","nullable":true}},"additionalProperties":false},"CosmeticDtoPaginatedResultDto":{"type":"object","properties":{"page":{"type":"integer","format":"int32"},"pageSize":{"type":"integer","format":"int32"},"total":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"$ref":"#/components/schemas/CosmeticDto"},"nullable":true}},"additionalProperties":false},"CosmeticImagesDto":{"type":"object","properties":{"smallIcon":{"type":"string","nullable":true},"icon":{"type":"string","nullable":true},"largeIcon":{"type":"string","nullable":true}},"additionalProperties":false},"CosmeticIntroductionDto":{"type":"object","properties":{"chapter":{"type":"integer","format":"int32"},"season":{"type":"integer","format":"int32"},"absoluteSeason":{"type":"integer","format":"int32"}},"additionalProperties":false},"EpicEventDto":{"type":"object","properties":{"gameId":{"type":"string","nullable":true},"eventId":{"type":"string","nullable":true},"beginTime":{"type":"string","nullable":true},"endTime":{"type":"string","nullable":true},"displayDataId":{"type":"string","nullable":true},"eventGroup":{"type":"string","nullable":true},"announcementTime":{"type":"string","nullable":true},"regions":{"type":"array","items":{"type":"string"},"nullable":true},"regionMappings":{"type":"object","additionalProperties":{"type":"string"},"nullable":true},"platforms":{"type":"array","items":{"type":"string"},"nullable":true},"platformMappings":{"type":"object","additionalProperties":{"type":"string"},"nullable":true},"metadata":{"$ref":"#/components/schemas/EpicEventMetadataDto"},"eventWindows":{"type":"array","items":{"$ref":"#/components/schemas/EpicEventWindowDto"},"nullable":true},"link":{"type":"string","nullable":true}},"additionalProperties":false},"EpicEventMetadataDto":{"type":"object","properties":{"tournamentType":{"type":"string","nullable":true},"TeamLockType":{"type":"string","nullable":true},"AccountLockType":{"type":"string","nullable":true},"DisqualifyType":{"type":"string","nullable":true},"webId":{"type":"string","nullable":true},"minimumAccountLevel":{"type":"integer","format":"int32","nullable":true},"TrackedStats":{"type":"array","items":{"type":"string"},"nullable":true},"requireSystemFeatures":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"EpicEventWindowDto":{"type":"object","properties":{"eventWindowId":{"type":"string","nullable":true},"eventTemplateId":{"type":"string","nullable":true},"countdownBeginTime":{"type":"string","nullable":true},"beginTime":{"type":"string","nullable":true},"endTime":{"type":"string","nullable":true},"round":{"type":"integer","format":"int32"},"payoutDelay":{"type":"integer","format":"int32"},"isTBD":{"type":"boolean"},"visibility":{"type":"string","nullable":true},"teammateEligibility":{"type":"string","nullable":true},"canLiveSpectate":{"type":"boolean"},"requireAllTokens":{"type":"array","items":{"type":"string"},"nullable":true},"requireAnyTokens":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"EventLeaderboardDto":{"type":"object","properties":{"gameId":{"type":"string","nullable":true},"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"page":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"updatedTime":{"type":"string","nullable":true},"entries":{"type":"array","items":{"$ref":"#/components/schemas/EventLeaderboardEntryDto"},"nullable":true}},"additionalProperties":false},"EventLeaderboardEntryDto":{"type":"object","properties":{"gameId":{"type":"string","nullable":true},"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"teamId":{"type":"string","nullable":true},"teamAccountIds":{"type":"array","items":{"type":"string"},"nullable":true},"rank":{"type":"integer","format":"int32"},"pointsEarned":{"type":"integer","format":"int32"},"score":{"type":"integer","format":"int64"},"percentile":{"type":"number","format":"double"},"pointBreakdown":{"type":"object","additionalProperties":{},"nullable":true},"sessionHistory":{"type":"array","items":{"$ref":"#/components/schemas/EventMatchDto"},"nullable":true}},"additionalProperties":false},"EventMatchDto":{"type":"object","properties":{"sessionId":{"type":"string","nullable":true},"endTime":{"type":"string","nullable":true},"trackedStats":{"type":"object","additionalProperties":{"type":"number","format":"double"},"nullable":true}},"additionalProperties":false},"EventSessionDto":{"type":"object","properties":{"groupId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"shortTitle":{"type":"string","nullable":true},"titleLine1":{"type":"string","nullable":true},"titleLine2":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"detailsDescription":{"type":"string","nullable":true},"scheduleInfo":{"type":"string","nullable":true},"poster":{"type":"string","nullable":true},"loadingScreen":{"type":"string","nullable":true},"matchedEventId":{"type":"string","nullable":true},"matchedRegion":{"type":"string","nullable":true},"allRegions":{"type":"array","items":{"type":"string"},"nullable":true},"matchedEvent":{"$ref":"#/components/schemas/EpicEventDto"}},"additionalProperties":false},"EventStatRankingDto":{"type":"object","properties":{"rank":{"type":"integer","format":"int32"},"leaderboardRank":{"type":"integer","format":"int32"},"pointsEarned":{"type":"integer","format":"int32"},"gamesPlayed":{"type":"integer","format":"int32"},"statTotal":{"type":"number","format":"double"},"statPerGame":{"type":"number","format":"double"},"teamAccountIds":{"type":"array","items":{"type":"string"},"nullable":true},"teamAccountDisplayNames":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"EventStatsLeaderboardDto":{"type":"object","properties":{"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"statKey":{"type":"string","nullable":true},"top":{"type":"integer","format":"int32"},"totalTeams":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"updatedTime":{"type":"string","nullable":true},"availableStats":{"type":"array","items":{"type":"string"},"nullable":true},"rankings":{"type":"array","items":{"$ref":"#/components/schemas/EventStatRankingDto"},"nullable":true}},"additionalProperties":false},"EventTokenEligibilityDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"isEligible":{"type":"boolean"},"verifiedRequirements":{"type":"array","items":{"$ref":"#/components/schemas/VerifiedRequirementDto"},"nullable":true},"unverifiedRequirements":{"type":"array","items":{"$ref":"#/components/schemas/UnverifiedRequirementDto"},"nullable":true}},"additionalProperties":false},"ExchangeCodeRequest":{"type":"object","properties":{"code":{"type":"string","nullable":true},"redirectUri":{"type":"string","nullable":true},"clientId":{"type":"string","nullable":true},"clientSecret":{"type":"string","nullable":true}},"additionalProperties":false},"GlobalEventDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"displayDataId":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"shortTitle":{"type":"string","nullable":true},"titleLine1":{"type":"string","nullable":true},"titleLine2":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"detailsDescription":{"type":"string","nullable":true},"scheduleInfo":{"type":"string","nullable":true},"poster":{"type":"string","nullable":true},"loadingScreen":{"type":"string","nullable":true},"regions":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/EpicEventDto"}},"nullable":true}},"additionalProperties":false},"InitiateRequest":{"type":"object","properties":{"custom_key":{"type":"string","nullable":true},"players_id":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"LinkAccountRequest":{"type":"object","properties":{"code":{"type":"string","nullable":true},"redirectUri":{"type":"string","nullable":true},"clientId":{"type":"string","nullable":true},"clientSecret":{"type":"string","nullable":true}},"additionalProperties":false},"LinkRequest":{"type":"object","properties":{"discord_id":{"type":"string","nullable":true},"epic_account_id":{"type":"string","nullable":true},"display_name":{"type":"string","nullable":true}},"additionalProperties":false},"MapCameraDto":{"type":"object","properties":{"orthoWidth":{"type":"number","format":"double"},"worldOffsetX":{"type":"number","format":"double"},"worldOffsetY":{"type":"number","format":"double"},"rotation":{"type":"number","format":"double"}},"additionalProperties":false},"MapDataDto":{"type":"object","properties":{"version":{"type":"string","nullable":true},"chapter":{"type":"integer","format":"int32","nullable":true},"season":{"type":"integer","format":"int32","nullable":true},"patch":{"type":"string","nullable":true},"releaseDate":{"type":"string","nullable":true},"mode":{"type":"string","nullable":true},"island":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"imageWidth":{"type":"integer","format":"int32","nullable":true},"imageHeight":{"type":"integer","format":"int32","nullable":true},"worldBounds":{"$ref":"#/components/schemas/MapWorldBoundsDto"},"camera":{"$ref":"#/components/schemas/MapCameraDto"},"pois":{"type":"array","items":{"$ref":"#/components/schemas/PoiDto"},"nullable":true},"modes":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"MapHistoryEntryDto":{"type":"object","properties":{"version":{"type":"string","nullable":true},"chapter":{"type":"integer","format":"int32","nullable":true},"season":{"type":"integer","format":"int32","nullable":true},"patch":{"type":"string","nullable":true},"releaseDate":{"type":"string","nullable":true},"hasImage":{"type":"boolean"},"imageUrl":{"type":"string","nullable":true},"hasPois":{"type":"boolean"},"modes":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"MapWorldBoundsDto":{"type":"object","properties":{"minX":{"type":"number","format":"double"},"maxX":{"type":"number","format":"double"},"minY":{"type":"number","format":"double"},"maxY":{"type":"number","format":"double"}},"additionalProperties":false},"PatchInfoDto":{"type":"object","properties":{"patch":{"type":"string","nullable":true},"isCurrent":{"type":"boolean"},"archivedAt":{"type":"string","format":"date-time"},"weaponCount":{"type":"integer","format":"int32"},"modeCounts":{"type":"object","additionalProperties":{"type":"integer","format":"int32"},"nullable":true}},"additionalProperties":false},"PlayerTokenAccountDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"tokens":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"PlayerTokensDto":{"type":"object","properties":{"accounts":{"type":"array","items":{"$ref":"#/components/schemas/PlayerTokenAccountDto"},"nullable":true}},"additionalProperties":false},"PlayerWindowStandingDto":{"type":"object","properties":{"found":{"type":"boolean"},"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"accountId":{"type":"string","nullable":true},"rank":{"type":"integer","format":"int32","nullable":true},"pointsEarned":{"type":"integer","format":"int32","nullable":true},"teamAccountIds":{"type":"array","items":{"type":"string"},"nullable":true},"matchCount":{"type":"integer","format":"int32"},"matches":{"type":"array","items":{"$ref":"#/components/schemas/EventMatchDto"},"nullable":true}},"additionalProperties":false},"PoiDto":{"type":"object","properties":{"name":{"type":"string","nullable":true},"tag":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"x":{"type":"number","format":"double","nullable":true},"y":{"type":"number","format":"double","nullable":true},"z":{"type":"number","format":"double","nullable":true}},"additionalProperties":false},"PowerRankingArchiveDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"rank":{"type":"integer","format":"int32"},"score":{"type":"integer","format":"int32"},"bestRank":{"type":"integer","format":"int32"},"peakPr":{"type":"integer","format":"int32"},"deltaPr":{"type":"integer","format":"int32"},"countingEvents":{"type":"integer","format":"int32"},"lastUpdated":{"type":"string","nullable":true},"seasonLabel":{"type":"string","nullable":true}},"additionalProperties":false},"PowerRankingEntryDto":{"type":"object","properties":{"gameId":{"type":"string","nullable":true},"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"teamId":{"type":"string","nullable":true},"teamAccountIds":{"type":"array","items":{"type":"string"},"nullable":true},"teamAccountDisplayNames":{"type":"array","items":{"type":"string"},"nullable":true},"rank":{"type":"integer","format":"int32"},"pointsEarned":{"type":"integer","format":"int32"},"score":{"type":"integer","format":"int64"},"percentile":{"type":"number","format":"double"},"pointBreakdown":{"type":"object","additionalProperties":{},"nullable":true},"sessionHistory":{"type":"array","items":{"$ref":"#/components/schemas/EventMatchDto"},"nullable":true}},"additionalProperties":false},"PowerRankingSearchDto":{"type":"object","properties":{"query":{"type":"string","nullable":true},"total":{"type":"integer","format":"int32"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PowerRankingSearchResultDto"},"nullable":true}},"additionalProperties":false},"PowerRankingSearchResultDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"rank":{"type":"integer","format":"int32"},"score":{"type":"integer","format":"int32"},"countingEvents":{"type":"integer","format":"int32"},"peakPr":{"type":"integer","format":"int32"},"deltaPr":{"type":"integer","format":"int32"}},"additionalProperties":false},"PowerRankingsPageDto":{"type":"object","properties":{"gameId":{"type":"string","nullable":true},"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"page":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"updatedTime":{"type":"string","nullable":true},"entries":{"type":"array","items":{"$ref":"#/components/schemas/PowerRankingEntryDto"},"nullable":true}},"additionalProperties":false},"ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}},"PublishCollectionRequest":{"type":"object","properties":{"visibility":{"type":"string","description":"`public` | `unlisted` | `private`. Defaults to `public`.","nullable":true},"autoRefresh":{"type":"boolean","description":"Store the supplied ApiFortnite.Api.Controllers.PublishCollectionRequest.DeviceAuth so stale snapshots refresh server-side."},"deviceAuth":{"description":"Optional device-auth `{ accountId, deviceId, secret }`; encrypted at rest.","nullable":true}},"additionalProperties":false,"description":"Body for `POST /api/v2/sprites/collection/publish`."},"RarityDefinitionDto":{"type":"object","properties":{"name":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"sortOrder":{"type":"integer","format":"int32"}},"additionalProperties":false},"RefreshDeviceRequest":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"deviceId":{"type":"string","nullable":true},"secret":{"type":"string","nullable":true}},"additionalProperties":false},"RefreshTokenRequest":{"type":"object","properties":{"refreshToken":{"type":"string","nullable":true}},"additionalProperties":false},"RegisterAccountRequest":{"type":"object","properties":{"label":{"type":"string","nullable":true},"device_auth_json":{"type":"string","nullable":true},"roles":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"SeasonEntryDto":{"type":"object","properties":{"seasonDateBegin":{"type":"string","nullable":true},"seasonDateEnd":{"type":"string","nullable":true},"seasonNumber":{"type":"integer","format":"int32"},"exTime":{"type":"integer","format":"int32"}},"additionalProperties":false},"SharedSpriteCollectionDto":{"type":"object","properties":{"visibility":{"type":"string","nullable":true},"snapshotGeneratedAt":{"type":"string","nullable":true},"refreshed":{"type":"boolean"},"collection":{"$ref":"#/components/schemas/SpriteCollectionResponseDto"}},"additionalProperties":false},"ShopBundleDto":{"type":"object","properties":{"name":{"type":"string","nullable":true},"info":{"type":"string","nullable":true},"items":{"type":"integer","format":"int32"},"regularPrice":{"type":"integer","format":"int32"},"finalPrice":{"type":"integer","format":"int32"},"discount":{"type":"integer","format":"int32","nullable":true}},"additionalProperties":false},"ShopCatalogEntryDto":{"type":"object","properties":{"offerId":{"type":"string","nullable":true},"devName":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"sortPriority":{"type":"integer","format":"int32"},"prices":{"type":"array","items":{"$ref":"#/components/schemas/ShopPriceDto"},"nullable":true},"itemGrants":{"type":"array","items":{"$ref":"#/components/schemas/ShopItemGrantDto"},"nullable":true},"bundle":{"$ref":"#/components/schemas/ShopBundleDto"},"sectionId":{"type":"string","nullable":true},"sectionDisplayName":{"type":"string","nullable":true},"sectionPriority":{"type":"integer","format":"int32"},"sectionBackground":{"type":"string","nullable":true},"offerVisual":{"type":"string","nullable":true},"styleVisuals":{"type":"array","items":{"type":"string"},"nullable":true},"junoVisual":{"type":"string","nullable":true},"tileSize":{"type":"string","nullable":true},"metaInfo":{"type":"array","items":{"$ref":"#/components/schemas/ShopMetaInfoDto"},"nullable":true}},"additionalProperties":false},"ShopCosmeticDto":{"type":"object","properties":{"type":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"shortDescription":{"type":"string","nullable":true},"rarity":{"type":"string","nullable":true},"images":{"$ref":"#/components/schemas/ShopCosmeticImagesDto"},"set":{"type":"string","nullable":true},"introduction":{"$ref":"#/components/schemas/ShopCosmeticIntroductionDto"},"tags":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"ShopCosmeticImagesDto":{"type":"object","properties":{"icon":{"type":"string","nullable":true},"largeIcon":{"type":"string","nullable":true}},"additionalProperties":false},"ShopCosmeticIntroductionDto":{"type":"object","properties":{"chapter":{"type":"integer","format":"int32","nullable":true},"season":{"type":"integer","format":"int32","nullable":true}},"additionalProperties":false},"ShopItemGrantDto":{"type":"object","properties":{"templateId":{"type":"string","nullable":true},"quantity":{"type":"integer","format":"int32"},"cosmetic":{"$ref":"#/components/schemas/ShopCosmeticDto"}},"additionalProperties":false},"ShopMetaInfoDto":{"type":"object","properties":{"key":{"type":"string","nullable":true},"value":{"type":"string","nullable":true}},"additionalProperties":false},"ShopPriceDto":{"type":"object","properties":{"currencyType":{"type":"string","nullable":true},"regularPrice":{"type":"integer","format":"int32"},"finalPrice":{"type":"integer","format":"int32"},"saleType":{"type":"string","nullable":true}},"additionalProperties":false},"ShopResponseDto":{"type":"object","properties":{"refreshIntervalHrs":{"type":"number","format":"double"},"dailyPurchaseHrs":{"type":"number","format":"double"},"expiration":{"type":"string","nullable":true},"storefronts":{"type":"array","items":{"$ref":"#/components/schemas/ShopStorefrontDto"},"nullable":true}},"additionalProperties":false},"ShopStorefrontDto":{"type":"object","properties":{"name":{"type":"string","nullable":true},"catalogEntries":{"type":"array","items":{"$ref":"#/components/schemas/ShopCatalogEntryDto"},"nullable":true}},"additionalProperties":false},"SpriteBoonDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"description":{"type":"string","nullable":true}},"additionalProperties":false},"SpriteBoonRefDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"chance":{"type":"number","format":"double","nullable":true}},"additionalProperties":false},"SpriteCollectionFamilyDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"dexNumber":{"type":"integer","format":"int32","nullable":true},"rarity":{"type":"string","nullable":true},"images":{"$ref":"#/components/schemas/SpriteImagesDto"},"owned":{"type":"boolean"},"ownedVariants":{"type":"integer","format":"int32"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/SpriteCollectionVariantDto"},"nullable":true}},"additionalProperties":false},"SpriteCollectionResponseDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"gameVersion":{"type":"string","nullable":true},"generated":{"type":"string","nullable":true},"isCurrent":{"type":"boolean"},"equippedVariant":{"type":"string","nullable":true},"starterRelic":{"type":"string","nullable":true},"ownedVariants":{"type":"integer","format":"int32"},"totalVariants":{"type":"integer","format":"int32"},"ownedFamilies":{"type":"integer","format":"int32"},"totalFamilies":{"type":"integer","format":"int32"},"completionPercent":{"type":"number","format":"double"},"currency":{"type":"array","items":{"$ref":"#/components/schemas/SpriteCurrencyDto"},"nullable":true},"sprites":{"type":"array","items":{"$ref":"#/components/schemas/SpriteCollectionFamilyDto"},"nullable":true}},"additionalProperties":false},"SpriteCollectionVariantDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"variant":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"rarity":{"type":"string","nullable":true},"images":{"$ref":"#/components/schemas/SpriteImagesDto"},"dropChancePercent":{"type":"number","format":"double","nullable":true},"owned":{"type":"boolean"},"count":{"type":"integer","format":"int32"},"xp":{"type":"integer","format":"int32","nullable":true},"mastered":{"type":"boolean","nullable":true}},"additionalProperties":false},"SpriteCurrencyDto":{"type":"object","properties":{"item":{"type":"string","nullable":true},"count":{"type":"integer","format":"int32"}},"additionalProperties":false},"SpriteEventDto":{"type":"object","properties":{"name":{"type":"string","nullable":true},"weights":{"type":"object","additionalProperties":{"type":"number","format":"double"},"nullable":true}},"additionalProperties":false},"SpriteFamilyDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"dexNumber":{"type":"integer","format":"int32","nullable":true},"rarity":{"type":"string","nullable":true},"acquisitionHint":{"type":"string","nullable":true},"extractRewardLootTier":{"type":"string","nullable":true},"images":{"$ref":"#/components/schemas/SpriteImagesDto"},"tags":{"type":"array","items":{"type":"string"},"nullable":true},"boons":{"type":"array","items":{"$ref":"#/components/schemas/SpriteBoonRefDto"},"nullable":true},"spawnWeight":{"type":"number","format":"double","nullable":true},"spawnChancePercent":{"type":"number","format":"double","nullable":true},"variants":{"type":"array","items":{"$ref":"#/components/schemas/SpriteVariantDto"},"nullable":true}},"additionalProperties":false},"SpriteImagesDto":{"type":"object","properties":{"icon":{"type":"string","nullable":true},"iconLarge":{"type":"string","nullable":true}},"additionalProperties":false},"SpriteLevelDto":{"type":"object","properties":{"level":{"type":"integer","format":"int32"},"xp":{"type":"number","format":"double"}},"additionalProperties":false},"SpriteSharePublishResultDto":{"type":"object","properties":{"accountId":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"visibility":{"type":"string","nullable":true},"ownedVariants":{"type":"integer","format":"int32"},"totalVariants":{"type":"integer","format":"int32"},"completionPercent":{"type":"number","format":"double"},"autoRefresh":{"type":"boolean"},"snapshotGeneratedAt":{"type":"string","nullable":true}},"additionalProperties":false},"SpriteSpawnEntryDto":{"type":"object","properties":{"family":{"type":"string","nullable":true},"itemDefinition":{"type":"string","nullable":true},"weight":{"type":"number","format":"double"},"spawnChancePercent":{"type":"number","format":"double"}},"additionalProperties":false},"SpriteSpawnListDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"table":{"type":"string","nullable":true},"totalWeight":{"type":"number","format":"double"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/SpriteSpawnEntryDto"},"nullable":true},"byRarity":{"type":"array","items":{"$ref":"#/components/schemas/SpriteSpawnRarityDto"},"nullable":true}},"additionalProperties":false},"SpriteSpawnRarityDto":{"type":"object","properties":{"rarity":{"type":"string","nullable":true},"sprites":{"type":"integer","format":"int32"},"weight":{"type":"number","format":"double"},"sharePercent":{"type":"number","format":"double"}},"additionalProperties":false},"SpriteVariantDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"variant":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"rarity":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"images":{"$ref":"#/components/schemas/SpriteImagesDto"},"baseWeight":{"type":"number","format":"double","nullable":true},"weight":{"type":"number","format":"double","nullable":true},"dropChancePercent":{"type":"number","format":"double","nullable":true},"boons":{"type":"array","items":{"$ref":"#/components/schemas/SpriteBoonRefDto"},"nullable":true}},"additionalProperties":false},"SpriteVersionDto":{"required":["version"],"type":"object","properties":{"version":{"type":"string","nullable":true},"generated":{"type":"string","nullable":true},"isCurrent":{"type":"boolean"},"familyCount":{"type":"integer","format":"int32"}},"additionalProperties":false},"SpritesResponseDto":{"type":"object","properties":{"gameVersion":{"type":"string","nullable":true},"generated":{"type":"string","nullable":true},"hotfixApplied":{"type":"boolean"},"isCurrent":{"type":"boolean"},"sprites":{"type":"array","items":{"$ref":"#/components/schemas/SpriteFamilyDto"},"nullable":true},"levelUpCurve":{"type":"array","items":{"$ref":"#/components/schemas/SpriteLevelDto"},"nullable":true},"events":{"type":"array","items":{"$ref":"#/components/schemas/SpriteEventDto"},"nullable":true},"spawnLists":{"type":"array","items":{"$ref":"#/components/schemas/SpriteSpawnListDto"},"nullable":true}},"additionalProperties":false},"StatTotalDto":{"type":"object","properties":{"total":{"type":"number","format":"double"},"perGame":{"type":"number","format":"double"}},"additionalProperties":false},"TeamEventGameDto":{"type":"object","properties":{"game":{"type":"integer","format":"int32"},"sessionId":{"type":"string","nullable":true},"endTime":{"type":"string","nullable":true},"stats":{"type":"object","additionalProperties":{"type":"number","format":"double"},"nullable":true}},"additionalProperties":false},"TeamEventStatsDetailDto":{"type":"object","properties":{"leaderboardRank":{"type":"integer","format":"int32"},"pointsEarned":{"type":"integer","format":"int32"},"gamesPlayed":{"type":"integer","format":"int32"},"teamAccountIds":{"type":"array","items":{"type":"string"},"nullable":true},"teamAccountDisplayNames":{"type":"array","items":{"type":"string"},"nullable":true},"stats":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/StatTotalDto"},"nullable":true},"games":{"type":"array","items":{"$ref":"#/components/schemas/TeamEventGameDto"},"nullable":true}},"additionalProperties":false},"TeamEventStatsDto":{"type":"object","properties":{"eventId":{"type":"string","nullable":true},"eventWindowId":{"type":"string","nullable":true},"teamIdentifier":{"type":"string","nullable":true},"statKey":{"type":"string","nullable":true},"statRank":{"type":"integer","format":"int32"},"totalTeams":{"type":"integer","format":"int32"},"updatedTime":{"type":"string","nullable":true},"team":{"$ref":"#/components/schemas/TeamEventStatsDetailDto"}},"additionalProperties":false},"UnverifiedRequirementDto":{"type":"object","properties":{"type":{"type":"string","nullable":true},"key":{"type":"string","nullable":true},"label":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"threshold":{"type":"number","format":"double"},"estimatedCurrentLevel":{"type":"number","format":"double"},"estimatedMet":{"type":"boolean"}},"additionalProperties":false},"VerifiedRequirementDto":{"type":"object","properties":{"token":{"type":"string","nullable":true},"label":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"tokenGroup":{"type":"string","nullable":true},"met":{"type":"boolean"}},"additionalProperties":false},"WeaponListItemDto":{"type":"object","properties":{"id":{"type":"string","nullable":true},"displayName":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"rarity":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"category":{"type":"string","nullable":true},"ammoType":{"type":"string","nullable":true},"triggerType":{"type":"string","nullable":true},"searchTags":{"type":"string","nullable":true},"inCurrentLootPool":{"type":"boolean"},"itemType":{"type":"string","nullable":true},"gamemodes":{"type":"array","items":{"type":"string"},"nullable":true},"patch":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"},"nullable":true},"weaponActorClass":{"type":"string","nullable":true},"stats":{"nullable":true},"images":{"nullable":true}},"additionalProperties":false}},"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key — free at https://api-fortnite.com (no credit card). Some player-scoped endpoints additionally need the player's own x-fortnite-token; see the docs."}}},"tags":[{"name":"Account","description":"Epic account lookup by ID, display name, display name resolution, and external auth providers."},{"name":"Aes","description":"AES key and mappings endpoints.\r\nGET /api/v1/aes and GET /api/v1/mappings are public.\r\nPOST /internal/aes/sync is Pi-only (X-Internal-Secret header)."},{"name":"Assets","description":"Game asset bundle endpoints (tournaments, shop)."},{"name":"BattlePass","description":"The battle pass: which cosmetics are in it, on which page, and what each costs in stars.\r\n            \r\nThis is the endpoint customers were asking for and we did not have. /api/v1/shop/battlepass\r\nreturns Battle Royale News MOTD despite its name, and /api/v1/season returns only the\r\nseason's dates — neither has ever described the pass itself."},{"name":"CalendarSeason","description":"Current Fortnite season information."},{"name":"Cosmetics","description":"Fortnite cosmetics — browse, search, and retrieve individual items."},{"name":"Crew","description":"Fortnite Crew subscription — current pack and historical packs."},{"name":"CustomMatch","description":"Custom match key distribution for Custom-tier clients."},{"name":"EventsV2","description":"Event leaderboards. All data is fetched from Epic's leaderboard service using service auth."},{"name":"FortniteGame","description":"Fortnite game data endpoints — inventory, keychain, receipts, version, privacy, and entitlements.\r\nEndpoints that modify or read private player data require x-fortnite-token."},{"name":"Friends","description":"Friends list, friend requests, blocklist, and mutual friends."},{"name":"Identity","description":"The universal Discord↔Epic identity graph. A player registers once via the /oauth\r\ndevice-code flow (which mints the token, so the Epic id is trustworthy), and any\r\nCustom-tier client can then resolve that Discord user to their Epic account. This is\r\nwhat lets a player link once and play in any scrim run through the API (Yunite model)."},{"name":"Map","description":"Fortnite map data, map images, and map history."},{"name":"News","description":"In-game news for Battle Royale, Save the World, and Creative modes."},{"name":"OAuth","description":"Epic Games OAuth — device code flow, authorization code flow, token refresh, and account linking.\r\nRate limiting applies to most endpoints."},{"name":"Parsing (File Upload)","description":"Replay file parsing — extract match statistics from .replay files."},{"name":"Playlists","description":"Fortnite playlists (game modes)."},{"name":"Profile","description":"Player profile: XP/level, ranked progress, game mode tracks, and Habanero leaderboards."},{"name":"Quests","description":"Player quest/challenge data. Requires x-fortnite-token."},{"name":"Replays (by Match ID)","description":"Tournament server replay download and parsing — retrieve and parse .replay files by match ID."},{"name":"Shop","description":"Item Shop and Battle Pass endpoints."},{"name":"Sprites","description":"Seasonal \"Sprites\" catalog (CH7 S3 extraction mechanic) — every sprite family and\r\nvariant with rarity, icons, boons, and drop weights. Everything is self-extracted\r\nfrom game data, with the live CloudStorage hotfix overlay applied to the weights\r\n(so Power-Hour / \"More Gem Sprites!\" style rotations show up without a game update)."},{"name":"Stats","description":"Player stats, bulk stats, and global leaderboards."},{"name":"TournamentTracker","description":"Tournament tracker and eligibility check endpoints. Requires x-fortnite-token."},{"name":"TournamentV1","description":"Tournament listings, sessions, and leaderboards.\r\nPlayer-specific endpoints require x-fortnite-token."},{"name":"Weapons","description":"Weapons, loot pool patches, and rarity definitions."}],"servers":[{"url":"https://prod.api-fortnite.com","description":"Production"}]}