GW2 WvW API Reference
1. API Overview
The Guild Wars 2 API (Application Programming Interface) is a free, publicly accessible REST API maintained by ArenaNet that exposes game data in JSON format. It powers dozens of third-party tools including GW2Efficiency, Discretize, Snow Crows, and — most relevantly — MistIntel.
The majority of WvW endpoints — matches, objectives, worlds, scores — are publicly accessible without authentication. An API key is only required for personal account data (your WvW rank, reward track progress, etc.).
2. Authentication & API Keys
API keys are generated in-game via Account → Application Keys. A key grants access to specific permission scopes based on what you select when creating it.
| Permission | What it accesses | Needed for WvW? |
|---|---|---|
account | Basic account info, world ID | Yes — to read your current world |
progression | WvW rank, achievements, reward tracks | Yes — for personal progression data |
pvp | PvP stats — not WvW | No |
guilds | Guild roster, bank, upgrades | Optional — for guild-specific tools |
characters | Character builds, equipment | Not for WvW intel |
wallet | Currency amounts | No |
Pass the key via the Authorization: Bearer {API_KEY} header or as an access_token query parameter:
3. Rate Limits
ArenaNet applies rate limiting to API requests to prevent abuse. Typical limits:
- ~600 requests per minute per IP for unauthenticated requests
- ~300 requests per minute per API key for authenticated requests
- Exceeding limits returns HTTP
429 Too Many Requests - Cache responses aggressively — match data updates every ~5 minutes; no need to poll faster
Excessive API hammering can result in IP bans. For WvW match data, polling every 30–60 seconds is sufficient and well within limits. Use the If-None-Match ETag header to avoid re-downloading unchanged data.
4. WvW Endpoints
GET /v2/wvw/matches
Returns all current WvW matches. The primary endpoint for real-time tracking.
Key fields in response:
| Field | Type | Description |
|---|---|---|
id | string | Match ID (e.g. "2-1") |
start_time | string (ISO8601) | Match start timestamp |
end_time | string (ISO8601) | Match end (reset) timestamp |
worlds | object | World IDs for red/blue/green |
maps | array | Per-map objective ownership data |
scores | object | Current score per team |
victorypoints | object | VP totals per team |
skirmishes | array | Skirmish score history |
Sample response (abridged):
GET /v2/wvw/scores
Lightweight endpoint returning just the current scores for matches — useful if you only need score data without the full match object.
GET /v2/wvw/stats
Returns kill/death statistics for each team in a match.
GET /v2/wvw/objectives
Returns the static metadata (name, position, type, chat link) for WvW objectives. Use this to build a reference map of all objectives.
Sample response:
GET /v2/wvw/upgrades
Returns information about WvW objective upgrades — tiers, automatic upgrades, guild upgrades.
GET /v2/wvw/abilities
Returns all WvW Abilities (passive upgrades unlocked with WvW rank points): names, descriptions, costs, and tiers.
GET /v2/wvw/ranks
Returns WvW Rank information: rank tiers, titles, and XP thresholds.
GET /v2/wvw/rewardtracks
Lists all available WvW Reward Tracks including the Gift of Battle track and Skirmish tracks.
GET /v2/worlds
Returns world (server) names and IDs. Essential for mapping world IDs in match data to human-readable names.
GET /v2/account (with WvW data)
Requires API key with account permission. Returns your account's current WvW world ID.
GET /v2/guild/:id/teams
Requires guild API key. Returns PvP team data — note this is PvP not WvW specific, but guild IDs from WvW claims can be resolved here.
5. Key Response Schemas
Match Map Object
Objective Object (inside match)
6. Live Fetch Examples (JavaScript)
These examples show how to query the WvW API from a browser or Node.js environment.
Get Current Match for a World
Get All Objective Names Map
Detect Flipped Objectives (Diff)
7. Polling Strategy
WvW match data updates server-side approximately every 5 minutes (aligned to the PPT tick). A good polling strategy:
- Poll every 30–60 seconds — frequent enough to detect flips quickly without hammering the API.
- Use ETag / If-None-Match — if data has not changed, the API returns HTTP 304 with no body, saving bandwidth.
- Cache objective metadata — the
/v2/wvw/objectivesstatic data changes rarely; cache it for the session. - Cache world names — the
/v2/worldsdata is static between game updates. - Back off on errors — if you receive 429 or 5xx, wait before retrying.
8. How MistIntel Uses the API
MistIntel is built entirely on the GW2 API and processes it through a real-time pipeline:
- Server-side polling of
/v2/wvw/matchesevery 30 seconds for all active matches. - Diff detection — comparing current vs previous objective ownership to detect flips in real time.
- WebSocket push — flip events are pushed instantly to all connected browser clients.
- Score projection — current PPT is calculated from live objective ownership and projected forward to estimate end-of-skirmish scores.
- Map rendering — objective coordinates from
/v2/wvw/objectivesare overlaid on map tile imagery to show live ownership.
The GW2 API is free, open, and well-documented. Whether you want a simple Discord bot that posts flips or a full-scale tracking dashboard, the WvW API provides everything you need. The community-maintained API:2 wiki page is the authoritative reference.
See the API in Action
MistIntel processes the GW2 WvW API in real time — live map ownership, flip alerts, PPT projections, and more.
Open MistIntel →