---
title: "Tank detail"
method: GET
path: "/{region}/tanks/{slug}/detail"
tags: ["Tanks"]
---

# Tank detail

`GET /{region}/tanks/{slug}/detail`

## Request

- Base URL: `https://unicum.gg/api`
- URL: `https://unicum.gg/api/{region}/tanks/{slug}/detail`
- Auth: none required

Everything the tank page renders in one payload: identity, top players per rating metric (WN7/WN8/WNX), server-average performance, WN8/WNX expected values, combat specifications, current Marks of Excellence/Mastery with their daily history, and the cheapest research path. `slug` in the response is the canonical slug; callers that reached the tank through a legacy numeric id should redirect to it. Dates are ISO 8601 strings.

## Path parameters

- `region` 'eu' | 'na' | 'asia', required: Game server region.
- `slug` string, required: Tank slug (e.g. is-7).

## Query parameters

- `client` 'live' | 'ct': Which game client to read the vehicle's characteristics from. `ct` serves what the running Common Test build makes of it, so a tank can be inspected and configured the way the next update would ship it. Falls back to live when no test is running or when it leaves this vehicle alone.

## Response `200`

Successful response

- TankDetail: Everything the tank page renders: identity, best players per rating metric, server averages, WN8/WNX expected values, combat specs, Marks of Excellence/Mastery (current and history) and the research path.
  - `tankId` number, required
  - `slug` string, required: Canonical slug. Callers that reached the tank through a legacy id or wrong-case slug should redirect to it.
  - `meta` VehicleMeta, required: The tank's catalogue identity.
    - `tier` number, required
    - `type` string, required
    - `nation` string, required
    - `name` string, required
    - `shortName` string, required
    - `tag` string, required
    - `isPremium` boolean, required
    - `isReward` boolean, required
    - `isCommonTest` boolean, required: Only on the Common Test client, not yet released.
    - `isHidden` boolean, required: Not a vehicle at all (training bot, story-mode prop). Always false here: these are excluded from the catalogue.
    - `variant` string, nullable, required: The parallel catalogue this vehicle comes from, spelled as the suffix its name ends with ("IGR" for the retired cybercafe reissues). Null for a normal vehicle.
    - `role` string, nullable, required
    - `contourIcon` string, nullable, required
    - `bigIcon` string, nullable, required
  - `topByMetric` object, required
    - `wn7` TopTankPlayer[], required
      - `account_id` number, required
      - `nickname` string, required
      - `clan_tag` string, nullable, required
      - `clan_color` string, nullable, required
      - `battles` number, required
      - `avg_damage` number, required
      - `winrate` number, required
      - `value` number, required: The ranked metric's value.
      - `is_verified` boolean
      - `is_supporter` boolean
      - `twitch_login` string, nullable
      - `tournament_wins` number
      - `tournament_featured_wins` number
      - `tournament_best_title` string, nullable
      - `onslaught_best_tier` string, nullable
      - `onslaught_best_rank` number, nullable
      - `onslaught_seasons` number
    - `wn8` TopTankPlayer[], required
      - `account_id` number, required
      - `nickname` string, required
      - `clan_tag` string, nullable, required
      - `clan_color` string, nullable, required
      - `battles` number, required
      - `avg_damage` number, required
      - `winrate` number, required
      - `value` number, required: The ranked metric's value.
      - `is_verified` boolean
      - `is_supporter` boolean
      - `twitch_login` string, nullable
      - `tournament_wins` number
      - `tournament_featured_wins` number
      - `tournament_best_title` string, nullable
      - `onslaught_best_tier` string, nullable
      - `onslaught_best_rank` number, nullable
      - `onslaught_seasons` number
    - `wnx` TopTankPlayer[], required
      - `account_id` number, required
      - `nickname` string, required
      - `clan_tag` string, nullable, required
      - `clan_color` string, nullable, required
      - `battles` number, required
      - `avg_damage` number, required
      - `winrate` number, required
      - `value` number, required: The ranked metric's value.
      - `is_verified` boolean
      - `is_supporter` boolean
      - `twitch_login` string, nullable
      - `tournament_wins` number
      - `tournament_featured_wins` number
      - `tournament_best_title` string, nullable
      - `onslaught_best_tier` string, nullable
      - `onslaught_best_rank` number, nullable
      - `onslaught_seasons` number
    - `computedAt` string, date-time, nullable, required
  - `serverStats` TankServerStats, required: Server-wide performance for a tank, averaged over tracked players. moeN/momN are holder counts among tracked players; null until the by-tank cron has coverage.
    - `players` number, required
    - `avg_battles` number, required
    - `total_battles` number, nullable, required
    - `avg_damage` number, required
    - `winrate` number, required
    - `player_wr` number, nullable, required
    - `wn7` number, nullable, required
    - `wn8` number, nullable, required
    - `wnx` number, nullable, required
    - `avg_spots` number, nullable, required
    - `avg_assist` number, nullable, required
    - `kdr` number, nullable, required
    - `hit_pct` number, nullable, required
    - `pen_pct` number, nullable, required
    - `avg_blocked` number, nullable, required
    - `survival` number, nullable, required
    - `moe1` number, nullable, required
    - `moe2` number, nullable, required
    - `moe3` number, nullable, required
    - `mom_class3` number, nullable, required
    - `mom_class2` number, nullable, required
    - `mom_class1` number, nullable, required
    - `mom_ace` number, nullable, required
  - `wn8Expected` object, nullable, required
    - `expDamage` number, required
    - `expSpot` number, required
    - `expFrag` number, required
    - `expDef` number, required
    - `expWinRate` number, required
  - `wnxExpected` object, nullable, required
    - `damage` number, required
    - `frags` number, required
    - `spots` number, required
    - `assist` number, required
  - `specs` string, nullable, required
  - `moe` object, nullable, required
    - `mark1` number, required
    - `mark2` number, required
    - `mark3` number, required
  - `mom` object, nullable, required
    - `class3` number, required
    - `class2` number, required
    - `class1` number, required
    - `ace` number, required
  - `researchPath` object, nullable, required
    - `lineage` ResearchPathItem[], required
      - `tankId` number, required
      - `slug` string, required
      - `meta` VehicleMeta, required: The tank's catalogue identity.
        - `tier` number, required
        - `type` string, required
        - `nation` string, required
        - `name` string, required
        - `shortName` string, required
        - `tag` string, required
        - `isPremium` boolean, required
        - `isReward` boolean, required
        - `isCommonTest` boolean, required: Only on the Common Test client, not yet released.
        - `isHidden` boolean, required: Not a vehicle at all (training bot, story-mode prop). Always false here: these are excluded from the catalogue.
        - `variant` string, nullable, required: The parallel catalogue this vehicle comes from, spelled as the suffix its name ends with ("IGR" for the retired cybercafe reissues). Null for a normal vehicle.
        - `role` string, nullable, required
        - `contourIcon` string, nullable, required
        - `bigIcon` string, nullable, required
      - `researchXp` number, nullable, required
      - `buyCredits` number, nullable, required
    - `next` ResearchPathItem[], required
      - `tankId` number, required
      - `slug` string, required
      - `meta` VehicleMeta, required: The tank's catalogue identity.
        - `tier` number, required
        - `type` string, required
        - `nation` string, required
        - `name` string, required
        - `shortName` string, required
        - `tag` string, required
        - `isPremium` boolean, required
        - `isReward` boolean, required
        - `isCommonTest` boolean, required: Only on the Common Test client, not yet released.
        - `isHidden` boolean, required: Not a vehicle at all (training bot, story-mode prop). Always false here: these are excluded from the catalogue.
        - `variant` string, nullable, required: The parallel catalogue this vehicle comes from, spelled as the suffix its name ends with ("IGR" for the retired cybercafe reissues). Null for a normal vehicle.
        - `role` string, nullable, required
        - `contourIcon` string, nullable, required
        - `bigIcon` string, nullable, required
      - `researchXp` number, nullable, required
      - `buyCredits` number, nullable, required
  - `basedOn` object, nullable, required: The vehicle this one was made from, where the game client says it is one: a reissue or event variant drawing another tank's meshes, or a reskin shipping its own and pointing every hit tester at another tank's armour. Null where the vehicle stands on its own, and where the two share a name.
    - `name` string, required
    - `slug` string, required
  - `modules` TankModuleNode[], required: The module research DAG (nodes with unlock edges), in-game row order (gun, turret, engine, suspension, radio) then XP cost. Empty for tanks WG's Tankopedia doesn't detail.
    - `moduleId` number, required
    - `type` string, required: WG module class: vehicleChassis, vehicleTurret, vehicleGun, vehicleEngine or vehicleRadio.
    - `name` string, required
    - `tier` number, nullable, required
    - `image` string, nullable, required
    - `isDefault` boolean, required: True for the stock module the tank ships with.
    - `priceXp` number, required
    - `priceCredit` number, required
    - `nextModules` number[], required: Module ids this one unlocks (edges may cross classes, e.g. a turret unlocking a gun).
    - `nextTanks` number[], required: Vehicle ids this module's research opens up.
    - `stats` union, required
      - object
        - `kind` 'gun', required
        - `reloadTime` number, required
        - `fireRate` number, required
        - `aimTime` number, required
        - `dispersion` number, required
        - `maxAmmo` number, required
        - `moveDownArc` number, required
        - `moveUpArc` number, required
        - `traverseSpeed` number, required
        - `shells` ModuleShell[], required
          - `type` string, required
          - `damage` number, required
          - `penetration` number, required
      - object
        - `kind` 'turret', required
        - `armorFront` number, required
        - `armorSides` number, required
        - `armorRear` number, required
        - `hp` number, required
        - `viewRange` number, required
        - `traverseSpeed` number, required
      - object
        - `kind` 'engine', required
        - `power` number, required
        - `fireChance` number, required
      - object
        - `kind` 'chassis', required
        - `loadLimit` number, required
        - `traverseSpeed` number, required
      - object
        - `kind` 'radio', required
        - `signalRange` number, required
    - `tanks` ModuleTankRef[], required: Every vehicle that can mount this module, highest tier first.
      - `tankId` number, required
      - `slug` string, required
      - `name` string, required
      - `tier` number, required
      - `type` string, required
      - `tag` string, required
  - `configs` TankConfig[], required: Every selectable module combination with its full derived specs, so the page re-renders the characteristics from the modules the user picks. Empty when the wot-src catalogue has nothing for the tank (the page shows the static stock specs).
    - `modules` object, required: The WG module ids mounted in this configuration, one per slot (null when the tank has no module of that class).
      - `gun` number, nullable, required
      - `turret` number, nullable, required
      - `engine` number, nullable, required
      - `chassis` number, nullable, required
      - `radio` number, nullable, required
    - `keys` object, required: The game client's own name for each module in this configuration. The geometry mirror publishes which piece a module draws under exactly these keys, so a viewer can show the gun a reader picked rather than the vehicle's first.
      - `gun` string, required
      - `turret` string, required
      - `engine` string, required
      - `chassis` string, required
      - `radio` string, required
    - `specs` string, required: The full combat specification for this module combination, same shape as the top-level `specs` row.
  - `loadout` TankLoadout, required
    - `slots` EquipmentSlot[], required
      - `category` string, nullable, required: The slot's category (null for a legacy universal slot).
      - `role` boolean, required: True for the swappable role slot.
      - `roleOptions` string[]
    - `equipment` LoadoutEquipment[], required
      - `key` string, required
      - `name` string, required
      - `description` string, required: The device's in-game description, from the client localization.
      - `descriptionKey` string, required: The client catalogue entry that description came from, which is not always the device's own key: a grade variant carries the base device's. A reader's language resolves the blurb through this.
      - `image` string, nullable, required
      - `grade` 'standard' | 'bond' | 'bounty' | 'bountyUpgraded' | 'experimental', required: Acquisition grade: standard (credits), bond (improved), bounty, bountyUpgraded or experimental.
      - `icon` string, required: wot-src family icon; the directive/equipment family key.
      - `categories` string[], required: Equipment 2.0 categories (firepower, mobility, survivability, stealth).
      - `effects` EquipmentEffect[], required
        - `attribute` string, required
        - `type` 'mul' | 'add', required
        - `base` number, required
        - `bonus` number, required: Value applied when the slot's category matches (Equipment 2.0).
    - `directives` LoadoutDirective[], required: Directives (battle boosters) that enhance a compatible device, each tied to its equipment; applied on top of the mounted equipment.
      - `key` string, required
      - `equipmentIcon` string, required: The equipment family (its `icon`) an equipment directive enhances; empty for crew directives. Any mounted device of that family enables it.
      - `name` string, required
      - `description` string, required: The directive's in-game description, from the client localization.
      - `image` string, nullable, required
      - `attribute` string, required
      - `type` 'mul' | 'add', required
      - `value` number, required
      - `crew` boolean, required: A crew directive (boosts a crew skill, always mountable) rather than an equipment directive.
      - `boostKind` 'level' | 'efficiency', nullable, required: Crew directives: scales the boosted skill's effective level or its efficiency.
      - `boostValue` number, required
      - `effects` object[], required: The boosted skill's per-level spec effects.
        - `attribute` string, required
        - `value` number, required
      - `camouflage` boolean, required
      - `commander` boolean, required
    - `consumables` LoadoutConsumable[], required: The consumables the vehicle can mount (repair/first-aid kits, extinguishers, food, fuel, ...) in three generic slots.
      - `key` string, required
      - `name` string, required
      - `description` string, required: The consumable's in-game description, from the client localization.
      - `image` string, nullable, required
      - `effects` object[], required: Passive multiplicative effects on a characteristic (fuel, extinguisher, ...); empty for repair/first-aid kits and crew rations.
        - `attribute` string, required
        - `value` number, required
  - `crew` TankCrew, required
    - `members` CrewMember[], required
      - `memberId` string, required
      - `roles` string[], required
      - `image` string, nullable, required: The member's WG tankopedia nation portrait, by slot position.
      - `roleBadge` string, nullable, required: The role badge overlaid on the portrait (its primary role).
      - `skills` string[], required: Skill keys this member can learn (its roles' + universal).
    - `skills` CrewSkill[], required
      - `key` string, required
      - `name` string, required
      - `image` string, nullable, required
      - `description` string, required
      - `isPerk` boolean, required
      - `role` string, required: Owning role (commander, gunner, ...) or 'common' (universal).
      - `effects` object[], required: Passive per-skill-level effects on a displayed characteristic; empty for situational or non-spec skills (still shown, no delta).
        - `attribute` string, required
        - `value` number, required
      - `crewLevel` number, required: Crew-training-level bonus in level points (Brothers in Arms = 5), 0 for a normal skill; applied to every crew-affected stat, not a single one.
      - `camouflage` boolean, required: The Camouflage skill: scales the camo values by 0.57 + 0.43 * level, applied to camo rather than a single characteristic.
  - `fieldMods` TankFieldMods, required
    - `treeKey` string, required: The post-progression tree: the vehicle's role or its own special tree.
    - `steps` FieldModStep[], required
      - `level` number, required
      - `kind` 'feature' | 'modification' | 'pair', required
      - `feature` object, nullable, required
        - `key` string, required
        - `name` string, required
        - `description` string, nullable, required
        - `image` string, nullable, required
      - `modification` FieldModItem, required
        - `key` string, required
        - `name` string, required
        - `image` string, nullable, required
        - `effects` object[], required
          - `attribute` string, required
          - `type` 'mul' | 'add', required
          - `value` number, required
      - `pair` object, nullable, required
        - `key` string, required
        - `first` FieldModItem, required
          - `key` string, required
          - `name` string, required
          - `image` string, nullable, required
          - `effects` object[], required
            - `attribute` string, required
            - `type` 'mul' | 'add', required
            - `value` number, required
        - `second` FieldModItem, required
          - `key` string, required
          - `name` string, required
          - `image` string, nullable, required
          - `effects` object[], required
            - `attribute` string, required
            - `type` 'mul' | 'add', required
            - `value` number, required
  - `skillTree` TankSkillTree, required (unresolved $ref)
  - `modes` VehicleMode[], required: The alternate driving modes the vehicle can switch into (siege for Swedish TDs, rapid for wheeled vehicles), each as ratio factors over the base spec plus any gun-arc override. Empty for the vast majority of vehicles, which have no mode.
    - `kind` 'siege' | 'rapid', required
    - `switchOnTime` number, required
    - `switchOffTime` number, required
    - `factors` object[], required
      - `attribute` string, required
      - `type` 'mul' | 'add', required
      - `value` number, required
    - `depression` number, nullable, required
    - `elevation` number, nullable, required
  - `mechanic` string, nullable, required: Which mechanic the vehicle's second state is, where it has one: siege, wheeled, dualGun, twinGun, turboshaftEngine, shellParamsSwitcher or lowChargeShot. The client tags all of them the same way, so this is what tells them apart. Null for the vast majority of vehicles, which have no second state.
  - `paintLock` 'locked' | 'factory', required: Why the game refuses to let a vehicle be dressed: `locked` for one whose customization is off entirely (a mode-locked machine, or a reward vehicle that is itself a style), `factory` for one wearing a livery of its own that cannot come off (the Skorpion G, the Tiger 131). The customization filters carry none of this, so a wardrobe built from them alone offers paint on every one of them.
  - `moeHistory` object[], required
    - `day` string, required
    - `mark1` number, required
    - `mark2` number, required
    - `mark3` number, required
  - `momHistory` object[], required
    - `day` string, required
    - `class3` number, required
    - `class2` number, required
    - `class1` number, required
    - `ace` number, required
  - `hasHistory` boolean, required: Whether the tank has anything on its History tab: a recorded characteristic change, or a known lifecycle event (release / dev). Drives the History tab's visibility.
  - `client` 'live' | 'ct', required: Which game client these characteristics were read from. Only the vehicle's own data follows it: server stats, marks and best players always come from the region's live client, since a test server has no players to measure.
  - `testVersion` string, nullable, required: The Common Test build that rebalances this tank, e.g. `2.4.0.5415`. Null when no test is running or when this one leaves the vehicle alone. Present whichever client the payload is for, so a caller can offer the other one.
  - `rating` object, required: The community's verdict in three figures, for the hero badge and the page's structured data. The full breakdown is on `/ratings`.
    - `overall` number, nullable, required: Plain mean of the community's Overall stars, 1 to 5.
    - `votes` integer, required
    - `reviewCount` integer, required
  - `model` object, nullable, required: Which build of the geometry mirror the 3D hero should read this vehicle at, so it uses the one this payload was resolved against instead of resolving its own. Two answers that drift apart mean the vehicle is downloaded twice. Null for a vehicle the mirror does not carry, which is drawn from a photograph.
    - `root` string, required: The build of the geometry mirror this vehicle should be read at, as a CDN root pinned to a commit. The viewer uses this one rather than resolving a build of its own: two answers that drift apart mean the vehicle is downloaded twice.
    - `path` string, required: Where the vehicle's files sit under `vehicles/`. Unguessable from the code: the nation folder is not the nation the scripts name, and a quarter of the catalogue draws from another vehicle's meshes.
    - `worn` string, nullable, required: The 3D style this vehicle is issued already wearing, where it is issued one. Most reward vehicles ship no geometry of their own, so `path` points at the tank underneath and this is the rest of the answer.
    - `geometry` string[], required: The vehicle's meshes, as absolute URLs on the build above. Empty when the mirror would not answer for its manifest, which costs the head start and nothing else.
    - `textures` string[], required: The maps those meshes wear, at the standard definition the hero opens on. The client's shared micro-grain is deliberately absent: it is six megabytes, every vehicle names it, and the viewer stands the tank up without it.

---

[API](https://skmtc.dev/unicum/apis/unicum-gg-api.md) · [All operations](https://skmtc.dev/unicum/apis/unicum-gg-api/llms.txt) · [OpenAPI document](https://skmtc.dev/unicum/apis/unicum-gg-api/revisions/7a7d79a26001?raw)
