World of Warcraft API Update - Visions of N'zoth

I am unsure why there is such little information provided by the /profile/user/wow endpoint.

There is often little use for characters not relatively close to the level cap of recent years. Unfortunately, this endpoint doesn’t provide the level of characters used. My account has 105 characters on it, only a very slim few of them I’d be interested in keeping on my website, but I have to make requests for each character to determine their levels.

2 Likes

This post is the summary of a discussion over the Community Discord Server

The new endpoint to retrieve a user’s character list /profile/user/wow is returning a very different set of data. With this change comes new challenges for a sign on process. Most apps will show the user a list of their characters after the OAuth2 process is completed to allow them to pick one or a few relevant characters.

The old community endpoint /wow/user/characters returns important data for each char like: level, gender, playable_class_id, playable_race_id and so on.

This allowed us to build character selection interfaces like the one below without having to fetch any other data for each character.

Since the new profile endpoint /profile/user/wow return only an index of user’s characters without any character specific information, it is necessary to call at least one more request per character before rendering the character selection list.

The new logic would be:

  1. Authenticate the user using OAuth2 Authorization Code Flow
  2. Retrieve a list of characters by calling /profile/user/wow
  3. For each returned character call /profile/wow/character/{realmSlug}/{characterName}

It is technically possible to fetch many requests asynchronously given the programming language you are using offer such feature. However there are some considerations for a few use cases:

  1. The API allows up to 100 req/s for each pair of credentials.
  2. It is a bit more complex to manage those limits in a real concurrent environment so it can present a challenge for average programmers.
  3. A lot of people use the API to create simple guild pages/application forms for raid groups. And a lot of those apps run on shared hosts, where the number of concurrent requests are very limited.
  4. The “refresh” process must be done every time a user comes back so their character’s level (and possibly other data) are always up-to-date.
  5. If you don’t fetch character data concurrently it may take almost a second per character depending on server’s location. Which means almost a minute for loading data for an account with 50 characters.

If the new endpoint could return at least the following additional data per character it would be really nice:

  • level
  • playable_class_id
  • playable_race_id
2 Likes

Is it normal that I’m getting 403 forbidden when trying the new /profile/user/wow endpoint?

I’m using this URL with my access token which works for every other endpoint:
https://us.api.blizzard.com/profile/user/wow?namespace=profile-us&locale=en_US&access_token=TOKEN

Have you signed in and out of wow after the API update ?

Oh I see… I didn’t take that into account. my bad!

The Character Completed Quest Profile API doesn’t list completion for the Weekly Island Expeditions quest Azerite for the Alliance - Quest - World of Warcraft which shows up correctly in the old Community API

For the auction data API, can we assume the Last-Modified value returned in the headers is somewhat accurate and serves the same purpose as the “lastModified” field from the community API:

cache-control: public, max-age=86400
content-type: application/json;charset=UTF-8
last-modified: Thu, 13 Feb 2020 23:11:24 GMT

{“files”:[{“url”:"…",“lastModified”:1581643309000}]}

This was useful in that we could wait until an update was expected, rather than constantly using resources to the hit the API for each realm to check for new data.

Thanks!

1 Like

In the absence of any alternative, that’s what I’m using.

I hope you can reconsider and add character level to the profile endpoint.

Thanks. 2 things:

  • Returns 403 in TW and KR regions. See hxxp://does.theapi.work/
  • The old API would spread out updates across the hour. This new API appears to update most (all?) realms in a region pretty much in the same minute. This could cause you some bandwidth stampeding issues (and make it harder for those of us who survey all realms to do so in a timely fashion) but whatev.

Internally, there is a distinction between commodities and “regular” items via unit_price versus buyout. We decided to keep this distinction in the API. While it may feel unnecessary currently (because the unit price is effectively a buyout price), this distinction:

  1. Signals whether or not an item is a commodity without bloating every returned item with an item type field. (We’re concerned with adding more fields than necessary to the Auctions endpoint because of how large auction dumps may become for high population realms.)

  2. Insulates the API from changes to commodity functionality that may occur.

