---
title: "Battle"
method: GET
path: "/{region}/battles/{id}"
tags: ["Players"]
---

# Battle

`GET /{region}/battles/{id}`

## Request

- Base URL: `https://unicum.gg/api`
- URL: `https://unicum.gg/api/{region}/battles/{id}`
- Auth: none required

One whole battle: every vehicle on both teams, each one named where this site holds the account and each one rated on this battle alone against its own vehicle's expected values. Wargaming publishes nothing about a single battle, so a battle exists here only because somebody who was in it shared it through the unicum.gg mod. 404 when we hold no such battle.

## Path parameters

- `region` 'eu' | 'na' | 'asia', required: Game server region.
- `id` string, required: The game's own battle id (`arenaUniqueID`), as digits. A string, not a number: it runs to 19 digits.

## Response `200`

Successful response

- BattleDetailResponse: A whole battle, as the clients that played it reported it.
  - `mapImage` string, nullable, required: The minimap this battle was played on, resolved for its own mode: a mode that redraws the map into a smaller play area ships its own picture, and this is that one.
  - `mapBounds` object, nullable, required: The arena's extent in metres, which places a replay's coordinates on that image.
    - `bottomLeft` object, required
      - `x` number, required
      - `z` number, required
    - `upperRight` object, required
      - `x` number, required
      - `z` number, required
  - `mapOverlay` MapOverlay, required
    - `bounds` object, required
      - `bottomLeft` object, required
        - `x` number, required
        - `z` number, required
      - `upperRight` object, required
        - `x` number, required
        - `z` number, required
    - `widthMeters` number, required
    - `heightMeters` number, required
    - `bases` object, required
      - `team1` Marker[], required
        - `left` number, required
        - `top` number, required
      - `team2` Marker[], required
        - `left` number, required
        - `top` number, required
    - `spawns` object, required
      - `team1` Marker[], required
        - `left` number, required
        - `top` number, required
      - `team2` Marker[], required
        - `left` number, required
        - `top` number, required
    - `controlPoint` Marker, required
      - `left` number, required
      - `top` number, required
    - `pois` object[], required
      - `marker` Marker, required
        - `left` number, required
        - `top` number, required
      - `type` number, required
  - `id` string, required
  - `startedAt` string, date-time, required
  - `map` string, required
  - `gameplay` string, nullable, required
  - `battleType` number, required
  - `duration` number, nullable, required
  - `winnerTeam` number, nullable, required
  - `finishReason` number, nullable, required
  - `clientVersion` string, nullable, required
  - `server` string, nullable, required: The cluster it ran on, when the results carried one.
  - `reporters` number, required: How many clients reported this battle.
  - `hasReplay` boolean, required: Whether the archive holds this battle's replay file, and so whether the 2D viewer has anything to draw. False for most battles: a replay only exists when a player who was there had recording on.
  - `mark` object, nullable, required: Where one player's mark of excellence stood when this battle ended, and where it stood at the end of their previous battle in the same tank, with `account` naming whose gun it is. The figure comes from that client's own results and belongs to them alone, so a reader showing another participant must not show it. The game gives no 'before' of its own, so the movement is only knowable by looking at the battle before. Null when the reporting client is too old to send it, when the mode does not count towards marks, or when no earlier battle in that tank is held.
    - `percent` number, required
    - `previous` number, nullable, required
    - `account` number, required
  - `participants` BattleParticipant[], required: Every vehicle, both teams, by team then by damage.
    - `id` number, required: Battle-scoped vehicle id, unique within the battle.
    - `account` number: Wargaming account id, absent for a bot.
    - `player` BattlePlayer, required: A participant's public identity.
      - `accountId` number, required
      - `nickname` string, required
      - `clanTag` string, nullable, required
      - `clanColor` string, nullable, required
      - `isVerified` boolean, required: The owner signed in here with this Wargaming account.
      - `isSupporter` boolean, required: An active, non-anonymous support subscription.
      - `twitchLogin` string, nullable, required: Their Twitch channel, when the account has linked one.
      - `tournamentWins` number, required
      - `tournamentFeaturedWins` number, required
      - `tournamentBestTitle` string, nullable, required
      - `onslaughtBestTier` string, nullable, required
      - `onslaughtBestRank` number, nullable, required
      - `onslaughtSeasons` number, required
    - `team` number, required
    - `tank` object, nullable, required
      - `id` number, required
      - `name` string, required
      - `shortName` string, required
      - `tier` number, required
      - `type` string, required
      - `nation` string, required
      - `tag` string, required
      - `slug` string, nullable, required
    - `own` object, required: Their whole line, exactly as the client's results reported it: damage, radio, track, stun, blocked, received, shots, hits, piercings, spotted, kills, lifeTime, deathReason, capturePoints, xp, credits, health, maxHealth.
    - `medals` number[]: The medals this battle awarded them, by the game's own ids. Absent when there are none, which is the usual case.
    - `rating` object, required: What this battle scored them, keyed by metric (`wn7`, `wn8`, `wnx`), against their own vehicle's expected values.
    - `loadouts` object[]: What this vehicle had fitted, one entry per life. Absent for almost every participant, and that is the designed state: a loadout exists only where a recording of the battle carried it, which means the player who recorded it and any team mate they followed after dying. Nothing is ever known this way about the other team.
      - `life` number, required: Counted from zero, in the order the lives were played. Always zero outside a mode with respawns.
      - `optDevices` string[], required: The optional devices fitted, by slot. A free slot is a null in place, because a device's grade and category depend on which slot it sits in. An item no catalogue here knows keeps its number under an `unknown:` prefix rather than becoming a null, so a filled slot is never mistaken for an empty one.
      - `boosters` string[], required: Directives fitted, by slot, a free one being null.
      - `consumables` string[], required: Consumables carried, by slot, a free one being null.
      - `shells` object[], required: The rounds loaded, in the client's own order.
        - `name` string, required
        - `type` string, required: ARMOR_PIERCING, ARMOR_PIERCING_CR, HOLLOW_CHARGE or HIGH_EXPLOSIVE, which is what picks the round's icon.
        - `premium` boolean, required
        - `count` number, required
      - `crew` object[], required: One entry per seat, each with its own skills. Kept per seat rather than flattened: for the five skills every seat can learn, how many of the crew trained it is the whole effect.
        - `role` string, required: commander, gunner, driver, radioman or loader.
        - `skills` string[], required: Skills trained, in the order they were learned.

---

[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)
