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.
Try it right now
No key needed. Open this address in your browser or fetch it with curl:
The index lists every endpoint and its limit in machine-readable form. https://wg-watch.com/api/v1
Endpoints
Seven GET endpoints under one common base URL. Every response carries Cache-Control headers and the same meta object with attribution.
https://wg-watch.com/api/v1
/api/v1/player/{account_id}/{region}
Player profile with WN8, WN7 and efficiency already calculated.
/api/v1/player/{account_id}/{region}/history
Daily history plus 7, 30 and 90 day deltas. Parameter: days (1–400).
/api/v1/clan/{clan_id}/{region}
Clan details including averages across the actual member profiles.
/api/v1/clan/{clan_id}/{region}/weekly
Weekly clan digest: member activity, top lists and aggregated statistics.
/api/v1/online
Current player counts per game and region, with the measured peak.
/api/v1/online/history
Daily series of player counts. Parameters: game, region, days.
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.
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.
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.
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.
Ground rules
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.
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.
Cache responses. Every response carries a Cache-Control header with a sensible duration. Honour it and the limits will never get in your way.
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
Errors
Errors always come in the same shape. error.code is stable and machine-readable; error.message is for humans and may change.
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