{
  "openapi": "3.0.1",
  "info": {
    "title": "IdleClansLeaderboardsService",
    "version": "v1"
  },
  "paths": {
    "/api/Chat/recent": {
      "get": {
        "tags": [
          "Chat"
        ],
        "summary": "Retrieves the public chat history for various channels.",
        "parameters": [
          {
            "name": "generalDisabled",
            "in": "query",
            "description": "If true, excludes the General channel from the result.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "tradeDisabled",
            "in": "query",
            "description": "If true, excludes the Trade channel from the result.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "helpDisabled",
            "in": "query",
            "description": "If true, excludes the Help channel from the result.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "clanHubDisabled",
            "in": "query",
            "description": "If true, excludes the ClanHub channel from the result.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "combatLFGDisabled",
            "in": "query",
            "description": "If true, excludes the CombatLFG channel from the result.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "raidLFGDisabled",
            "in": "query",
            "description": "If true, excludes the RaidLFG channel from the result.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "minutes",
            "in": "query",
            "description": "How many minutes to look back (20-60, default 20).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": { }
                    }
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": { }
                    }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": { }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/api/Clan/logs/clan/{name}": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Retrieves the logs for a specific clan.",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "The name of the clan.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "The number of logs to skip.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of logs to retrieve.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested clan logs.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the requested limit exceeds the maximum allowed limit."
          },
          "404": {
            "description": "If no logs are found for the specified clan."
          }
        }
      }
    },
    "/api/Clan/logs/clan/{clanName}/{playerName}": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Retrieves the logs for a specific player within a clan.",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The name of the clan.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "playerName",
            "in": "path",
            "description": "The name of the player.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "The number of logs to skip.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of logs to retrieve.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested player logs within the clan.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the requested limit exceeds the maximum allowed limit."
          },
          "404": {
            "description": "If no logs are found for the specified player within the clan."
          }
        }
      }
    },
    "/api/Clan/recruitment/{clanName}": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Retrieves the recruitment information for a specific clan.",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The name of the clan (a clan tag also resolves).",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "byTag",
            "in": "query",
            "description": "Set when the supplied value is known to be a clan TAG. Tags and names\r\n            share one string space, so a tag can equal a different clan's name; this resolves the tag\r\n            owner first instead of the name owner.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the recruitment information for the clan.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ClanRecruitmentPageEntry"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanRecruitmentPageEntry"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanRecruitmentPageEntry"
                }
              }
            }
          },
          "404": {
            "description": "If the specified clan is not found."
          }
        }
      }
    },
    "/api/Clan/recruitments": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Retrieves the recruitment information for multiple clans in one request (batch).",
        "parameters": [
          {
            "name": "clanNames",
            "in": "query",
            "description": "Clan names (or tags) to look up (repeat the parameter per clan). Maximum 20.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the recruitment information for the clans that were found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanRecruitmentPageEntry"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanRecruitmentPageEntry"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanRecruitmentPageEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If no clan names were provided or more than 20 were requested."
          }
        }
      }
    },
    "/api/Clan/most-active": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Searches clans, ordered by activity score (highest first).",
        "parameters": [
          {
            "name": "clanQueryInfoJson",
            "in": "query",
            "description": "URL-encoded JSON object of filters. Every field is optional, and an omitted field means\r\n\"do not filter on it\":\r\n`MinimumActivityScore` (number), `MinimumTotalLevel` / `MaximumTotalLevel`\r\n(bounds on the clan's own total level requirement), `Language` (English name, e.g.\r\n\"Finnish\"), `IsRecruiting` (omit for either, true for recruiting only, false for\r\nnon-recruiting only), `Category` (1 Casual, 2 Competitive, 3 Hardcore),\r\n`GameMode` (1 Default, 2 Ironman, 3 GroupIronman), `ExcludeFullClans` (defaults\r\nto true when IsRecruiting is true), `MaxInactivityDays` (1-365, default 30),\r\n`Limit` (1-100, default 25) and `Skip` for paging.",
            "schema": {
              "type": "string",
              "default": "{}"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the matching clans; an empty array is a valid result.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MostActiveClanResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MostActiveClanResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MostActiveClanResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the provided JSON is invalid."
          }
        }
      }
    },
    "/api/Clan/{clanName}/experience": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Gets experience summary for a clan over a specified time period.",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The clan name.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hours",
            "in": "query",
            "description": "Number of hours to look back (default 72). Rounded up to the nearest supported\r\n            window: 1, 3, 6, 12, 24, 48, 72 or 168 (e.g. 100 becomes 168). The response's periodHours reports\r\n            the window actually used.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 72
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ClanExperienceSummary"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanExperienceSummary"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanExperienceSummary"
                }
              }
            }
          },
          "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/Clan/{clanName}/experience/timeline": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Gets experience timeline for a clan (interval-by-interval breakdown).",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The clan name.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hours",
            "in": "query",
            "description": "Number of hours to look back (default 72). Rounded up to the nearest supported\r\n            window: 1, 3, 6, 12, 24, 48, 72 or 168 (e.g. 100 becomes 168).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 72
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanExperienceInterval"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanExperienceInterval"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanExperienceInterval"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/Clan/experience/top": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Gets top clans by total experience gained, including per-skill breakdown.",
        "parameters": [
          {
            "name": "hours",
            "in": "query",
            "description": "Hours to look back (default 24). Rounded up to the nearest supported\r\n            window: 1, 3, 6, 12, 24, 48, 72 or 168 (e.g. 100 becomes 168).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 24
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Max results (1-100, default 25).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "gameMode",
            "in": "query",
            "description": "Optional. \"Default\", \"Ironman\" or \"GroupIronman\". Omit for all modes.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanExperienceRanking"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanExperienceRanking"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanExperienceRanking"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/Clan/experience/top/{skill}": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Gets top clans for a specific skill.",
        "parameters": [
          {
            "name": "skill",
            "in": "path",
            "description": "The skill name (e.g., \"Mining\", \"Woodcutting\").",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hours",
            "in": "query",
            "description": "Hours to look back (default 24). Rounded up to the nearest supported\r\n            window: 1, 3, 6, 12, 24, 48, 72 or 168 (e.g. 100 becomes 168).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 24
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Max results (1-100, default 25).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "gameMode",
            "in": "query",
            "description": "Optional. \"Default\", \"Ironman\" or \"GroupIronman\". Omit for all modes.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanSkillRanking"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanSkillRanking"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanSkillRanking"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/Clan/{clanName}/experience/player/{username}": {
      "get": {
        "tags": [
          "Clan"
        ],
        "summary": "Gets a specific player's contributions within a clan.",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The clan name.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "username",
            "in": "path",
            "description": "The player's username.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hours",
            "in": "query",
            "description": "Number of hours to look back (default 72). Rounded up to the nearest supported\r\n            window: 1, 3, 6, 12, 24, 48, 72 or 168 (e.g. 100 becomes 168). The response's periodHours reports\r\n            the window actually used.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 72
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerClanContribution"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerClanContribution"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerClanContribution"
                }
              }
            }
          },
          "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/ClanCup/standings/{clanName}": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves a clan's standings for all objectives in the Clan Cup.",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The name of the clan.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gameMode",
            "in": "query",
            "description": "The game mode for which to retrieve standings.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "previousCup",
            "in": "query",
            "description": "Optionally set to true to get standings for the previous cup",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the clan's standings for all objectives.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanCupObjectiveStandingBase"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanCupObjectiveStandingBase"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanCupObjectiveStandingBase"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the provided date format is invalid.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "If no standings are found for the specified clan, game mode, and date.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/ClanCup/standing/{clanName}": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves a clan's score and current standing in a given ClanCupObjectiveType.",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The name of the clan.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gameMode",
            "in": "query",
            "description": "The game mode for which to retrieve the standing.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "objectiveType",
            "in": "query",
            "description": "The type of ClanCupObjective.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "previousCup",
            "in": "query",
            "description": "Optionally set to true to get standings for the previous cup",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the clan's standing.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreBasedStanding"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreBasedStanding"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreBasedStanding"
                }
              }
            }
          },
          "400": {
            "description": "If the provided date format is invalid.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "If the clan or objective is 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/ClanCup/rewards/{clanName}/previous": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "The clan credits ACTUALLY awarded to a clan for the previous cup, read from the reward\r\nrecord written when rewards were applied. 404 until the previous cup's rewards have been\r\nprocessed. Prefer this over recomputing credits from standings ranks (ties diverge).",
        "parameters": [
          {
            "name": "clanName",
            "in": "path",
            "description": "The name of the clan (current display name or handle).",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "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/ClanCup/top-clans/current": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves the current top 10 clans in every ClanCupObjectiveType for the currently active cup.",
        "parameters": [
          {
            "name": "gameMode",
            "in": "query",
            "description": "The game mode for which to retrieve top clans.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of top clans for each objective in the current cup.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ClanCupTopClans"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanCupTopClans"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanCupTopClans"
                }
              }
            }
          }
        }
      }
    },
    "/api/ClanCup/top-clans/previous": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves the top 10 clans in every ClanCupObjectiveType for the previous cup.",
        "parameters": [
          {
            "name": "gameMode",
            "in": "query",
            "description": "The game mode for which to retrieve top clans.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of top clans for each objective in the previous cup.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ClanCupTopClans"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanCupTopClans"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClanCupTopClans"
                }
              }
            }
          }
        }
      }
    },
    "/api/ClanCup/top-clans/date": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves the top 10 clans in every ClanCupObjectiveType for a cup with the given end date.",
        "parameters": [
          {
            "name": "gameMode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "The end date of the clan cup.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of top clans for each objective.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanCupTopClansInScoreObjectives"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanCupTopClansInScoreObjectives"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ClanCupTopClansInScoreObjectives"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/ClanCup/leaderboard/{gameMode}/totalPoints": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves the overall leaderboard for a specific game mode, showing total points for each clan.",
        "parameters": [
          {
            "name": "gameMode",
            "in": "path",
            "description": "The game mode to retrieve the leaderboard for (e.g., \"Default\", \"Ironman\").",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "query",
            "description": "Optional. The year to filter results by.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "description": "Optional. The month to filter results by.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Optional. The maximum number of results to return. Default is 10, maximum is 100.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/ClanCup/leaderboard/{gameMode}/{category}": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves the leaderboard for a specific category within a game mode.",
        "parameters": [
          {
            "name": "gameMode",
            "in": "path",
            "description": "The game mode to retrieve the leaderboard for (e.g., \"Default\", \"Ironman\").",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "path",
            "description": "The category to retrieve the leaderboard for (e.g., \"Woodcutting\", \"Cooking\").",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "query",
            "description": "Optional. The year to filter results by.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "description": "Optional. The month to filter results by.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Optional. The maximum number of results to return. Default is 10, maximum is 100.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/ClanCup/leaderboard/{gameMode}/clans/{clanName}": {
      "get": {
        "tags": [
          "ClanCup"
        ],
        "summary": "Retrieves the standing for a specific clan in a given game mode.",
        "parameters": [
          {
            "name": "gameMode",
            "in": "path",
            "description": "The game mode to retrieve the clan standing for (e.g., \"Default\", \"Ironman\").",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clanName",
            "in": "path",
            "description": "The name of the clan to retrieve the standing for.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "query",
            "description": "Optional. The year to filter results by.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "description": "Optional. The month to filter results by.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/Configuration/build-versions": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "summary": "Retrieves the required and latest build versions from the configuration.",
        "responses": {
          "200": {
            "description": "Returns the build version information.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/BuildVersionInfo"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildVersionInfo"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildVersionInfo"
                }
              }
            }
          },
          "404": {
            "description": "If the build version information is 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/Configuration/market-settings": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "summary": "Retrieves the player market economy settings: the seller-side tax percentage and the\r\nbuy/sell offer slot caps for premium and non-premium players.",
        "description": "Intended for tooling built on the PlayerMarket endpoints. The tax is charged to the SELLER on\r\na completed trade (buyers pay nothing), so a post-tax margin is\r\n`sellPrice * (1 - sellTaxPercentage / 100) - buyPrice`. Offer slots are shared between\r\nbuy and sell offers, which makes profit-per-slot the meaningful ranking for flipping.\r\nThese values are live-editable server-side; poll rather than hardcoding them.",
        "responses": {
          "200": {
            "description": "Returns the market settings.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MarketSettingsInfo"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketSettingsInfo"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketSettingsInfo"
                }
              }
            }
          },
          "404": {
            "description": "If the settings document could not be read.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/Configuration/game-data": {
      "get": {
        "tags": [
          "Configuration"
        ],
        "summary": "The full game configuration. minVersion is the lowest ConfigVersion\r\nthe caller accepts: a client that has just been told a newer version exists passes it\r\nso a not-yet-expired cache cannot serve the previous config. Omit it for the current\r\nversion.",
        "parameters": [
          {
            "name": "minVersion",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/JToken"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/JToken"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/JToken"
                  }
                }
              }
            }
          },
          "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/Items/metadata": {
      "get": {
        "tags": [
          "Items"
        ],
        "summary": "Lightweight metadata for every item in this environment's item catalogue, with localized\r\nEnglish display names.",
        "description": "The data comes from the same item configuration the game servers of THIS environment run\r\non (stage returns stage content), so tooling built on it always matches what is actually\r\ndeployed. Item ids are stable; names can change with localization updates.",
        "responses": {
          "200": {
            "description": "Returns the item metadata list.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemMetadata"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemMetadata"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemMetadata"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/Leaderboard/profile/{leaderboardName}/{name}": {
      "get": {
        "tags": [
          "Leaderboard"
        ],
        "summary": "Fetches the profile of an entity (player or clan) by their name.",
        "parameters": [
          {
            "name": "leaderboardName",
            "in": "path",
            "description": "Name of the leaderboard (e.g \"players:default\" to look up a player in the default game mode and \"players:ironman\" to look up an ironman).",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "path",
            "description": "Name of the entity.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the entity profile"
          },
          "404": {
            "description": "If the entity profile is not found"
          }
        }
      }
    },
    "/api/Leaderboard/top/{leaderboardName}/{name}": {
      "get": {
        "tags": [
          "Leaderboard"
        ],
        "summary": "Gets a range of entities (players or clans) in the specified leaderboard field. No more than 100 entities can be queried at a time.",
        "parameters": [
          {
            "name": "leaderboardName",
            "in": "path",
            "description": "Name of the leaderboard (e.g \"players:default\" to look up players in the default game mode and \"players:ironman\" to query ironman leaderboards).",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "path",
            "description": "Name of the stat (e.g. \"total_level\", \"attack\" or \"reckoning_of_the_gods\").",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startCount",
            "in": "query",
            "description": "The starting position for the entities list.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "maxCount",
            "in": "query",
            "description": "The ending position for the  entities list.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/Milestone/recent": {
      "get": {
        "tags": [
          "Milestone"
        ],
        "summary": "Global \"latest milestones\" feed (website landing page).",
        "description": "Newest first; `count` is capped at 100 (the full retention of the global feed).\r\n            \r\n`username` and `clan` are immutable handles — use them for profile links/lookups.\r\n`displayName`/`clanDisplayName` are only set when the player/clan has renamed and the\r\ncurrent in-game name differs from the handle; they are null for everyone else, so\r\nnull means \"show the handle\", not \"name unknown\".",
        "parameters": [
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MilestoneRecord"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MilestoneRecord"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MilestoneRecord"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/news/latest": {
      "get": {
        "tags": [
          "News"
        ],
        "parameters": [
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/Player/clan-logs/{name}": {
      "get": {
        "tags": [
          "Player"
        ],
        "summary": "Retrieves the logs for a specific player from all clans.",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "The name of the player.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "The number of logs to skip.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of logs to retrieve.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested player logs from all clans.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Log"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the requested limit exceeds the maximum allowed limit."
          },
          "404": {
            "description": "If no logs are found for the specified player."
          }
        }
      }
    },
    "/api/Player/profile/{name}": {
      "get": {
        "tags": [
          "Player"
        ],
        "summary": "Retrieves the profile for a specific player.",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "The name of the player.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "localize",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested player profile.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerProfile"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerProfile"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerProfile"
                }
              }
            }
          },
          "404": {
            "description": "If the player profile is not found."
          }
        }
      }
    },
    "/api/Player/profiles": {
      "get": {
        "tags": [
          "Player"
        ],
        "summary": "Retrieves the profiles of multiple players in one request (batch).",
        "parameters": [
          {
            "name": "usernames",
            "in": "query",
            "description": "Usernames to look up (repeat the parameter per name). Maximum 20.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "localize",
            "in": "query",
            "description": "Whether upgrade names are localized.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the player profiles that were found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PlayerProfile"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PlayerProfile"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PlayerProfile"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If no usernames were provided or more than 20 were requested."
          }
        }
      }
    },
    "/api/Player/profile/simple/{username}": {
      "get": {
        "tags": [
          "Player"
        ],
        "summary": "Retrieves a simple profile for a specific player.",
        "parameters": [
          {
            "name": "username",
            "in": "path",
            "description": "The username of the player.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested simple player profile.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SimplePlayerProfile"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SimplePlayerProfile"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SimplePlayerProfile"
                }
              }
            }
          },
          "404": {
            "description": "If the player profile is not found."
          }
        }
      }
    },
    "/api/Player/activities": {
      "get": {
        "tags": [
          "Player"
        ],
        "summary": "Retrieves activities for multiple players (batch).",
        "parameters": [
          {
            "name": "usernames",
            "in": "query",
            "description": "List of usernames to look up.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the player activities.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/PlayerActivity"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/PlayerActivity"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/PlayerActivity"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If no usernames provided or too many requested."
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/latest/{itemId}": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Gets the latest prices for a specific item, including the lowest price, highest price, and optionally the average price.",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The ID of the item to get the latest prices for.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeAveragePrice",
            "in": "query",
            "description": "If true, include the average price of the item from the past 24 hours.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/latest/comprehensive/{itemId}": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Retrieves detailed price information for a specific item.",
        "description": "This endpoint provides comprehensive price details for a given item, including:\r\n- The top 10 lowest prices with their corresponding volumes\r\n- The top 10 highest prices with their corresponding volumes\r\n- The average price of the item over the past 1 day, 7 days, and 30 days\r\n- The trade volume of the item over the past 1 day\r\n            \r\nThe prices and volumes are retrieved from the market offer collections and are based on the current state of the market.\r\nThe average prices and trade volume are calculated using historical trade records within the specified time ranges.\r\n            \r\nUse this endpoint to gain insights into the price distribution, average prices, and recent trade activity of an item.",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The ID of the item to retrieve price details for.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the detailed price information for the item."
          },
          "400": {
            "description": "If the itemId is invalid or missing."
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/latest": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Gets the latest prices for all items, including the lowest price, highest price, and optionally the average price.",
        "parameters": [
          {
            "name": "includeAveragePrice",
            "in": "query",
            "description": "If true, include the average price of each item from the past 24 hours.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/history/{itemId}": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Retrieves the price history of a specific item over a given period.",
        "description": "If you need price history for many items, consider using the bulk endpoint \r\nGET /api/PlayerMarket/items/prices/history instead, which returns all items in a single request.",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The ID of the item to get price history for.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "period",
            "in": "query",
            "description": "The period for which to retrieve the price history (supported: '1d', '7d', '30d', '1y').",
            "schema": {
              "type": "string",
              "default": "1d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/history": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Retrieves the price history of all traded items over a given period.",
        "description": "This endpoint is recommended when you need price history for multiple items, as it returns all items \r\nin a single request. Results are cached and grouped by item ID for convenient consumption.",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "The period for which to retrieve the price history (supported: '1d', '7d', '30d', '1y').",
            "schema": {
              "type": "string",
              "default": "1d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/summary": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Retrieves a compact activity summary for every traded item over a given period.",
        "description": "Prefer this over /items/prices/history when you want an overview of the whole market rather\r\nthan a detailed chart for one item. It returns, per item, the total volume traded, the time\r\nof the most recent trade, the highest single trade price, and two parallel oldest-first\r\narrays of the average price and volume per bucket.\r\n            \r\nIt is roughly an order of magnitude smaller than the full history for the same window\r\n(about 110 KB versus 1.2 MB for '1d') and is derived from the same cached aggregation, so it\r\ncosts no extra database work. Buckets with no trades are omitted, so the arrays are dense.",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "The period to summarise (supported: '1d', '7d', '30d', '1y').",
            "schema": {
              "type": "string",
              "default": "1d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the per-item summaries."
          },
          "400": {
            "description": "If the period is not one of the supported values."
          }
        }
      }
    },
    "/api/PlayerMarket/items/prices/history/value": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Retrieves the trades with the highest item prices within a specified period.",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "The period for which to retrieve the most valuable trades (e.g., '1d', '7d', '30d', '1y').",
            "schema": {
              "type": "string",
              "default": "1d"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of records to retrieve (between 1 and 10).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/PlayerMarket/items/volume/history": {
      "get": {
        "tags": [
          "PlayerMarket"
        ],
        "summary": "Retrieves the top items by trade volume within a specified period.",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "The period for which to retrieve the top items by volume. '1d' is available to everyone; '7d', '30d' and '1y' require the trusted API key.",
            "schema": {
              "type": "string",
              "default": "1d"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of records to retrieve (between 1 and 10).",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the top items by trade volume."
          },
          "400": {
            "description": "If the period or limit is invalid."
          },
          "403": {
            "description": "If a period longer than '1d' is requested without the trusted API key."
          }
        }
      }
    },
    "/api/Server/info": {
      "get": {
        "tags": [
          "Server"
        ],
        "summary": "Gets all active game servers and a recommended server to connect to.\r\nThe recommended server has the lowest load percentage.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/Startup/info": {
      "get": {
        "tags": [
          "Startup"
        ],
        "summary": "Gets all information needed for game startup in a single call.\r\nIncludes build versions and available game servers.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AdminFindMasterAccountRequest": {
        "type": "object",
        "properties": {
          "masterAccountId": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "steamId": {
            "type": "string",
            "nullable": true
          },
          "discordId": {
            "type": "string",
            "nullable": true
          },
          "characterName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Admin lookup; exactly one search field is used, in the declared priority order."
      },
      "AdminMoveCharacterRequest": {
        "type": "object",
        "properties": {
          "characterName": {
            "type": "string",
            "nullable": true
          },
          "targetMasterAccountId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiToken": {
        "type": "object",
        "properties": {
          "developer": {
            "type": "string",
            "nullable": true
          },
          "token": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BanMasterAccountRequest": {
        "type": "object",
        "properties": {
          "masterAccountId": {
            "type": "string",
            "nullable": true
          },
          "characterName": {
            "type": "string",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BestTimeInfo": {
        "type": "object",
        "properties": {
          "time": {
            "type": "integer",
            "format": "int32"
          },
          "achievedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "BuildVersionInfo": {
        "type": "object",
        "properties": {
          "requiredBuildVersion": {
            "type": "string",
            "nullable": true
          },
          "latestBuildVersion": {
            "type": "string",
            "nullable": true
          },
          "configVersion": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "BulkLinkCharactersRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "playFabSessionTickets": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ClaimDiscordRolesRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "characterName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ClanCupObjectiveStandingBase": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ClanCupTopClans": {
        "type": "object",
        "properties": {
          "topScoreClans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ClanCupTopClansInScoreObjectives"
            },
            "nullable": true
          },
          "topTimeClans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ClanCupTopClansInTimeObjectives"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ClanCupTopClansInScoreObjectives": {
        "type": "object",
        "properties": {
          "objective": {
            "type": "string",
            "nullable": true
          },
          "standings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScoreBasedStanding"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ClanCupTopClansInTimeObjectives": {
        "type": "object",
        "properties": {
          "objective": {
            "type": "string",
            "nullable": true
          },
          "standings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimeBasedStanding"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ClanExperienceInterval": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "playerCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ClanExperienceRanking": {
        "type": "object",
        "properties": {
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "skills": {
            "type": "object",
            "additionalProperties": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ClanExperienceSummary": {
        "type": "object",
        "properties": {
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "periodHours": {
            "type": "integer",
            "format": "int32"
          },
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "skillTotals": {
            "type": "object",
            "additionalProperties": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "playerContributions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerContribution"
            },
            "nullable": true
          },
          "intervalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ClanRecruimentPageMemberEntry": {
        "type": "object",
        "properties": {
          "memberName": {
            "type": "string",
            "nullable": true
          },
          "rank": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ClanRecruitmentPageEntry": {
        "type": "object",
        "properties": {
          "clanId": {
            "type": "string",
            "nullable": true
          },
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "previousNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "tag": {
            "type": "string",
            "nullable": true
          },
          "isPrestige": {
            "type": "boolean"
          },
          "activityScore": {
            "type": "number",
            "format": "float"
          },
          "minimumTotalLevelRequired": {
            "type": "integer",
            "format": "int32"
          },
          "memberlist": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ClanRecruimentPageMemberEntry"
            },
            "nullable": true
          },
          "memberCount": {
            "type": "integer",
            "format": "int32"
          },
          "isRecruiting": {
            "type": "boolean"
          },
          "language": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "serializedSkills": {
            "type": "string",
            "nullable": true
          },
          "serializedUpgrades": {
            "type": "string",
            "nullable": true
          },
          "repeatableUpgradeCounts": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "recruitmentMessage": {
            "type": "string",
            "nullable": true
          },
          "houseId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ClanSkillRanking": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer",
            "format": "int32"
          },
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "skill": {
            "type": "string",
            "nullable": true
          },
          "experience": {
            "type": "number",
            "format": "double"
          },
          "contributorCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Confirm2FARequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateCharacterRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "characterName": {
            "type": "string",
            "nullable": true
          },
          "activeGameModeTab": {
            "$ref": "#/components/schemas/GameMode"
          }
        },
        "additionalProperties": false
      },
      "CreateMasterAccountRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Disable2FARequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityUpdateRequest": {
        "type": "object",
        "properties": {
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "fields": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "experienceCapReachedFields": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int64"
            },
            "nullable": true
          },
          "isPrestige": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GameMode": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "GuestLoginRequest": {
        "type": "object",
        "properties": {
          "guestToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ItemMetadata": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "nameLocKey": {
            "type": "string",
            "nullable": true
          },
          "baseValue": {
            "type": "integer",
            "format": "int32"
          },
          "tradeable": {
            "type": "boolean"
          },
          "discontinued": {
            "type": "boolean"
          },
          "associatedSkill": {
            "type": "string",
            "nullable": true
          },
          "equipmentSlot": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JToken": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/JToken"
        }
      },
      "LinkCharacterRequest": {
        "type": "object",
        "properties": {
          "playFabSessionTicket": {
            "type": "string",
            "nullable": true
          },
          "sessionToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LinkEmailRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LinkSteamRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "steamTicket": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Log": {
        "type": "object",
        "properties": {
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "memberUsername": {
            "type": "string",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "MarketSettingsInfo": {
        "type": "object",
        "properties": {
          "sellTaxPercentage": {
            "type": "number",
            "description": "Percentage of the sale value the SELLER pays on a completed trade. Buyers pay nothing.",
            "format": "float"
          },
          "maxOfferSlotsPremium": {
            "type": "integer",
            "description": "Combined buy + sell offer slots available to a premium member.",
            "format": "int32"
          },
          "maxOfferSlotsFree": {
            "type": "integer",
            "description": "Combined buy + sell offer slots available without premium.",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MasterAccountEmailLoginRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "rememberMe": {
            "type": "boolean"
          },
          "deviceTrustToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MilestonePlayersRequest": {
        "type": "object",
        "properties": {
          "usernames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "count": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MilestoneRecord": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "The player's immutable handle — the key for profile links/lookups. May differ from\r\n            the name currently shown in game; see MilestoneRecord.DisplayName.",
            "nullable": true
          },
          "type": {
            "type": "integer",
            "format": "int32"
          },
          "skill": {
            "type": "string",
            "nullable": true
          },
          "level": {
            "type": "integer",
            "format": "int32"
          },
          "itemId": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "count": {
            "type": "integer",
            "format": "int32"
          },
          "gameMode": {
            "type": "string",
            "nullable": true
          },
          "isIronman": {
            "type": "boolean"
          },
          "clan": {
            "type": "string",
            "description": "The clan's immutable handle at the time of the milestone (null when the player had\r\n            no clan). See MilestoneRecord.ClanDisplayName for the rename overlay.",
            "nullable": true
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "displayName": {
            "type": "string",
            "description": "The player's current in-game display name, present ONLY when they have renamed and\r\n            it therefore differs from MilestoneRecord.Username. Null for the (vast) majority of players\r\n            who never renamed — null means \"show the Username\", not \"name unknown\".",
            "nullable": true
          },
          "clanDisplayName": {
            "type": "string",
            "description": "The clan's current display name, present ONLY when the clan has renamed and it\r\n            therefore differs from MilestoneRecord.Clan. Null when the clan never renamed (show\r\n            MilestoneRecord.Clan) or when MilestoneRecord.Clan is null.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One milestone as read back from the feed streams. The GAME SERVER writes these\r\n            records directly to Redis (MilestoneManager) — the property names here are the shared\r\n            JSON contract. Name/icon of an item or skill is resolved by the reader (client\r\n            ItemDatabase / website items.json) so the service stays content-agnostic."
      },
      "MostActiveClanResult": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "activityScore": {
            "type": "number",
            "format": "float"
          },
          "minimumTotalLevel": {
            "type": "integer",
            "format": "int32"
          },
          "memberCount": {
            "type": "integer",
            "format": "int32"
          },
          "isRecruiting": {
            "type": "boolean"
          },
          "language": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "gameMode": {
            "$ref": "#/components/schemas/GameMode"
          }
        },
        "additionalProperties": false
      },
      "PasswordResetRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PetUpdateRequest": {
        "type": "object",
        "properties": {
          "totalLevel": {
            "type": "integer",
            "format": "int32"
          },
          "fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number",
              "format": "float"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlayerActivity": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/PlayerActivityType"
          },
          "taskType": {
            "type": "integer",
            "format": "int32"
          },
          "activityIdentifierId": {
            "type": "integer",
            "format": "int32"
          },
          "startTime": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PlayerActivityType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7
        ],
        "type": "integer",
        "format": "int32"
      },
      "PlayerClanContribution": {
        "type": "object",
        "properties": {
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "username": {
            "type": "string",
            "nullable": true
          },
          "periodHours": {
            "type": "integer",
            "format": "int32"
          },
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "skillTotals": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/SkillExperience"
            },
            "nullable": true
          },
          "timeline": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerExperienceInterval"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlayerContribution": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "nullable": true
          },
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "skills": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/SkillExperience"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlayerExperienceInterval": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "totalExperience": {
            "type": "number",
            "format": "double"
          },
          "skills": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/SkillExperience"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlayerProfile": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true
          },
          "username": {
            "type": "string",
            "nullable": true
          },
          "previousNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "gameMode": {
            "type": "string",
            "nullable": true
          },
          "equippedTitle": {
            "type": "string",
            "nullable": true
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "guildName": {
            "type": "string",
            "nullable": true
          },
          "guildDisplayName": {
            "type": "string",
            "nullable": true
          },
          "skillExperiences": {
            "type": "object",
            "additionalProperties": {
              "type": "number",
              "format": "double"
            },
            "nullable": true
          },
          "equipment": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "enchantmentBoosts": {
            "type": "object",
            "additionalProperties": {
              "type": "number",
              "format": "float"
            },
            "nullable": true
          },
          "upgrades": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "pvmStats": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "creditsAcquiredForClan": {
            "type": "integer",
            "format": "int32"
          },
          "guildJoinDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "hoursOffline": {
            "type": "number",
            "format": "double"
          },
          "taskTypeOnLogout": {
            "type": "integer",
            "format": "int32"
          },
          "taskNameOnLogout": {
            "type": "string",
            "nullable": true
          },
          "activeServerId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlayerRoleGetRequest": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlayerRoleSetRequest": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "nullable": true
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "note": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PollAuthLinkRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "state": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PollAuthRequest": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string",
            "nullable": true
          },
          "rememberMe": {
            "type": "boolean"
          },
          "deviceTrustToken": {
            "type": "string",
            "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": { }
      },
      "PurgeBannedRequest": {
        "type": "object",
        "properties": {
          "extraUsernames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "dryRun": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "RefreshCharactersRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RemoveCharacterRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "playFabId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RemovePlayersRequest": {
        "type": "object",
        "properties": {
          "usernames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ResetPasswordRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "newPassword": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RestoreCharacterRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "playFabId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ScoreBasedStanding": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer",
            "format": "int32"
          },
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "score": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "SelectCharacterRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "playFabId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SessionTokenRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SimplePlayerProfile": {
        "type": "object",
        "properties": {
          "skillExperiences": {
            "type": "string",
            "nullable": true
          },
          "equipment": {
            "type": "string",
            "nullable": true
          },
          "hoursOffline": {
            "type": "number",
            "format": "double"
          },
          "taskTypeOnLogout": {
            "type": "integer",
            "format": "int32"
          },
          "taskNameOnLogout": {
            "type": "string",
            "nullable": true
          },
          "activeServerId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SkillExperience": {
        "type": "object",
        "properties": {
          "experience": {
            "type": "number",
            "format": "double"
          },
          "level": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "SteamTicketLoginRequest": {
        "type": "object",
        "properties": {
          "ticket": {
            "type": "string",
            "nullable": true
          },
          "rememberMe": {
            "type": "boolean"
          },
          "deviceTrustToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeBasedStanding": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer",
            "format": "int32"
          },
          "clanName": {
            "type": "string",
            "nullable": true
          },
          "bestTime": {
            "$ref": "#/components/schemas/BestTimeInfo"
          }
        },
        "additionalProperties": false
      },
      "TokenLoginRequest": {
        "type": "object",
        "properties": {
          "rememberMeToken": {
            "type": "string",
            "nullable": true
          },
          "deviceTrustToken": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UnbanMasterAccountRequest": {
        "type": "object",
        "properties": {
          "masterAccountId": {
            "type": "string",
            "nullable": true
          },
          "characterName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Verify2FARequest": {
        "type": "object",
        "properties": {
          "challengeToken": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VerifyEmailRequest": {
        "type": "object",
        "properties": {
          "sessionToken": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "API Key needed to access protected endpoints",
        "name": "X-Api-Key",
        "in": "header"
      }
    }
  }
}