For developers

Public API JSON · v1

Everything WG-Watch displays is also available as JSON. No key, no sign-up, free — built for Discord bots, clan websites and your own analysis.

No API key No sign-up Free
5
Endpoints
0
API keys required
0
Sign-up required
JSON
Response format
01

Try it right now

No key needed. Open this address in your browser or fetch it with curl:

Terminal · curl GET
$ curl https://wg-watch.com/api/v1/online
$ curl https://wg-watch.com/api/v1/player/519363312/eu
$ curl "https://wg-watch.com/api/v1/online/history?game=wot&region=eu&days=30"
$ curl https://wg-watch.com/api/v1/clan/500214248/eu/weekly
$ curl https://wg-watch.com/api/v1/status
$

The index lists every endpoint and its limit in machine-readable form. https://wg-watch.com/api/v1

02

Endpoints

Seven GET endpoints under one common base URL. Every response carries Cache-Control headers and the same meta object with attribution.

Base URL: https://wg-watch.com/api/v1
GET /api/v1/player/{account_id}/{region}

Player profile with WN8, WN7 and efficiency already calculated.

GET /api/v1/player/{account_id}/{region}/history

Daily history plus 7, 30 and 90 day deltas. Parameter: days (1–400).

GET /api/v1/clan/{clan_id}/{region}

Clan details including averages across the actual member profiles.

GET /api/v1/clan/{clan_id}/{region}/weekly

Weekly clan digest: member activity, top lists and aggregated statistics.

GET /api/v1/online

Current player counts per game and region, with the measured peak.

GET /api/v1/online/history

Daily series of player counts. Parameters: game, region, days.

GET /api/v1/status

Service health and timestamps for public data caches.

03

One envelope for every response

Success or failure comes down to a single field. Everything else has a fixed place — one error handler covers all endpoints.

success — true on success, false on error. A single check is enough.

meta — source, version, timestamp and the attribution (meta.attribution), ready to link.

data — the actual payload of the endpoint. On errors, the error object takes its place.

200 OK GET /api/v1/clan/500214248/eu
{
  "success": true,
  "meta": {
    "source": "WG-Watch.com",
    "version": "v1",
    "generated": "2026-08-06T18:05:12+00:00",
    "attribution": "Data via wg-watch.com — please credit when reusing."
  },
  "data": {
    "clan_id": 500214248,
    "tag": "MERCY",
    "name": "No Mercy",
    "members_count": 100,
    "ratings": {
      "elo_10": 1146,
      "elo_8": 1000,
      "skirmish_win_rate": 63.59,
      "skirmish_battles": 4590
    },
    "members": {
      "profiles_measured": 98,
      "avg_win_rate": 55.24,
      "avg_damage": 1804,
      "avg_battles": 20983
    },
    "cached_at": 1786031123
  }
}

members.profiles_measured — states how many member profiles the averages were actually computed from.

04

What this API gives you that the Wargaming API does not

Finished metrics instead of raw data: WN8, WN7 and efficiency come pre-calculated — including the expected values you would otherwise have to maintain yourself.

History: Wargaming only returns the current state. WG-Watch collects daily measurements and returns deltas over periods.

Clan averages from real profiles: not the Elo number, but the actual win rate of the members — stating how many profiles it is based on.

Aggregated server population: per-minute values, daily series and peaks that the WG API does not expose in this form.

05

Rate limits

Limits apply per IP address per minute and are deliberately generous. Exceeding them returns HTTP 429, with a Retry-After header telling you when to continue.

requests per minute

pro IP
/api/v1/player/{account_id}/{region} 30/min
/api/v1/player/{account_id}/{region}/history 20/min
/api/v1/clan/{clan_id}/{region} 30/min
/api/v1/clan/{clan_id}/{region}/weekly 10/min
/api/v1/online 60/min
/api/v1/online/history 30/min
/api/v1/status 60/min

Live lookups have stricter limits

Profiles not in the cache yet are fetched live from Wargaming — 5 requests per minute per client, 30 per minute in total. Cache hits only count against the regular endpoint limit.

5
/min · IP
30
/min · total
06

Ground rules

01

Credit the source. If you reuse the data, link wg-watch.com. Nothing more is asked — and it ships in every response under meta.attribution.

02

Respect the limits. Limits apply per IP per minute. Exceeding them returns HTTP 429 with Retry-After. Need more? Just ask via the contact form.

03

Cache responses. Every response carries a Cache-Control header with a sensible duration. Honour it and the limits will never get in your way.

04

Read-only. GET is the only method. There is no write access.

How fresh is the data?

Player and clan data is served from cache and may be up to one hour old — the cached_at field gives the exact time as a Unix timestamp. If a player profile is not cached yet, the API fetches it live from Wargaming and stores it; the response then carries live_fetched: true. Live lookups are limited more strictly (5/minute per client, 30/minute shared) and do not yet include WN8/WN7/efficiency — ratings.available: false marks that case. Those values appear once the profile has been opened on the site. Player counts are accurate to the minute.

From the browser

The API sends Access-Control-Allow-Origin: * — calling it straight from your clan website works without proxying through your own server.

Versioning

The version is part of the path — currently v1. New versions appear alongside it, never on top: existing integrations will not break.

Response headers

Cache-Control states how long the data stays valid, CORS allows direct access from the browser, and Retry-After ends the guesswork after a 429.

Access-Control-Allow-Origin: *
Cache-Control: public, max-age=300
Content-Type: application/json; charset=utf-8
Retry-After: 60            # nur bei HTTP 429
07

Errors

Errors always come in the same shape. error.code is stable and machine-readable; error.message is for humans and may change.

404 error.code · player_not_found
{
  "success": false,
  "error": {
    "code": "player_not_found",
    "message": "No such player on this region.",
    "region": "eu"
  }
}
HTTP Endpoint Description
400 invalid_account_id Account ID missing or not a positive integer.
400 invalid_region Region is not one of eu, na, asia.
404 player_not_found No account with this ID on this region.
404 clan_not_cached Clan not in cache yet.
404 no_history No snapshots recorded for this account.
404 unknown_endpoint Path does not match any endpoint.
404 unknown_version API version in the path does not exist.
429 rate_limited Per-IP limit exceeded. See Retry-After.
429 rate_limited_global Shared live-lookup budget exhausted this minute.
503 database_unavailable Temporary backend problem.

Something missing?

Missing a field, or a whole endpoint? Get in touch — the API grows with what people actually need.

Go to contact form