We really appreciate the detailed feedback here, and we’re discussing this internally.

Thanks for the report!

You are correct. Every endpoint in the Game Data and Profile APIs returns a Last-Modified response header indicating when the document was last updated. This is particularly useful to determine the last updated time for profile and dynamic data (namespaced via profile-{region} or dynamic-{region} respectively) or when checking against static data that has been cached on your end (namespaced via static-{region}).

The Game Data and Profile APIs also support the If-Modified-Since request header, allowing you to avoid the download overhead if the document has been unmodified since the specified date. This is particularly useful when interacting with the Auction House API because response sizes may be rather large. See this reference for more information on the header.

We’re seeing a couple of issues in KR and TW, and we’re working on a fix:

  1. New Visions of N’zoth endpoints listed in the original announcement post returning a 403 Forbidden.
  2. Character profiles not updating properly on logout.

We’re aware of this and monitoring usage. If you notice any issues, please let us know!

These issues have been resolved.

Seconding this. My use case is extremely similar, providing a list of the users characters for them to select the one that should be linked to the account and used as a main.
Having the requested 3 data points level, class and race back in the character list would make things a lot easier for my end users (because I’m definitely not going to make individual calls for each of their characters)

1 Like

+1 this

Being able to show at a high level the list of characters available (Name, Realm, lvl, race, class, thumbnail) and having this data to allow users to select which characters they wish to share is very important both for performance reasons and privacy reasons

Feedback about Journal API

Old Endpoint for Zones:
/wow/zone/209
New Endpoint for Instances:
/data/wow/journal-instance/64?namespace=static-eu

  • Zone/Instance ID do not match: 209 ≠ 64
  • Missing urlSlug (Usefull for zone thumbnail from render-eu.worldofwarcraft. com/zones/{urlSlug}-small.jpg)
  • Old Boss ID do not match with new Encounter ID and there is no reference to it

Are we going to get a definitive awnser for the /profile/user/wow endpoint on whether more information will be added for specific characters (race, level, gender, class) or should I start to change my code?

March 16 is coming fast and it would be great to know if I should start making changes right now or wait for an update so I don’t have to do the work twice.

Thank you.

1 Like

Based on the feedback in this thread, we are evaluating adding the following additional fields to the account profile:

  • level
  • playable_class
  • playable_race
  • faction
  • gender

We do not yet have a date as to when these will be available. Therefore, please plan to pull this character information from the character endpoint by March 16th.

This solution unfortunately will not support a link to the avatar image.

In the long run we envision better ways to aggregate data across different endpoints instead of duplicating data throughout the API. We’re discussing how to handle these situations. But for now, we’re working on adding the above fields in the Account Profile endpoint to solve your use cases.

Thanks again for all your feedback!

3 Likes

These fields are now available for accounts that log out after this week’s weekly reset in each region.

Users will need to perform an account logout for this data to update. An account logout involves either quitting the game (via closing the WoW executable) or logging out of the WoW client (e.g. via the “Back” button on the character select screen) from all WoW accounts on a Battle.net account. Logging out of your character to character select or realm select does not suffice. You must be logged out of all WoW accounts at the same time to trigger the event.

3 Likes

The Game Data Endpoint for Spells returns 404 for every azerite spell power in any Azerite item.

Some examples:
/data/wow/spell/280013?namespace=static-8.3.0_32861-eu
/data/wow/spell/263978?namespace=static-8.3.0_32861-eu
/data/wow/spell/279778?namespace=static-8.3.0_32861-eu

It seems its not just azerite spell powers. Lots of other base spells return 404 as well. Spells from talents and pvp talents seem to work but not base spells for a given class.

For example
/data/wow/spell/255937?namespace=static-us&locale=en_US (Wake of the ashes) works
but
/data/wow/spell/20271?namespace=static-us&locale=en_US (Judgment) does not. Returns a 404/BLZWEBAPI00000404

Similarly for other classes as well. Tried warrior spells, talents/pvptalents seem to work but base spells return 404 responses.

As noted in the previous post, all azerite spell powers also return 404.