{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/unicum-gg/json-schema/unicum-gg-player-detail-response-schema.json",
  "title": "PlayerDetailResponse",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/unicum-gg-openapi.json#/components/schemas/PlayerDetailResponse",
  "type": "object",
  "properties": {
    "player": {
      "type": "object",
      "properties": {
        "accountId": {
          "type": "number"
        },
        "nickname": {
          "type": "string"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        },
        "lastBattleAt": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "accountId",
        "nickname",
        "createdAt",
        "lastBattleAt",
        "updatedAt"
      ]
    },
    "nameHistory": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "nickname": {
            "type": "string"
          },
          "recordedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "nickname",
          "recordedAt"
        ]
      },
      "description": "Previous nicknames of this account, newest first. Empty until a rename is observed (WG exposes no historical names)."
    },
    "isSupporter": {
      "type": "boolean"
    },
    "isVerified": {
      "type": "boolean"
    },
    "twitchLogin": {
      "type": [
        "string",
        "null"
      ]
    },
    "tournamentWins": {
      "type": "number",
      "description": "How many Wargaming tournaments this account was on the winning roster of. Counts only tournaments that decided an overall winner: a draw played as parallel groups crowns a winner per group and none overall."
    },
    "tournamentFeaturedWins": {
      "type": "number",
      "description": "How many of those wins came at an event Wargaming flags as featured, which is what separates a branded championship from a nightly gold ladder."
    },
    "tournamentBestTitle": {
      "type": [
        "string",
        "null"
      ],
      "description": "The win worth naming: a featured event when there is one, else the most recent. Null when the account has never won."
    },
    "onslaughtBestTier": {
      "type": [
        "string",
        "null"
      ],
      "description": "The best Onslaught rank this account has ever held: legend, champion, or null for an account that has never been on the ranked board. A record rather than a current standing: a rating falling back under the entry bar takes the place, not the fact that it was held."
    },
    "onslaughtBestRank": {
      "type": [
        "number",
        "null"
      ],
      "description": "The best leaderboard position held, across every season captured. Null when the account has never been ranked."
    },
    "onslaughtSeasons": {
      "type": "number",
      "description": "How many distinct Onslaught seasons this account was ranked in. Zero for an account that never was."
    },
    "current": {
      "$ref": "#/$defs/PlayerStats"
    },
    "periods": {
      "type": "object",
      "properties": {
        "h24": {
          "anyOf": [
            {
              "$ref": "#/$defs/PlayerPeriodStats"
            },
            {
              "type": "null"
            }
          ]
        },
        "d7": {
          "anyOf": [
            {
              "$ref": "#/$defs/PlayerPeriodStats"
            },
            {
              "type": "null"
            }
          ]
        },
        "d30": {
          "anyOf": [
            {
              "$ref": "#/$defs/PlayerPeriodStats"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "h24",
        "d7",
        "d30"
      ]
    },
    "derived": {
      "$ref": "#/$defs/PlayerDerivedStats"
    },
    "tankCount": {
      "type": "number"
    },
    "achievementCount": {
      "type": "number"
    },
    "tournamentCount": {
      "type": "number"
    },
    "battleCount": {
      "type": "number",
      "description": "Battles shared through the unicum.gg mod that this account fought. Absent from a payload cached before the field existed, and when the player keeps their battles private."
    },
    "battlesHidden": {
      "type": "boolean",
      "description": "The player keeps their battle list to themselves: the battles endpoint answers them alone, and `battleCount` is withheld."
    },
    "valuation": {
      "type": "object",
      "properties": {
        "account": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "amount": {
              "type": "number"
            },
            "currency": {
              "type": "string"
            },
            "verifiedAt": {
              "type": [
                "string",
                "null"
              ]
            },
            "breakdown": {
              "type": "object",
              "properties": {
                "gold": {
                  "type": "number"
                },
                "research": {
                  "$ref": "#/$defs/rebuildLine"
                },
                "credits": {
                  "$ref": "#/$defs/rebuildLine"
                },
                "premiums": {
                  "$ref": "#/$defs/rebuildLine"
                }
              },
              "required": [
                "gold",
                "research",
                "credits",
                "premiums"
              ]
            }
          },
          "required": [
            "amount",
            "currency"
          ]
        }
      },
      "required": [
        "account"
      ],
      "description": "What this garage would cost to rebuild at the official store, in the region's store currency: every non-reward tank's gold price, or its research XP and credit price converted through gold. Reward tanks are excluded: the shop never prices them, since they are issued through Wargaming's own events (auctions and paid Battle Pass tiers among others) at whatever it asks each time rather than at a published price. Null for a region with no store pricing table. `breakdown` is how that total is reached, in three lines that sum to it exactly, each carrying the raw game currency behind it. `verifiedAt` is when the account's own owner last confirmed their garage by signing in with Wargaming.net ID, and it is what separates a figure from an estimate: null means this prices every vehicle the account has ever DRIVEN, because `in_garage` is null for any caller but the account itself, so vehicles sold years ago are still counted and vehicles bought and never driven are missing entirely."
    },
    "liftDrag": {
      "type": "object",
      "properties": {
        "wn7": {
          "$ref": "#/$defs/liftDragByMetricEntry"
        },
        "wn8": {
          "$ref": "#/$defs/liftDragByMetricEntry"
        },
        "wnx": {
          "$ref": "#/$defs/liftDragByMetricEntry"
        }
      },
      "required": [
        "wn7",
        "wn8",
        "wnx"
      ]
    },
    "markProgress": {
      "allOf": [
        {
          "$ref": "#/$defs/PlayerMarkProgress"
        }
      ]
    },
    "ratingHistory": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RatingHistoryPoint"
      }
    },
    "clanHistory": {
      "$ref": "#/$defs/PlayerClanHistory"
    },
    "strongholds": {
      "type": "object",
      "properties": {
        "skirmish": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "fortified": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "epic": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "ranked": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "fallout": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "cwAbsolute": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "cwChampion": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "cwMiddle": {
          "$ref": "#/$defs/StrongholdMode"
        },
        "clan": {
          "anyOf": [
            {
              "$ref": "#/$defs/StrongholdMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "company": {
          "anyOf": [
            {
              "$ref": "#/$defs/StrongholdMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "team": {
          "anyOf": [
            {
              "$ref": "#/$defs/StrongholdMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "regularTeam": {
          "anyOf": [
            {
              "$ref": "#/$defs/StrongholdMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "historical": {
          "anyOf": [
            {
              "$ref": "#/$defs/StrongholdMode"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "skirmish",
        "fortified",
        "epic",
        "ranked",
        "fallout",
        "cwAbsolute",
        "cwChampion",
        "cwMiddle",
        "clan",
        "company",
        "team",
        "regularTeam",
        "historical"
      ],
      "description": "Per-mode records. The first eight are live modes read from the snapshot series, so they carry 24h/7d/30d periods. The last five are modes nobody can play any more (Clan Battles, Tank Company, Team Battles, Permanent Teams and Historical Battles): their totals are finished, so their periods are always null, and the whole entry is null for an account that never played the mode."
    }
  },
  "required": [
    "player",
    "nameHistory",
    "isSupporter",
    "isVerified",
    "twitchLogin",
    "tournamentWins",
    "tournamentFeaturedWins",
    "tournamentBestTitle",
    "onslaughtBestTier",
    "onslaughtBestRank",
    "onslaughtSeasons",
    "current",
    "periods",
    "derived",
    "tankCount",
    "achievementCount",
    "tournamentCount",
    "valuation",
    "liftDrag",
    "ratingHistory",
    "clanHistory",
    "strongholds"
  ],
  "$defs": {
    "ClanStint": {
      "type": "object",
      "properties": {
        "clan": {
          "type": "object",
          "properties": {
            "id": {
              "type": "number"
            },
            "tag": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "color": {
              "type": "string"
            },
            "emblem": {
              "type": "string"
            },
            "languages": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "isDisbanded": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "tag",
            "name",
            "color",
            "emblem",
            "languages"
          ]
        },
        "joinedAt": {
          "type": "string",
          "format": "date-time"
        },
        "leftAt": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "role": {
          "type": "string"
        },
        "roleLocalized": {
          "type": "string"
        }
      },
      "required": [
        "clan",
        "joinedAt",
        "leftAt",
        "role",
        "roleLocalized"
      ],
      "description": "A period of membership in one clan."
    },
    "LiftDragRow": {
      "type": "object",
      "properties": {
        "tankId": {
          "type": "number"
        },
        "slug": {
          "type": [
            "string",
            "null"
          ]
        },
        "name": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "tier": {
          "type": "number"
        },
        "isPremium": {
          "type": "boolean"
        },
        "battles": {
          "type": "number"
        },
        "rating": {
          "type": "number"
        },
        "removalDelta": {
          "type": "number"
        }
      },
      "required": [
        "tankId",
        "slug",
        "name",
        "tag",
        "type",
        "tier",
        "isPremium",
        "battles",
        "rating",
        "removalDelta"
      ],
      "description": "A tank whose removal would move the overall rating by removalDelta (negative = it lifts the rating, positive = it drags it)."
    },
    "MarkReachEntry": {
      "type": "object",
      "properties": {
        "tankId": {
          "type": "number"
        },
        "slug": {
          "type": [
            "string",
            "null"
          ]
        },
        "name": {
          "type": "string"
        },
        "tier": {
          "type": "number"
        },
        "tag": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "isPremium": {
          "type": "boolean"
        },
        "marks": {
          "type": "number"
        },
        "playingAt": {
          "type": "number"
        },
        "threshold": {
          "type": "number"
        },
        "combined": {
          "type": "number"
        },
        "ratio": {
          "type": "number"
        },
        "battles": {
          "type": "number"
        },
        "window": {
          "type": "string",
          "description": "Which average the ratio was computed over: the last 30 days when the vehicle saw enough battles, its lifetime otherwise.",
          "enum": [
            "recent",
            "lifetime"
          ]
        }
      },
      "required": [
        "tankId",
        "slug",
        "name",
        "tier",
        "tag",
        "type",
        "isPremium",
        "marks",
        "playingAt",
        "threshold",
        "combined",
        "ratio",
        "battles",
        "window"
      ],
      "description": "A vehicle measured against the mark it has not earned yet: the region's combined-damage bar for that mark, the player's own combined damage over the window, and their ratio. Above 1 means the average already clears the bar."
    },
    "MarksTierRow": {
      "type": "object",
      "properties": {
        "tier": {
          "type": "number"
        },
        "none": {
          "type": "number"
        },
        "mark1": {
          "type": "number"
        },
        "mark2": {
          "type": "number"
        },
        "mark3": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "required": [
        "tier",
        "none",
        "mark1",
        "mark2",
        "mark3",
        "total"
      ],
      "description": "How many of the player's vehicles of one tier carry no mark, one, two or three Marks of Excellence."
    },
    "MasteryTierRow": {
      "type": "object",
      "properties": {
        "tier": {
          "type": "number"
        },
        "none": {
          "type": "number"
        },
        "class3": {
          "type": "number"
        },
        "class2": {
          "type": "number"
        },
        "class1": {
          "type": "number"
        },
        "ace": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "required": [
        "tier",
        "none",
        "class3",
        "class2",
        "class1",
        "ace",
        "total"
      ],
      "description": "How many of the player's vehicles of one tier carry no Mark of Mastery, 3rd, 2nd, 1st class or Ace Tanker."
    },
    "PeriodValues": {
      "type": "object",
      "properties": {
        "total": {
          "type": [
            "number",
            "null"
          ]
        },
        "h24": {
          "type": [
            "number",
            "null"
          ]
        },
        "d7": {
          "type": [
            "number",
            "null"
          ]
        },
        "d30": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "total",
        "h24",
        "d7",
        "d30"
      ],
      "description": "One derived value per column: lifetime, 24h, 7d, 30d."
    },
    "PlayerClanHistory": {
      "type": "object",
      "properties": {
        "currentStint": {
          "anyOf": [
            {
              "$ref": "#/$defs/ClanStint"
            },
            {
              "type": "null"
            }
          ]
        },
        "pastStints": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ClanStint"
          }
        },
        "totalClans": {
          "type": "number"
        },
        "timeInClansSeconds": {
          "type": "number"
        }
      },
      "required": [
        "currentStint",
        "pastStints",
        "totalClans",
        "timeInClansSeconds"
      ],
      "description": "Current and past clan memberships."
    },
    "PlayerDerivedStats": {
      "type": "object",
      "properties": {
        "tier": {
          "$ref": "#/$defs/PeriodValues"
        },
        "trackDamage": {
          "$ref": "#/$defs/PeriodValues"
        },
        "spottingDamage": {
          "$ref": "#/$defs/PeriodValues"
        },
        "assistingDamage": {
          "$ref": "#/$defs/PeriodValues"
        },
        "combinedDamage": {
          "$ref": "#/$defs/PeriodValues"
        },
        "wn7": {
          "$ref": "#/$defs/PeriodValues"
        },
        "wn8": {
          "$ref": "#/$defs/PeriodValues"
        },
        "wnx": {
          "$ref": "#/$defs/PeriodValues"
        }
      },
      "required": [
        "tier",
        "trackDamage",
        "spottingDamage",
        "assistingDamage",
        "combinedDamage",
        "wn7",
        "wn8",
        "wnx"
      ],
      "description": "Per-tank-breakdown derivations: average tier, assistance damages and WN7/WN8/WNX per column."
    },
    "PlayerMarkProgress": {
      "type": "object",
      "properties": {
        "garage": {
          "type": "number"
        },
        "marks": {
          "type": "object",
          "properties": {
            "total": {
              "type": "object",
              "properties": {
                "mark1": {
                  "type": "number"
                },
                "mark2": {
                  "type": "number"
                },
                "mark3": {
                  "type": "number"
                }
              },
              "required": [
                "mark1",
                "mark2",
                "mark3"
              ]
            },
            "byTier": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/MarksTierRow"
              }
            },
            "known": {
              "type": "number"
            }
          },
          "required": [
            "total",
            "byTier",
            "known"
          ]
        },
        "mastery": {
          "type": "object",
          "properties": {
            "total": {
              "type": "object",
              "properties": {
                "class3": {
                  "type": "number"
                },
                "class2": {
                  "type": "number"
                },
                "class1": {
                  "type": "number"
                },
                "ace": {
                  "type": "number"
                }
              },
              "required": [
                "class3",
                "class2",
                "class1",
                "ace"
              ]
            },
            "byTier": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/MasteryTierRow"
              }
            }
          },
          "required": [
            "total",
            "byTier"
          ]
        },
        "reach": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/MarkReachEntry"
          }
        }
      },
      "required": [
        "garage",
        "marks",
        "mastery",
        "reach"
      ],
      "description": "Marks of Excellence and Marks of Mastery across the garage, by tier, plus the vehicles closest to their next mark."
    },
    "PlayerPeriodStats": {
      "type": "object",
      "properties": {
        "battles": {
          "type": "number"
        },
        "wins": {
          "type": "number"
        },
        "losses": {
          "type": [
            "number",
            "null"
          ]
        },
        "draws": {
          "type": [
            "number",
            "null"
          ]
        },
        "survivedBattles": {
          "type": [
            "number",
            "null"
          ]
        },
        "frags": {
          "type": "number"
        },
        "damageDealt": {
          "type": "number"
        },
        "xp": {
          "type": "number"
        },
        "spotted": {
          "type": "number"
        },
        "capturePoints": {
          "type": [
            "number",
            "null"
          ]
        },
        "droppedCapturePoints": {
          "type": "number"
        },
        "hits": {
          "type": [
            "number",
            "null"
          ]
        },
        "shots": {
          "type": [
            "number",
            "null"
          ]
        },
        "globalRating": {
          "type": [
            "number",
            "null"
          ]
        },
        "wtr": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "battles",
        "wins",
        "losses",
        "draws",
        "survivedBattles",
        "frags",
        "damageDealt",
        "xp",
        "spotted",
        "capturePoints",
        "droppedCapturePoints",
        "hits",
        "shots",
        "globalRating",
        "wtr"
      ],
      "description": "Random-battles counters over a window, summed from the per-vehicle diffs, which Wargaming updates after every battle while the account totals wait for the player to log out. A counter is null when a vehicle played in the window has no stored value for it at the window's start. globalRating and wtr are the change in the account's own figures, null when no account snapshot is that old."
    },
    "PlayerStats": {
      "type": "object",
      "properties": {
        "battles": {
          "type": "number"
        },
        "wins": {
          "type": "number"
        },
        "losses": {
          "type": "number"
        },
        "draws": {
          "type": "number"
        },
        "survivedBattles": {
          "type": "number"
        },
        "frags": {
          "type": "number"
        },
        "damageDealt": {
          "type": "number"
        },
        "xp": {
          "type": "number"
        },
        "spotted": {
          "type": "number"
        },
        "capturePoints": {
          "type": "number"
        },
        "droppedCapturePoints": {
          "type": "number"
        },
        "hits": {
          "type": "number"
        },
        "shots": {
          "type": "number"
        },
        "globalRating": {
          "type": "number"
        },
        "wtr": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "battles",
        "wins",
        "losses",
        "draws",
        "survivedBattles",
        "frags",
        "damageDealt",
        "xp",
        "spotted",
        "capturePoints",
        "droppedCapturePoints",
        "hits",
        "shots",
        "globalRating",
        "wtr"
      ],
      "description": "Random-battles totals from the account's latest snapshot."
    },
    "RatingHistoryPoint": {
      "type": "object",
      "properties": {
        "day": {
          "type": "string"
        },
        "lifetime": {
          "$ref": "#/$defs/ratingMetricValues"
        },
        "session": {
          "$ref": "#/$defs/ratingMetricValues"
        }
      },
      "required": [
        "day",
        "lifetime",
        "session"
      ],
      "description": "Daily rating sample: lifetime and per-session values, each carrying every metric so the client can switch metric without a refetch. `pr` and `wtr` are Wargaming's account figures as they stood at the end of the day, so they are null on `session`."
    },
    "StrongholdMode": {
      "type": "object",
      "properties": {
        "current": {
          "anyOf": [
            {
              "$ref": "#/$defs/StrongholdStats"
            },
            {
              "type": "null"
            }
          ]
        },
        "periods": {
          "type": "object",
          "properties": {
            "h24": {
              "anyOf": [
                {
                  "$ref": "#/$defs/StrongholdStats"
                },
                {
                  "type": "null"
                }
              ]
            },
            "d7": {
              "anyOf": [
                {
                  "$ref": "#/$defs/StrongholdStats"
                },
                {
                  "type": "null"
                }
              ]
            },
            "d30": {
              "anyOf": [
                {
                  "$ref": "#/$defs/StrongholdStats"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "h24",
            "d7",
            "d30"
          ]
        }
      },
      "required": [
        "current",
        "periods"
      ],
      "description": "One game mode's totals plus 24h/7d/30d period diffs."
    },
    "StrongholdStats": {
      "type": "object",
      "properties": {
        "battles": {
          "type": "number"
        },
        "wins": {
          "type": "number"
        },
        "losses": {
          "type": "number"
        },
        "draws": {
          "type": "number"
        },
        "survivedBattles": {
          "type": "number"
        },
        "frags": {
          "type": "number"
        },
        "damageDealt": {
          "type": "number"
        },
        "spotted": {
          "type": "number"
        },
        "capturePoints": {
          "type": "number"
        },
        "droppedCapturePoints": {
          "type": "number"
        },
        "battleAvgXp": {
          "type": "number"
        }
      },
      "required": [
        "battles",
        "wins",
        "losses",
        "draws",
        "survivedBattles",
        "frags",
        "damageDealt",
        "spotted",
        "capturePoints",
        "droppedCapturePoints",
        "battleAvgXp"
      ],
      "description": "Totals for one non-random game mode."
    },
    "liftDragByMetricEntry": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "lift": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LiftDragRow"
          }
        },
        "drag": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LiftDragRow"
          }
        }
      },
      "required": [
        "lift",
        "drag"
      ]
    },
    "ratingMetricValues": {
      "type": "object",
      "properties": {
        "wn7": {
          "type": [
            "number",
            "null"
          ]
        },
        "wn8": {
          "type": [
            "number",
            "null"
          ]
        },
        "wnx": {
          "type": [
            "number",
            "null"
          ]
        },
        "pr": {
          "type": [
            "number",
            "null"
          ]
        },
        "wtr": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "wn7",
        "wn8",
        "wnx"
      ]
    },
    "rebuildLine": {
      "type": "object",
      "properties": {
        "count": {
          "type": "number"
        },
        "units": {
          "type": "number"
        },
        "gold": {
          "type": "number"
        },
        "amount": {
          "type": "number"
        }
      },
      "required": [
        "count",
        "units",
        "gold",
        "amount"
      ]
    }
  }
}