{"info":{"title":"Fortnite Data API","version":"1.1.0","description":"<b>A public API to retrieve a list of Fortnite islands and their corresponding engagement metrics.</b>\n<br>\n<br>\n<br>\nUsage Notes / Limitations:\n* Historical data is limited to 7 days\n* Only data for public and discoverable Fortnite islands are available.\n* Islands need at least 5 unique players for the specified time interval for data to appear—otherwise, you'll get a null value.\n* Favorites and recommendations are not supported for some Epic-made games, so these fields will return 0.\n"},"openapi":"3.1.1","servers":[{"url":"https://api.fortnite.com/ecosystem/v1"},{"url":"/ecosystem/v1"}],"tags":[{"name":"Islands"},{"name":"Ecosystem"},{"name":"Genres"}],"paths":{"/islands":{"get":{"description":"Retrieves a sorted list of islands. The islands returned are sorted by initial release date in with newest releases first.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/AfterQuery"},{"$ref":"#/components/parameters/BeforeQuery"},{"$ref":"#/components/parameters/SizeQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IslandResponse"}}}}}}},"/islands/{code}":{"get":{"description":"Retrieves metadata for an island code.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IslandMetadataSummary"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/islands/{code}/metrics":{"get":{"description":"Retrieves usage metrics for an island code with a bucket interval size of days.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IslandMetricsResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}":{"get":{"description":"Retrieves usage metrics for an island code with buckets at the specified interval.\n* Retention is only available for day intervals and will be excluded from hour and minute intervals.\n* Average minutes per player is only available for day and hour intervals and will be excluded from minute intervals.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/MetricsListQuery"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterableIslandMetricsResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/peak-ccu":{"get":{"description":"Retrieves the number of peak concurrent players playing the island.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/favorites":{"get":{"description":"Retrieves the number of times the island was added to a player's favorites during the interval.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/minutes-played":{"get":{"description":"Retrieves the total amount of time in minutes that players spent playing the island.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/average-minutes-per-player":{"get":{"description":"Retrieves the average amount of time in minutes that players spent playing the island.\nAverage minutes per player is only available for day intervals. Requests for Average minutes per player for hour or minute interval will result in a 404 not found response.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/recommendations":{"get":{"description":"Retrieves the number of times the island was recommended by a player.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/unique-players":{"get":{"description":"Retrieves the number of unique players playing the island in the time period.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/plays":{"get":{"description":"Retrieves the number of times players started to play an island in time period. If a player started an island session multiple times during the time period, each play is counted.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/metrics/{interval}/retention":{"get":{"description":"Retrieves the number of users the island retained over the last 7 days and 1 day.\n* Retention is only available for day intervals. Requests for retention for an hour or minute interval will result in a 404 not found response.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetentionResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/islands/{code}/rankings":{"get":{"description":"Retrieves an island's genre rankings. When both `from` and `to` are omitted, returns only the\nlatest hourly snapshot (a single record). Supply `from`/`to` to return an hourly series over the\nrange, capped at the 7-day retention window.\n","tags":["Islands"],"parameters":[{"$ref":"#/components/parameters/IslandCodePath"},{"$ref":"#/components/parameters/RankingsFromQuery"},{"$ref":"#/components/parameters/RankingsToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IslandRankingResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The island with the specified code was not found or is not enabled for data access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/genres":{"get":{"description":"Retrieves the list of genres and their slugs.\n","tags":["Genres"],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenreListResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/genres/{slug}/rankings":{"get":{"description":"Retrieves the island ranking leaderboard for a genre at a point in time.\n","tags":["Genres"],"parameters":[{"$ref":"#/components/parameters/GenreSlugPath"},{"$ref":"#/components/parameters/AtQuery"},{"$ref":"#/components/parameters/AfterQuery"},{"$ref":"#/components/parameters/BeforeQuery"},{"$ref":"#/components/parameters/SizeQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenreRankingResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The genre with the specified slug was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/metrics/{interval}":{"get":{"description":"Retrieves ecosystem-wide usage metrics with buckets at the specified interval.\n","tags":["Ecosystem"],"parameters":[{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/EcosystemMetricsListQuery"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterableEcosystemMetricsResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/metrics/{interval}/in-client-peak-ccu":{"get":{"description":"Retrieves the peak number of clients connected across all of Fortnite.\n","tags":["Ecosystem"],"parameters":[{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/metrics/{interval}/in-match-peak-ccu":{"get":{"description":"Retrieves the peak number of concurrent players actively in a match across all of Fortnite.\n","tags":["Ecosystem"],"parameters":[{"$ref":"#/components/parameters/IntervalPath"},{"$ref":"#/components/parameters/FromQuery"},{"$ref":"#/components/parameters/ToQuery"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricResponse"}}}},"400":{"description":"The input parameters were invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Please try again later.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"parameters":{"AfterQuery":{"schema":{"type":"string"},"required":false,"name":"after","description":"Results use cursor-based pagination in order to retrieve the list in batches. To retrieve a cursor position to use,\nfirst make a request with these fields unspecified. You'll then find cursor values in the response.\n<br>\n<br>\nReturns the results after the specified cursor position.\n","in":"query"},"BeforeQuery":{"schema":{"type":"string"},"required":false,"name":"before","description":"Returns the results before the specified cursor position.","in":"query"},"FromQuery":{"schema":{"type":"string","format":"date-time"},"required":false,"name":"from","description":"* Example: 2025-04-29T00:00:00.000Z\n<br>\n<br>\n* Specifies the start of the date range. The `from` is inclusive, meaning the given date/time will\nbe included in the results.\n<br>\n* When the interval is days, the default is the beginning of the previous day. When the interval is hours, \nthe default is `now - 24 hours`. When the interval is minutes, the default is `now - 60 minutes`.\n","in":"query"},"IslandCodePath":{"schema":{"type":"string"},"required":true,"name":"code","description":"A valid island code.","in":"path"},"GenreSlugPath":{"schema":{"type":"string"},"required":true,"name":"slug","description":"A URL-friendly genre slug, e.g. `simulation-tycoon`.","in":"path"},"AtQuery":{"schema":{"type":"string","format":"date-time"},"required":false,"name":"at","description":"* Example: 2026-07-13T18:00:00.000Z\n<br>\n* Point-in-time snapshot to read, snapped to the hour. Defaults to the latest available snapshot.\nMust not be in the future or more than 7 days old.\n","in":"query"},"MetricsListQuery":{"style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["averageMinutesPerPlayer","peakCCU","favorites","minutesPlayed","recommendations","plays","uniquePlayers","retention"]}},"required":false,"name":"metrics","description":"Metrics to include in the response. May be specified multiple times.","in":"query"},"EcosystemMetricsListQuery":{"style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["inMatchPeakCCU","inClientPeakCCU"]}},"required":false,"name":"metrics","description":"Metrics to include in the response. May be specified multiple times.","in":"query"},"IntervalPath":{"schema":{"type":"string","enum":["day","hour","minute"]},"required":true,"name":"interval","description":"The size of the interval buckets returned. When the intervals are minutes, the interval buckets will be returned\nat every 10 minute interval.\n","in":"path"},"SizeQuery":{"schema":{"type":"number","default":100,"minimum":1,"maximum":1000},"required":false,"name":"size","description":"The maximum number of results to return.","in":"query"},"ToQuery":{"schema":{"type":"string","format":"date-time"},"required":false,"name":"to","description":"* Example: 2025-04-30T00:00:00.000Z\n<br>\n<br>\n* Specifies the end of the date range. The `to` is exclusive, meaning the given date/time will not\nbe included in the results.\n","in":"query"},"RankingsFromQuery":{"schema":{"type":"string","format":"date-time"},"required":false,"name":"from","description":"* Example: 2026-07-14T00:00:00.000Z\n<br>\n<br>\n* Start of the hourly range (inclusive) of ranking snapshots to return.\n<br>\n* When BOTH `from` and `to` are omitted, this endpoint returns only the latest hourly snapshot\n(a single record) — NOT a time series and NOT an interval-based default window. Supply `from`/`to`\nto get an hourly series over the range, capped at the 7-day retention window.\n","in":"query"},"RankingsToQuery":{"schema":{"type":"string","format":"date-time"},"required":false,"name":"to","description":"* Example: 2026-07-14T18:00:00.000Z\n<br>\n<br>\n* End of the hourly range (exclusive). See `from`: omitting both `from` and `to` yields only the\nlatest snapshot.\n","in":"query"}},"schemas":{"ErrorResponse":{"type":"object","required":["errorCode","errorMessage","uuid"],"properties":{"errorCode":{"type":"string","description":"A programmatic error code.","example":"errors.com.epicgames.not_found"},"errorMessage":{"type":"string","description":"A human readable version of the error reason."},"uuid":{"type":"string","format":"uuid","description":"The unique identifier for the error event."}}},"IslandResponse":{"type":"object","required":["data","links","meta"],"properties":{"links":{"$ref":"#/components/schemas/PaginationLinks"},"meta":{"$ref":"#/components/schemas/PaginationMetadata"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PaginatedIslandMetadataSummary"}}}},"PaginatedIslandMetadataSummary":{"type":"object","allOf":[{"$ref":"#/components/schemas/IslandMetadataSummary"},{"$ref":"#/components/schemas/IslandPaginationMetadata"}]},"IslandPaginationMetadata":{"type":"object","required":["meta"],"properties":{"meta":{"type":"object","required":["page"],"properties":{"page":{"type":"object","required":["cursor"],"properties":{"cursor":{"type":"string","description":"Cursor identifier for this record to use with pagination. Can be passed as the value for the \"before\" or \"after\" cursor query parameters.","example":"c2V0X2JyX3BsYXlsaXN0cw=="}}}}}}},"IslandMetadataSummary":{"type":"object","required":["code","title","type","tags"],"properties":{"code":{"type":"string","description":"The island's code.","example":"1234-1234-1234"},"creatorCode":{"type":"string","description":"The island creator's code.","example":"fortnite"},"displayName":{"type":"string","description":"A friendly name that is used to refer to Epic first party playlist codes. \nThe display name can be used in place of the island playlist code any place in the API that takes an island code parameter.\n","example":"battle-royale"},"title":{"type":"string","description":"The island's title.","example":"Fortnite Island"},"category":{"type":"string","description":"Island category which for islands utilizing a brand will be the brand code.","example":"LEGO"},"createdIn":{"type":"string","description":"How the island was authored.","example":"UEFN"},"tags":{"type":"array","description":"A list of tags a creator has attributed to their island (ex: 1v1).","items":{"type":"string","example":"1v1"}}}},"IslandMetricsResponse":{"type":"object","required":["averageMinutesPerPlayer","peakCCU","favorites","minutesPlayed","recommendations","plays","uniquePlayers"],"properties":{"averageMinutesPerPlayer":{"description":"The average amount of time in minutes players spent playing the island.","$ref":"#/components/schemas/Metrics"},"peakCCU":{"description":"The peak number of concurrent players playing the island.","$ref":"#/components/schemas/Metrics"},"favorites":{"description":"The number of times the island was added to a player's favorites.","$ref":"#/components/schemas/Metrics"},"minutesPlayed":{"description":"The total amount of time in minutes players spent playing the island.","$ref":"#/components/schemas/Metrics"},"recommendations":{"description":"The number of times the island was recommended by a player.","$ref":"#/components/schemas/Metrics"},"retention":{"description":"The user retention data for the island during the time period.","type":"array","items":{"$ref":"#/components/schemas/Retention"}},"plays":{"description":"The number of unique plays the island had during the time period. A player playing multiple times during the\ntime period would count as a unique play each time.\n","$ref":"#/components/schemas/Metrics"},"uniquePlayers":{"description":"The number of unique players playing the island.","$ref":"#/components/schemas/Metrics"}}},"FilterableIslandMetricsResponse":{"type":"object","properties":{"averageMinutesPerPlayer":{"description":"The average amount of time in minutes players spent playing the island.","$ref":"#/components/schemas/Metrics"},"peakCCU":{"description":"The peak number of concurrent players playing the island.","$ref":"#/components/schemas/Metrics"},"favorites":{"description":"The number of times the island was added to a player's favorites.","$ref":"#/components/schemas/Metrics"},"minutesPlayed":{"description":"The total amount of time in minutes players spent playing the island.","$ref":"#/components/schemas/Metrics"},"recommendations":{"description":"The number of times the island was recommended by a player.","$ref":"#/components/schemas/Metrics"},"retention":{"description":"The user retention data for the island during the time period.","type":"array","items":{"$ref":"#/components/schemas/Retention"}},"plays":{"description":"The number of unique plays the island had during the time period. A player playing multiple times during the\ntime period would count as a unique play each time.\n","$ref":"#/components/schemas/Metrics"},"uniquePlayers":{"description":"The number of unique players playing the island.","$ref":"#/components/schemas/Metrics"}}},"EcosystemMetricsResponse":{"type":"object","required":["inMatchPeakCCU","inClientPeakCCU"],"properties":{"inMatchPeakCCU":{"description":"The peak number of concurrent players actively in a match across all of Fortnite.","$ref":"#/components/schemas/Metrics"},"inClientPeakCCU":{"description":"The peak number of clients connected across all of Fortnite.","$ref":"#/components/schemas/Metrics"}}},"FilterableEcosystemMetricsResponse":{"type":"object","properties":{"inMatchPeakCCU":{"description":"The peak number of concurrent players actively in a match across all of Fortnite.","$ref":"#/components/schemas/Metrics"},"inClientPeakCCU":{"description":"The peak number of clients connected across all of Fortnite.","$ref":"#/components/schemas/Metrics"}}},"MetricResponse":{"description":"The metric values at each time interval for the period.\n","type":"object","properties":{"intervals":{"type":"array","items":{"$ref":"#/components/schemas/MetricValue"}}}},"Metrics":{"description":"The metric values at each time interval for the period.\n","type":"array","items":{"$ref":"#/components/schemas/MetricValue"}},"MetricValue":{"description":"A metric value and the interval date/time.","properties":{"value":{"type":["number","null"],"description":"The value of the metric, a null value means no data is present for that interval.","example":50},"timestamp":{"type":"string","description":"The date/time of the interval.","format":"date-time","example":"2025-06-01T01:20:00.000Z"}}},"PaginationLinks":{"type":"object","properties":{"prev":{"type":["string","null"],"format":"url","description":"Path to the previous page of results if a previous page is available. Will be null when no previous pages are available.","example":"/ecosystem/v1/islands?size=100&before=c2V0X2JyX3BsYXlsaXN0cw=="},"next":{"type":["string","null"],"format":"url","description":"Path to the next page of results if another page is available. Will be null when no more pages available.","example":"/ecosystem/v1/islands?size=100&after=c2V0X2JyX3BsYXlsaXN0cw=="}}},"GenreRankingLinks":{"type":"object","description":"Pagination links for a genre ranking page, pointing at this genre's rankings endpoint.","properties":{"prev":{"type":["string","null"],"format":"url","description":"Path to the previous page of results if a previous page is available. Will be null when no previous pages are available.","example":"/ecosystem/v1/genres/simulation-tycoon/rankings?size=100&before=OTk="},"next":{"type":["string","null"],"format":"url","description":"Path to the next page of results if another page is available. Will be null when no more pages available.","example":"/ecosystem/v1/genres/simulation-tycoon/rankings?size=100&after=OTk="}}},"PaginationMetadata":{"type":"object","required":["count","page"],"properties":{"count":{"type":"number","description":"The number of results being returned.","example":100},"page":{"type":"object","properties":{"prevCursor":{"type":["string","null"],"description":"The pagination cursor used to request the previous page of results. Will be null when no previous pages available.","example":"c2V0X2JyX3BsYXlsaXN0cw=="},"nextCursor":{"type":["string","null"],"description":"The pagination cursor used to request the next page of results. Will be null when no more pages available.","example":"c2V0X2JyX3BsYXlsaXN0cw=="}}}}},"RetentionResponse":{"description":"The retention values at each time interval for the period.\n","type":"object","properties":{"intervals":{"type":"array","items":{"$ref":"#/components/schemas/Retention"}}}},"Retention":{"type":"object","properties":{"d1":{"type":["number","null"],"description":"The number of players retained in from the previous day."},"d7":{"type":["number","null"],"description":"The number of players retained from the previous 7 days."},"timestamp":{"type":"string","description":"The date/time of the interval.","format":"date-time","example":"2025-06-01T01:20:00.000Z"}}},"GenreListResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["slug","displayName"],"properties":{"slug":{"type":"string","description":"A URL-friendly genre slug.","example":"simulation-tycoon"},"displayName":{"type":"string","description":"The genre's human-readable display name.","example":"Simulation & Tycoon"}}}}}},"GenreRankingResponse":{"type":"object","required":["data","links","meta"],"properties":{"links":{"$ref":"#/components/schemas/GenreRankingLinks"},"meta":{"$ref":"#/components/schemas/GenreRankingMetadata"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GenreRankingItem"}}}},"GenreRankingMetadata":{"type":"object","required":["count","total","snapshotAvailable","snapshot","page"],"properties":{"count":{"type":"number","description":"The number of results being returned in this page.","example":100},"total":{"type":"integer","description":"The total number of ranked islands in this genre for the resolved snapshot, across all pages, so consumers do not need to page to the end to learn the genre's size.","example":58836},"snapshotAvailable":{"type":"boolean","description":"Whether a ranking snapshot was recorded for the resolved hour. `false` means that hour was never imported (a gap/outage), which distinguishes it from a genuinely empty genre at an hour that was imported. Use `total` to tell how many islands the resolved hour holds.","example":true},"snapshot":{"type":["string","null"],"format":"date-time","description":"The hourly snapshot that was resolved and read, snapped to the hour — either the requested `at` or the latest available snapshot. This is `null` only when no hour could be resolved at all (no `at` was supplied and no snapshots exist); it is still populated when `snapshotAvailable` is `false`, since the requested hour is echoed back even though nothing was imported for it.","example":"2026-07-22T15:00:00.000Z"},"page":{"type":"object","properties":{"prevCursor":{"type":["string","null"],"description":"The pagination cursor used to request the previous page of results. Will be null when no previous pages available.","example":"c2V0X2JyX3BsYXlsaXN0cw=="},"nextCursor":{"type":["string","null"],"description":"The pagination cursor used to request the next page of results. Will be null when no more pages available.","example":"c2V0X2JyX3BsYXlsaXN0cw=="}}}}},"GenreRankingItem":{"type":"object","allOf":[{"type":"object","required":["islandCode","rank"],"properties":{"islandCode":{"type":"string","description":"The island's code.","example":"3225-0366-8885"},"rank":{"type":"integer","description":"The island's rank within the genre.","example":4}}},{"$ref":"#/components/schemas/IslandPaginationMetadata"}]},"IslandRankingResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["timestamp","genres"],"properties":{"timestamp":{"type":"string","format":"date-time","description":"Snapshot time (hour bucket), ISO 8601.","example":"2026-07-14T18:00:00.000Z"},"genres":{"type":"array","items":{"type":"object","required":["genreSlug","genre","rank"],"properties":{"genreSlug":{"type":"string","description":"A URL-friendly genre slug.","example":"simulation-tycoon"},"genre":{"type":"string","description":"The genre's human-readable display name.","example":"Simulation & Tycoon"},"rank":{"type":"integer","description":"The island's rank within the genre.","example":4}}}}}}}}}},"securitySchemes":{"Auth":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.epicgames.dev/epic/oauth/v1/token","scopes":{}}}}}}}