WoW: Forever API notes
What the Blizzard Battle.net API returns for World of Warcraft: Forever. Last checked 2026-10-31 22:45 UTC.
Blizzard hasn't announced or documented a Forever API. These notes come from probing the public API with a normal client credentials token, and the account profile with a user token from my own Battle.net login. Things can change or disappear without notice, especially around launch on November 4.
Short version
static-forever name is a 403.So right now you can list the realms, read most of the game data, and see your own characters through the account profile. Looking up characters and guilds by name doesn't work yet.
Making a request
Nothing special. Get an app token with the client credentials flow and pass the Forever namespace. The hosts are the normal regional ones.
curl -u "$CLIENT_ID:$CLIENT_SECRET" -d grant_type=client_credentials https://oauth.battle.net/token
curl -H "Authorization: Bearer $TOKEN" \
"https://eu.api.blizzard.com/data/wow/realm/index?namespace=dynamic-forever-eu&locale=en_GB"
Namespaces follow the usual pattern: dynamic-forever-eu, dynamic-forever-us, profile-forever-eu and so on. The static one is the exception, it carries a build number: static-1.60.1_70399-forever-eu (same for us and tw). 70399 is not the client build (70707), so expect it to change with patches. The account profile links to it, which is the easiest way to find the current one. The response header battlenet-namespace echoes the one you used.
Other headers worth knowing: battlenet-schema names the document type (realm, revision 1), and cache-control: max-age=86400 means a response may be cached for a day. Every document currently has the same last-modified: Oct 30, 23:46:51 GMT. Nothing has changed since.
403 or 404?
This is how you tell what's open. On an existing route, a namespace that doesn't exist (try dynamic-bogus-eu) gives 403. A namespace that exists but has nothing at that path gives 404. That's how we know profile-forever is live: an unknown character returns 404, the same request with a made up namespace returns 403.
One catch: a route that doesn't exist at all is a 404 in any namespace, closed or not. /data/wow/hardcore/index on static-forever is a 404, not a 403.
The static namespace only answers to its exact versioned name. static-forever-eu and static-1.60.1_70707-forever-eu (the client build) are both 403.
Regions
| Host | Region id | Name | Tag | patch_string |
|---|---|---|---|---|
us.api.blizzard.com | 91 | CAMWOW North America | US | 1.60.1 |
eu.api.blizzard.com | 93 | CAMWOW Europe | EU | 1.60.1 |
tw.api.blizzard.com | 94 | CAMWOW Taiwan | TW | 1.60.1 |
kr.api.blizzard.com | 403 Not open yet, also with locale=ko_KR. 92 is probably reserved for it. | |||
gateway.battlenet.com.cn | 401 China needs its own developer account, so we couldn't check. | |||
CAMWOW looks like Blizzard's internal name for Forever. It's in every region and realm name.
Realms and rulesets
Forever doesn't show realms to players, you pick a ruleset instead. Behind that are normal realms, and the API lists them. The ruleset is the realm's type:
| type.type | type.name | Ruleset in game | EU | US / AU | TW |
|---|---|---|---|---|---|
NORMAL | Normal | Normal (PvE) | 8 | 9 | 1 |
PVP | PvP | PvP | 8 | 9 | 1 |
RP | Roleplaying | RP | 2 | 3 | 0 |
PVP_RP | Roleplaying PvP | RP-PvP | 2 | 4 | 0 |
Counts are game realms only. The lists also contain service entries (Web, GMSS, Partner, Account, Log, CSI) that are clearly not for players. They're greyed out below. EU realms report enGB and Europe/Paris, US and AU realms enUS and America/Chicago, TW realms zhTW and Asia/Taipei.
The realm document looks like this:
GET /data/wow/realm/camwow-eu4-realm-3-pve?namespace=dynamic-forever-eu
{
"id": 6937,
"region": { "name": "CAMWOW Europe", "id": 93 },
"connected_realm": { "href": ".../data/wow/connected-realm/6937?namespace=dynamic-forever-eu" },
"name": "CAMWOW EU4 Realm 3 PvE",
"category": "English",
"locale": "enGB",
"timezone": "Europe/Paris",
"type": { "type": "NORMAL", "name": "Normal" },
"is_tournament": false,
"slug": "camwow-eu4-realm-3-pve"
}
EU realms (26)
| Id | Name | Slug | Ruleset | Timezone |
|---|---|---|---|---|
| 6841 | CAMWOW EU4 Realm 1 PvE | camwow-eu4-realm-1-pve | Normal (PvE) | Europe/Paris |
| 6842 | CAMWOW EU4 Realm 2 PvP | camwow-eu4-realm-2-pvp | PvP | Europe/Paris |
| 6853 | CAMWOW EU4 Web | camwow-eu4-web | service | Europe/Paris |
| 6855 | CAMWOW EU5 Realm 1 PvE | camwow-eu5-realm-1-pve | Normal (PvE) | Europe/Paris |
| 6856 | CAMWOW EU5 Realm 2 PvP | camwow-eu5-realm-2-pvp | PvP | Europe/Paris |
| 6860 | CAMWOW EU5 Web | camwow-eu5-web | service | Europe/Paris |
| 6869 | CAMWOW EU4 GMSS 1 | camwow-eu4-gmss-1 | service | Europe/Paris |
| 6870 | CAMWOW EU4 GMSS 2 | camwow-eu4-gmss-2 | service | Europe/Paris |
| 6891 | CAMWOW EU4 Partner | camwow-eu4-partner | service | Europe/Paris |
| 6937 | CAMWOW EU4 Realm 3 PvE | camwow-eu4-realm-3-pve | Normal (PvE) | Europe/Paris |
| 6938 | CAMWOW EU4 Realm 4 PvP | camwow-eu4-realm-4-pvp | PvP | Europe/Paris |
| 6939 | CAMWOW EU4 Realm 5 PvE | camwow-eu4-realm-5-pve | Normal (PvE) | Europe/Paris |
| 6940 | CAMWOW EU4 Realm 6 PvP | camwow-eu4-realm-6-pvp | PvP | Europe/Paris |
| 6941 | CAMWOW EU4 Realm 7 PvE | camwow-eu4-realm-7-pve | Normal (PvE) | Europe/Paris |
| 6942 | CAMWOW EU4 Realm 8 PvP | camwow-eu4-realm-8-pvp | PvP | Europe/Paris |
| 6943 | CAMWOW EU4 Realm 9 RP PvP | camwow-eu4-realm-9-rp-pvp | RP-PvP | Europe/Paris |
| 6944 | CAMWOW EU4 Realm 10 RP | camwow-eu4-realm-10-rp | RP | Europe/Paris |
| 6945 | CAMWOW EU5 Realm 3 PvE | camwow-eu5-realm-3-pve | Normal (PvE) | Europe/Paris |
| 6946 | CAMWOW EU5 Realm 4 PvP | camwow-eu5-realm-4-pvp | PvP | Europe/Paris |
| 6947 | CAMWOW EU5 Realm 5 PvE | camwow-eu5-realm-5-pve | Normal (PvE) | Europe/Paris |
| 6948 | CAMWOW EU5 Realm 6 PvP | camwow-eu5-realm-6-pvp | PvP | Europe/Paris |
| 6949 | CAMWOW EU5 Realm 7 PvE | camwow-eu5-realm-7-pve | Normal (PvE) | Europe/Paris |
| 6950 | CAMWOW EU5 Realm 8 PvP | camwow-eu5-realm-8-pvp | PvP | Europe/Paris |
| 6951 | CAMWOW EU5 Realm 9 RP PvP | camwow-eu5-realm-9-rp-pvp | RP-PvP | Europe/Paris |
| 6952 | CAMWOW EU5 Realm 10 RP | camwow-eu5-realm-10-rp | RP | Europe/Paris |
| 7013 | CAMWOW EU6 Web | camwow-eu6-web | service | Europe/Paris |
US and AU realms (51)
| Id | Name | Slug | Ruleset | Timezone |
|---|---|---|---|---|
| 6794 | CAMWOW US1 Realm 1 PvE | camwow-us1-realm-1-pve | Normal (PvE) | America/Chicago |
| 6796 | CAMWOW US2 Realm 1 PvE | camwow-us2-realm-1-pve | Normal (PvE) | America/Chicago |
| 6797 | CAMWOW AU1 Realm 1 PvE | camwow-au1-realm-1-pve | Normal (PvE) | America/Chicago |
| 6798 | CAMWOW US1 Realm 2 PvP | camwow-us1-realm-2-pvp | PvP | America/Chicago |
| 6800 | CAMWOW US2 Realm 2 PvP | camwow-us2-realm-2-pvp | PvP | America/Chicago |
| 6801 | CAMWOW AU1 Realm 2 PvP | camwow-au1-realm-2-pvp | PvP | America/Chicago |
| 6805 | CAMWOW US2 CSI 80 | camwow-us2-csi-80 | service | America/Chicago |
| 6807 | CAMWOW US2 CSI 81 | camwow-us2-csi-81 | service | America/Chicago |
| 6811 | CAMWOW US2 Account | camwow-us2-account | service | America/Chicago |
| 6813 | CAMWOW US1 Web | camwow-us1-web | service | America/Chicago |
| 6815 | CAMWOW US2 Web | camwow-us2-web | service | America/Chicago |
| 6819 | CAMWOW US2 Log | camwow-us2-log | service | America/Chicago |
| 6829 | CAMWOW US2 CSI 82 | camwow-us2-csi-82 | service | America/Chicago |
| 6830 | CAMWOW US2 CSI 83 | camwow-us2-csi-83 | service | America/Chicago |
| 6831 | CAMWOW US2 CSI 84 | camwow-us2-csi-84 | service | America/Chicago |
| 6832 | CAMWOW US2 CSI 85 | camwow-us2-csi-85 | service | America/Chicago |
| 6833 | CAMWOW US2 CSI 86 | camwow-us2-csi-86 | service | America/Chicago |
| 6834 | CAMWOW US2 CSI 87 | camwow-us2-csi-87 | service | America/Chicago |
| 6835 | CAMWOW US2 CSI 88 | camwow-us2-csi-88 | service | America/Chicago |
| 6882 | CAMWOW US1 GMSS 1 | camwow-us1-gmss-1 | service | America/Chicago |
| 6883 | CAMWOW US1 GMSS 2 | camwow-us1-gmss-2 | service | America/Chicago |
| 6921 | CAMWOW US1 Realm 3 PvE | camwow-us1-realm-3-pve | Normal (PvE) | America/Chicago |
| 6922 | CAMWOW US1 Realm 4 PvP | camwow-us1-realm-4-pvp | PvP | America/Chicago |
| 6923 | CAMWOW US1 Realm 5 PvE | camwow-us1-realm-5-pve | Normal (PvE) | America/Chicago |
| 6924 | CAMWOW US1 Realm 6 PvP | camwow-us1-realm-6-pvp | PvP | America/Chicago |
| 6925 | CAMWOW US1 Realm 7 PvE | camwow-us1-realm-7-pve | Normal (PvE) | America/Chicago |
| 6926 | CAMWOW US1 Realm 8 PvP | camwow-us1-realm-8-pvp | PvP | America/Chicago |
| 6927 | CAMWOW US1 Realm 9 RP PvP | camwow-us1-realm-9-rp-pvp | RP-PvP | America/Chicago |
| 6928 | CAMWOW US1 Realm 10 RP | camwow-us1-realm-10-rp | RP | America/Chicago |
| 6929 | CAMWOW US2 Realm 3 PvE | camwow-us2-realm-3-pve | Normal (PvE) | America/Chicago |
| 6930 | CAMWOW US2 Realm 4 PvP | camwow-us2-realm-4-pvp | PvP | America/Chicago |
| 6931 | CAMWOW US2 Realm 5 PvE | camwow-us2-realm-5-pve | Normal (PvE) | America/Chicago |
| 6932 | CAMWOW US2 Realm 6 PvP | camwow-us2-realm-6-pvp | PvP | America/Chicago |
| 6933 | CAMWOW US2 Realm 7 PvE | camwow-us2-realm-7-pve | Normal (PvE) | America/Chicago |
| 6934 | CAMWOW US2 Realm 8 PvP | camwow-us2-realm-8-pvp | PvP | America/Chicago |
| 6935 | CAMWOW US2 Realm 9 RP PvP | camwow-us2-realm-9-rp-pvp | RP-PvP | America/Chicago |
| 6936 | CAMWOW US2 Realm 10 RP PvP | camwow-us2-realm-10-rp-pvp | RP-PvP | America/Chicago |
| 6989 | CAMWOW US3 GMSS 1 | camwow-us3-gmss-1 | service | America/Chicago |
| 6991 | CAMWOW US3 Web | camwow-us3-web | service | America/Chicago |
| 7051 | CAMWOW US2 CSI 180 | camwow-us2-csi-180 | service | America/Chicago |
| 7052 | CAMWOW US2 CSI 181 | camwow-us2-csi-181 | service | America/Chicago |
| 7053 | CAMWOW US2 CSI 182 | camwow-us2-csi-182 | service | America/Chicago |
| 7054 | CAMWOW US2 CSI 183 | camwow-us2-csi-183 | service | America/Chicago |
| 7055 | CAMWOW US2 Realm 11 RP | camwow-us2-realm-11-rp | RP | America/Chicago |
| 7056 | CAMWOW AU1 Realm 3 RP | camwow-au1-realm-3-rp | RP | America/Chicago |
| 7057 | CAMWOW AU1 Realm 4 RP PvP | camwow-au1-realm-4-rp-pvp | RP-PvP | America/Chicago |
| 7072 | CAMWOW US2 CSI 184 | camwow-us2-csi-184 | service | America/Chicago |
| 7073 | CAMWOW US2 CSI 185 | camwow-us2-csi-185 | service | America/Chicago |
| 7074 | CAMWOW US2 CSI 186 | camwow-us2-csi-186 | service | America/Chicago |
| 7075 | CAMWOW US2 CSI 187 | camwow-us2-csi-187 | service | America/Chicago |
| 7076 | CAMWOW US2 CSI 188 | camwow-us2-csi-188 | service | America/Chicago |
TW realms (5)
| Id | Name | Slug | Ruleset | Timezone |
|---|---|---|---|---|
| 6871 | CAMWOW TW4 Realm 1 PvE | camwow-tw4-realm-1-pve | Normal (PvE) | Asia/Taipei |
| 6872 | CAMWOW TW4 Realm 2 PvP | camwow-tw4-realm-2-pvp | PvP | Asia/Taipei |
| 6879 | CAMWOW TW4 GMSS 1 | camwow-tw4-gmss-1 | service | Asia/Taipei |
| 6880 | CAMWOW TW4 GMSS 2 | camwow-tw4-gmss-2 | service | Asia/Taipei |
| 6892 | CAMWOW TW4 Partner | camwow-tw4-partner | service | Asia/Taipei |
Endpoints
We tried every route from the retail Game Data and Profile docs, about 107 in total, plus every link the open documents point to. Same result on eu and us. Here's what matters:
| Namespace | Path | Status | Notes |
|---|---|---|---|
dynamic-forever | /data/wow/region/index | 200 | One region per API host: 93 on eu, 91 on us, 94 on tw. |
dynamic-forever | /data/wow/region/{regionId} | 200 | id, name, tag and patch_string (currently 1.60.1, same as the client build). Only the host's own region, region/91 on the eu host is a 404. |
dynamic-forever | /data/wow/realm/index | 200 | Every realm: id, name, slug. |
dynamic-forever | /data/wow/realm/{realmSlug or id} | 200 | Realm details: type (the ruleset), category, locale, timezone, region and a link to its connected realm. Slug and id both work. |
dynamic-forever | /data/wow/search/realm | 200 | Works, with localized names. Same data as the index. |
dynamic-forever | /data/wow/mythic-keystone/index | 200 | Only links. dungeon/index behind it is an empty 200, season/index a 404. Leftover from retail. |
dynamic-forever | /data/wow/search/{connected-realm, item, spell, creature, mount, journal-encounter, media} | 200 | These search documents exist but return zero results. Others (achievement, quest, pet, title, toy, guild, ...) are a 404. |
dynamic-forever | /data/wow/connected-realm/index | 404 | |
dynamic-forever | /data/wow/connected-realm/{id} | 404 | Even the link from the realm document is a 404. |
dynamic-forever | /data/wow/connected-realm/{id}/auctions | 404 | Also auctions/index and the classic auction house ids 2, 6 and 7. |
dynamic-forever | /data/wow/auctions/commodities | 404 | |
dynamic-forever | /data/wow/token/index | 404 | |
dynamic-forever | /data/wow/pvp-season/index | 404 | Same for pvp-region and the leaderboards. |
dynamic-forever | /data/wow/leaderboard/hall-of-fame/... | 404 | |
dynamic-forever | every Game Data document asked on the dynamic namespace | 404 | Items, classes and so on are not hiding in the dynamic namespace either. |
static-forever | all Game Data documents | 403 | The plain name is refused. Use the versioned name below. |
static-1.60.1_70399-forever | /data/wow/playable-class, playable-race, playable-specialization | 200 | 9 classes, 10 races (the eight originals plus 95 High Order Skyborne and 96 Windshaper Skyborne), 27 specs. Race documents list which classes each race can be. |
static-1.60.1_70399-forever | /data/wow/item/{id}, media/item/{id}, item-class, item-set | 200 | Items with names, quality, level, required level and prices, in every locale. 154 item sets. Icons come from render.worldofwarcraft.com/forever/.... |
static-1.60.1_70399-forever | /data/wow/search/{item, spell, creature, mount, media} | 200 | Searchable. Item and media searches are capped at 1000 results, spell (833) and creature (877) are not. |
static-1.60.1_70399-forever | /data/wow/achievement, achievement-category | 200 | 176 achievements in 29 categories with their own ids (62041 and up), for example the "Rank 3", "Rank 7" and so on achievements. |
static-1.60.1_70399-forever | /data/wow/mount, pet, toy, title, profession, quest, reputation-faction | 200 | 141 mounts, 109 pets, 12 toys, 41 titles, 13 professions, 56 factions. Quests by id, with area and description. |
static-1.60.1_70399-forever | /data/wow/talent-tree, talent, creature-family, power-type, guild-crest | 200 | 651 talents in 27 spec and 9 class trees, 196 guild crest emblems. |
static-1.60.1_70399-forever | /data/wow/journal-instance, journal-encounter, heirloom, pvp-talent, covenant | 200 | Exist but empty. |
static-1.60.1_70399-forever | /data/wow/spell/{id}, creature/{id} | 404 | Not every id exists. spell/133 (Fireball) and creature/448 (Hogger) are 404s, even though the searches return spells and creatures. |
profile-forever | /profile/user/wow | 200 | Account profile, needs a user token. Lists your characters with first name and surname. See below. |
profile-forever | /profile/user/wow/collections | 404 | Linked from the account profile, empty for a fresh level 1 account. Same for mounts, pets, toys, heirlooms and transmogs. |
profile-forever | /profile/user/wow/protected-character/{realmId}-{characterId} | 404 | Linked from the account profile, not filled yet. |
profile-forever | /profile/wow/character/{name}-{surname} | 404 | The link the account profile gives for each character. No realm in it. Also 404 with a realm slug. See below. |
profile-forever | /data/wow/guild/{realmSlug}/{guild} | 404 | Same for roster, achievements and activity: accepted, nothing to find yet. |
The 404s on connected realms are worth watching. Every realm links to its connected realm, but those links don't resolve yet. Auctions hang off connected realms, so the auction house won't be there until they do.
Characters and guilds
Thanks to Makkybis for the tip that the account profile works. It needs a user token: the authorization code flow with scope wow.profile, so the player logs in with their own Battle.net account. Your app needs a registered redirect URL for that.
GET /profile/user/wow?namespace=profile-forever-eu (user token)
"wow_accounts": [{
"id": 1234567,
"characters": [{
"character": { "href": ".../profile/wow/character/davina-asaria?namespace=profile-forever-eu" },
"protected_character": { "href": ".../profile/user/wow/protected-character/6855-716333?namespace=profile-forever-eu" },
"name": "Davina",
"surname": "Asaria",
"id": 716333,
"playable_class": { "name": "Priest", "id": 5 },
"playable_race": { "name": "Troll", "id": 8 },
"gender": { "type": "FEMALE", "name": "Female" },
"faction": { "type": "HORDE", "name": "Horde" },
"level": 1
}]
}]
What this tells us:
- Surname.
nameis the first name,surnameis a new field. Retail and Classic characters on the same account don't have it. - No realm field. Retail characters in the account profile have a
realmobject, Forever characters don't. The realm only shows up in the protected character link:6855-716333is realm id and character id. Realm 6855 iscamwow-eu5-realm-1-pve, one of the Normal (PvE) realms. A Skyborne warrior on the same account sits on the same realm. - Character URLs without a realm. The character link is
/profile/wow/character/davina-asaria: first name and surname, no realm slug. That fits Forever names being unique per region. Right now it's a 404, and so is/profile/wow/character/camwow-eu5-realm-1-pve/davina-asaria. Maybe level 1 characters aren't published (retail doesn't show characters below level 10 either), maybe it just isn't switched on yet. - Logging out updates it. Characters created through the Name Register only showed up after logging into the game, opening the character list and logging out again. Before that the account profile was a 404 in every region.
- 404 means no characters. An account without Forever characters gets a 404, not an empty list. Classic Era does the same for an account without Era characters.
Guilds are still a 404 everywhere. We also tried a dozen staff and test names on the GM, Partner and Web realms in EU and US. Nothing.
The version server
Not part of the Battle.net API, but public and useful. https://us.version.battle.net/v2/products/wowf/versions is what the launcher asks for. Forever is product wowf:
Region | BuildId | VersionsName
us | 70707 | 1.60.1.70707
eu | 70707 | 1.60.1.70707
cn | 70707 | 1.60.1.70707
kr | 70707 | 1.60.1.70707
tw | 70707 | 1.60.1.70707
So the client is ready for all five regions, including China (downloads through NetEase's CDN) and Korea, even though the Korean API is still closed. The build config calls it WOW-70707patch1.60.1_Retail.
Other products on the same server run Forever builds (1.60.x) too:
| Product | Build | Probably |
|---|---|---|
wowf | 1.60.1.70707 | The live client |
wow_classic_beta | 1.60.1.70532 | The beta that just ended |
wow_cn_beta | 1.60.1.70450 | A Chinese Forever beta |
wowdev2, wownev12 | 1.60.1.70707 | Internal branches, level with live |
wowdev5, wowv6 | older 1.60.1 builds | Internal branches |
A higher build on wowdev2 or wownev12 than on wowf is the earliest sign of a patch. At the time of writing nothing newer than the launch build is staged.
The product config (from the CDN, linked in the versions file) has a few facts the launcher uses:
- 10 languages: enUS, deDE, esES, esMX, frFR, ruRU, koKR, ptBR, zhTW, zhCN. No Italian.
- Minimum spec: 4 cores at 3 GHz, 8 GB RAM, 64 bit, Windows 10 1903 or macOS 12.
- There's a
Wow-arm64.exe, so it runs natively on Windows on ARM. - It installs into the shared World of Warcraft folder, subfolder
_forever_. Multiboxing is allowed, offline play isn't.
The official website
The armory and realm status pages on worldofwarcraft.blizzard.com use a game version key in the URL, for example /en-gb/worldsoul/eu/armory/character/... for retail. The keys the site knows right now are modern, classic1x, classicann and classic. Forever isn't one of them: /en-gb/forever/eu/server-status is the same generic page you get for a made up key, and the armory under /forever/ is a 404. Expect a new key there once Forever gets its armory.
The status page loads its data from /graphql, but that endpoint only takes the site's own safelisted queries. Not usable from outside.
Not tested
- The China API, which needs a separate developer account.