World of Warcraft Community API Migration


#1

Greetings, travelers!

We are kicking off a full scale migration from the old World of Warcraft Community API to the new World of Warcraft Game Data API and World of Warcraft Profile API. On 2019-12-16T08:00:00Z, the Community API will be turned off. All clients will need to migrate to the new Game Data and Profile API endpoints by then.

We realize that this is an aggressive timeline. As you’ll see in the Migration Report below, many of the new endpoints are not available yet, and may only become available closer to the deadline date. Additionally, while we plan on migrating as much functionality as possible, we do not anticipate being able to support every single use case that the Community API supports. We know this is not ideal, and we want to apologize in advance for any trouble this may cause.

Because of how involved this is, we intend to be as transparent as possible throughout the migration process. We would like to be clear about why we are doing this, the status of each API, and associated risks involved in the migration. We plan on updating this forum post regularly as well as responding to questions that arise in this thread. We understand that you will have many questions throughout this process, and we’re here to help.

May your blades never dull!

Araspir


Data Protection Notice and FAQ
#2

Migration Report

The full migration status report can be found here:

World of Warcraft Community API Migration Status


#3

Why are we doing this?

We have two primary reasons for migrating from the Community API to the Game Data and Profile API.

1. Improved Technology

Without getting into specifics, the Community API is built on top of an old technology stack that we are moving away from. The new Game Data and Profile API is built on a completely separate technology stack that is more modern and maintainable. It offers increased stability, less maintenance cost, a more standard and predictable pattern of interaction, and greater extensibility. We hope that the new technology stack will propel us forward in the future, allowing us to create more new and interesting experiences for you.

2. Privacy Law

With the evolving Data Protection initiatives worldwide, we are leveling up our data privacy infrastructure and championing best practices throughout all of our APIs. By migrating these endpoints to the Game Data and Profile APIs instead of continuing to support the outdated Community API, we hope to more effectively reach the level of quality we’re looking for.

Because of the amount of work required to comply with new privacy law, and our overall goal of moving off of the Community API due to technological concerns, we have decided that the most reasonable course forward is to perform the migration now.


#4

FAQ

When is the deadline to migrate off of the Community API?

The deadline to migrate off of the Community API is 2019-12-16T08:00:00Z.

Does this apply to World of Warcraft or WoW Classic?

This applies to World of Warcraft. The Community API does not support WoW Classic.

In many cases, the Game Data and Profile API contain multiple endpoints that map to a single endpoint in the Community API. Will rate limits be increased?

We are actively monitoring rate limiting on the Game Data and Profile API endpoints and will adjust limits as necessary. If you notice you are hitting rate limits much more often than you used to, please let us know so that we can investigate.

My use case was supported in the Community API, but is not supported in the new Game Data and Profile API. What do I do?

Please respond to this thread so that we may verify the missing support and triage your use case. Again, while we do not guarantee that every use case from the Community API will be supported in the Game Data and Profile API, we will try our best to be as transparent as possible with respect to what we are planning to support.

There are discrepancies between the official Developer Portal website and this forum post. Where do I find the most up-to-date information?

While we will strive to keep parity between the official documentation and this forum post, the nature of ongoing discussions and feedback cycles can end up causing divergences. Always refer to the forum post for the latest information, and please let us know of any inconsistencies; we’ll fix those as soon as we can.


#5

Changelog

2019/10/17: Endpoints marked in progress for Quest and Character Quests. For more information, see World of Warcraft Community API Migration Status.

2019/10/03: Endpoints made available for Character Hunter Pets, Character Mounts, Character Pets, Character Pet Slots, and Character Reputation. For more information, see World of Warcraft Community API Migration Status.

2019/10/02: Initial release.


pinned #6

#7

Thanks for the advance notice on this. :+1:

My use case was supported in the Community API, but is not supported in the new Game Data and Profile API. What do I do?

Please respond to this thread so that we may verify the missing support and triage your use case.

The greatest discrepancy I see right away is how the Game Data API has a dearth of item data compared to the Community API. It’s most pronounced in our loss of item stats, bonus/context data, etc. Example:
/data/wow/item/141423 vs /wow/item/141423?bl=41,1562,1808,3573

This will cause me to shut down uncommon-tooltips dot com and move back to Wowhead tooltips, but that’s no great loss, I suppose.

I may have more comments related to the character API but I need to review their differences again. Maybe all the extra endpoints in the profile api cover what we need from the community api.


#8

Thanks for bringing this up. You are correct - the item data in Game Data API at /data/wow/item/{id} does not support the additional bonus list and creation context data. This is a gap we have identified internally, and there are ongoing discussions occurring, but we do not have any information to share at this time.


#10

Is there a way to call multiple endpoints in one request?

Let’s say I want to call character profile, achievements, specializations, media, and titles. Do I need to make 5 calls to the API or is there a way to call all of these in one go?

EDIT - and status. So 6 endpoints in one call?


#11

No - That’s more of a REST API thing than anything though. If the API scheme was built using GraphQL, you could group them all up into one request, but this approach generally works better for being able to pick apart the data that you need and makes the engineering on Blizzard’s side a bit easier to maintain and expand.


#13

I’m sorry. I’m not familiar with REST. I only use PHP’s json decoder. So I’m not entirely sure what you mean.

But couldn’t blizzard add a /all for the character endpoint that returns all endpoints under the character endpoint?

Maybe that’s just me not knowing about REST, I admit… but I’m just looking at ways to reduce the requests, that’s all.

Yesterday, my site made one character request per character… now it’s making 6 character requests per character (per update). Granted my site is tiny… Only roughly 146 characters (split between 4 players), but that’s still 876 requests being made instead of the 146 requests made yesterday.


#14

What is your concern regarding the increased number of requests ?

876 requests are less than 3% of our hourly quota, takes only 2-3 min to execute them all with a well written code and the overall data is not much larger than it used to be with the community endpoint.

Just trying to understand so we can help with some alternatives.


#15

It’s not really the number of requests by themself. You’re right that I am nowhere near hitting the hourly rate, and due to internet latency, I can’t hit the per second rate.

But it’s that internet latency that’s the problem. Every single request that I make takes… I’d say probably half of a second. These 6 requests take 3 seconds per character. And longer once Blizzard releases more stuff like Professions and stuff.


#16

You can send them in parallel, using multiple connections or async.


#17

Yes - definitely send them in parallel. You can reference curl_multi_init for php to get going. PHP isn’t natively multi-threaded, so you will need to do some tweaking to send off requests as fast as possible.

I would not expect for any endpoints in the future to be clumped together into an /all type endpoint. They are more intensive and usually return more data than needed - that’s why there are so many smaller endpoints. You can selectively grab what you need and reduces processing for both you and Blizzard.


#18

My PHP script is single-threaded and I’m not going to introduce that kind of complexity into my script.

Thanks anyway, but that’s not really a feasible idea.


#19

Hello,

I would like to give my opinions on a few functions i have checked.

Migration status document list community api “pet master list” function is being migrated to Game data api “pet index” function.

However, “pet index” seems to lack creatureId information along with lots of others. CreatureId is used as npc id to create wowhead tooltip or link to wowhead page.

Also, as you have mentioned under FAQ post, in many cases game data api requires multiple calls. But this is especially bad for game data index functions (that return a collection of items or realms or whatever) since they contain very little useful information, and you are almost always guaranteed to make lots of individual function calls to gather information for each entry.

For example, game data api “realm index” contains id, realm slug and realm name (in all localizations if no input locale parameter is set). Since there is no realm localization information in this function return, which localized name to use cannot be determined here. These information has to be gathered by making individual function calls for each realms to get realm information. Slug name returned by “realm index” has some unicode char differences from community api values. Also no connected realm information under “realm index” function, you need to make a call to “connected realms index”, which return a list of hrefs which you have to call each of them individually to get connected realms for each realm.

In this example, data that can be gathered with 2 function calls (community api “realm master list” and game data api “realm index” and joining them) now has to be gathered by making hundreds of function calls.

Again, for Item class and subclass list, data that can be gathered by making one call to get all class and subclass information from community api has to be converted to making an item class index call then individual calls for each class to get their subclass. This case is not as bad as realm information gathering case, only 20 calls instead of 1, but is a general trend for game data api’s index functions.

I hope you will have more time to review this migration process and consider making some adjustments or additions to current game data api functions, porting current community api functions to your new infrastructure. In its current state, this process looks more like a service shutdown of community api than migration to game data api.

Regards,


#20

So… I bit the bullet (Yeah I know. Bad saying is bad) and rewrote my script to do this.

I saved about 4 seconds on the execution time.

Not much time saving BUT I did write a more efficient way to do the calls. One that will hopefully allow me to expand it later without gaining too much on execution time.

Thanks for the suggestion.


#21

In the Profile API I’m seeing a few different things / missing information:

In the Characters Pets Collection Summary there’s no unique identifier for pets (as you can have up to 3 of each) to keep similar pets apart. In the Community API there’s a battlePetGuid that is unique for each pet.

The Characters Mounts Collection Summary seems to return all mounts (on an account?) that a character has, not just the ones that can be used, meaning Alliance and Horde specific mounts are mixed in together. There’s also no indication in there or from the Data API (Mount Index or Mount) whether a mount if Alliance or Horde specific.