Blizzard API coverage¶
Where the suite currently stands against Blizzard's Battle.net API families. Status is derived from the actual codebase — endpoints wired and called in production code paths, not planned or aspirational.
Legend:
- Implemented — endpoint is called from a Sync or CharacterDataProvider and its data lands in Drupal storage.
- Partial — endpoint is wrapped in an Api class but not all of its data is persisted, or only specific sub-resources are covered.
- Planned — explicitly planned; extension point exists but no implementation.
- Not started — no current coverage.
- Won't implement — deliberately not synced; hardcoded or out of scope by design.
Blizzard splits their Battle.net WoW API into two families: Game Data (global, app-token) and Profile (per-player, user-OAuth-token). Coverage is tracked separately.
Note on auth in this codebase: Blizzard accepts an app-scoped token on most Profile endpoints too — the per-user OAuth requirement only applies to endpoints that touch the logged-in user's own data (/profile/user/wow, Protected Character Profile, etc.). Today this suite calls every per-character and per-guild Profile endpoint with the app token via BattleNetClient::get() unless a user token is passed explicitly. Only AccountProfileApi in wow_user passes a stored user token — it needs one because /profile/user/wow is user-scoped.
Game Data APIs¶
| API family | Representative endpoints | Module | Status | Notes |
|---|---|---|---|---|
| Achievement | /data/wow/achievement-category/index + /{id}/data/wow/achievement/index + /{id}/data/wow/media/achievement/{id} |
wow_achievement |
Implemented | Categories synced into two taxonomies (character + guild). Achievements synced as content entities via queue. Media resolved on demand. |
| Azerite Essence | — | — | Not started | |
| Connected Realm | /data/wow/connected-realm/index + /{id} |
wow_realm |
Partial | Called for realm metadata lookup; connected-realm groupings are used but no dedicated storage for connection group entities. |
| Covenant | — | — | Not started | |
| Creature | /data/wow/creature/{id}/data/wow/creature-type/index/data/wow/creature-family/index/data/wow/media/creature-display/{id}/data/wow/search/creature |
wow_creature |
Implemented | Creature types and families synced as taxonomies. Individual creatures looked up on demand. Creature display media resolved per creature. Search API used for remote search fallback. |
| Guild Crest | /data/wow/media/guild-crest/{type}/{id} |
wow_guild |
Partial | Called to fetch crest media for a specific guild. The crest catalog endpoints (guild-crest/components/index) are not synced. |
| Heirloom | — | — | Not started | |
| Item | /data/wow/item-class/index + /{id}/data/wow/item/{id}/data/wow/media/item/{id}/data/wow/search/item |
wow_item |
Partial | Item classes synced as a taxonomy. Items fetched on demand when referenced (by achievement criteria, gear slots, etc.) — no bulk item catalog. Canonical page at /wow/item/{id}/{slug}. Blizzard Search API used for remote search fallback. |
| Journal | — | — | Not started | |
| Media (generic) | /data/wow/media/* |
core | Partial | Supported via WoWMediaTrait; each submodule pulls its own entity-type media. |
| Modified Crafting | — | — | Not started | |
| Mount | /data/wow/mount/index + /{id}/data/wow/media/mount/{id} |
wow_mount |
Implemented | |
| Mythic Keystone | — | — | Not started | |
| Mythic Raid Leaderboard | — | — | Not started | |
| Pet | /data/wow/pet/index + /{id}/data/wow/media/pet/{id} |
wow_pet |
Implemented | |
| Playable Class | /data/wow/playable-class/index + /{id}/data/wow/media/playable-class/{id} |
wow_playable_class |
Implemented | |
| Playable Race | /data/wow/playable-race/index + /{id} |
wow_playable_race |
Implemented | |
| Playable Specialization | /data/wow/playable-specialization/index + /{id}/data/wow/media/playable-specialization/{id} |
wow_playable_specialization |
Implemented | |
| Power Type | /data/wow/power-type/index + /{id} |
wow_power_type |
Implemented | |
| Profession | — | — | Not started | |
| PvP Season / Tier / Region | — | — | Not started | |
| Quest | /data/wow/quest/index/data/wow/quest/{id}/data/wow/quest-type/index |
wow_quest |
Implemented | Quest types synced as taxonomy. Quests synced as content entities via batch queue. Canonical page at /wow/quest/{id}/{slug}. |
| Realm | /data/wow/realm/index + /{id} |
wow_realm |
Implemented | |
| Region | /data/wow/region/index + /{id} |
— | Won't implement | The five regions (US, EU, KR, TW, CN) are Blizzard infrastructure, not game content — they never change. Drupal\wow\Enum\Region hardcodes them as a PHP enum with per-region API hosts, OAuth hosts, locale maps, and the CN credential separation. Syncing dynamically would add complexity for no practical benefit. |
| Reputation Faction / Tier | /data/wow/reputation-faction/index + /{id} |
wow_reputation |
Partial | Faction catalog synced. Reputation tier endpoint is not synced; tier names come from the per-character reputations data. |
| Spell | — | — | Not started | |
| Talent | — | — | Not started | |
| Tech Talent | — | — | Not started | |
| Title | /data/wow/title/index + /{id} |
wow_title |
Implemented | |
| Toy | /data/wow/toy/index + /{id}/data/wow/media/toy/{id} |
wow_toy |
Implemented | |
| WoW Token | — | — | Not started | |
| Guild (as Game Data) | /data/wow/guild/{realm}/{name}+ /roster, /achievements, /activity |
wow_guild |
Partial | GuildApi wraps all four endpoints. Only the profile endpoint and the crest media are persisted (wow_guild entity). Roster, guild achievements, and guild activity are exposed to GuildDataProvider plugins — the manager, interface, and tests exist, but no in-tree plugins consume them yet. |
Profile APIs¶
All per-character Profile endpoints run from the wow_character.sync.character service via its registered CharacterDataProvider plugins. Today those calls use the app token — Blizzard accepts that on per-character endpoints, so no user OAuth is required to fetch data for a character you know by realm + name. A user OAuth token is only used where Blizzard specifically requires it (account-profile endpoints below, and Protected Character Profile — not currently implemented).
| API family | Representative endpoints | Module | Status | Notes |
|---|---|---|---|---|
| Account Profile | /profile/user/wow |
wow_user |
Implemented | Used to list a logged-in player's characters during the selection flow. |
| Character Profile | /profile/wow/character/{realm}/{name} |
wow_character |
Implemented | Core character summary — level, class, race, faction, spec, ilvl, guild name, etc. |
| Character Media | /profile/wow/character/{realm}/{name}/character-media |
wow_character |
Implemented | Avatar + inset render cached to public://wow/character/. |
| Character Achievements | /profile/wow/character/{realm}/{name}/achievements |
wow_achievement |
Implemented | Stored in wow_achievement_progress junction. |
| Character Achievements Statistics | — | — | Not started | |
| Character Appearance | — | — | Not started | |
| Character Collections (Mounts) | /profile/wow/character/{realm}/{name}/collections/mounts |
wow_mount |
Implemented | wow_mount_collection junction. |
| Character Collections (Pets) | /profile/wow/character/{realm}/{name}/collections/pets |
wow_pet |
Implemented | wow_collected_pet junction — includes nickname, level, breed. |
| Character Collections (Toys) | /profile/wow/character/{realm}/{name}/collections/toys |
wow_toy |
Implemented | wow_toy_collection junction. |
| Character Collections (Heirlooms) | — | — | Not started | |
| Character Collections (Transmogs) | — | — | Not started | |
| Character Encounters | — | — | Not started | Dungeons + raids, PvP encounters. |
| Character Equipment | — | — | Not started | Would require wow_item item sync coverage to be meaningful. |
| Character Hunter Pets | — | — | Not started | |
| Character Mythic Keystone Profile | — | — | Not started | |
| Character Professions | — | — | Not started | |
| Character PvP | — | — | Not started | PvP bracket summaries. |
| Character Quests | — | — | Not started | |
| Character Reputations | /profile/wow/character/{realm}/{name}/reputations |
wow_reputation |
Implemented | wow_reputation_standing junction stores the base standing (tier, raw/max points, standing name). Paragon and Renown data is returned on the same endpoint but not persisted — wow_reputation_standing has no field for them. |
| Character Soulbinds | — | — | Not started | Expansion-specific. |
| Character Specializations | — | — | Not started | Active spec comes from the base Character Profile endpoint; spec history and talents are not synced. |
| Character Statistics | — | — | Not started | |
| Character Titles | /profile/wow/character/{realm}/{name}/titles |
wow_title |
Implemented | wow_title_award junction. |
| Guild (profile-scope) | — | — | Not started | Guild data currently comes entirely from the Game Data guild endpoints; per-user guild context is not separately synced. |
| Protected Character Profile | — | — | Not started | Requires an elevated OAuth scope. |
What's implemented across BOTH families¶
Per-character collection + achievement tracking is the best-covered area: it uses a Game Data catalog sync (the "what exists" dictionary) + a Profile API per-character sync (the "what this player has" overlay). This pair is fully implemented for achievements, mounts, pets, titles, toys, and reputations.
Biggest gaps¶
- Equipment / gear details — no item catalog sync, no
/equipmentendpoint. A full gear page would need both. - Mythic+ and PvP — completely untouched. These are the main competitive-content endpoints.
- Professions / recipes — also untouched. Would be a substantial addition.
- Appearance / transmog — not started.
If you're planning to use the suite for a cosmetic-collection site (mounts, pets, titles, toys, reputations, achievements), coverage is strong. For a progression-tracking site (PvP rating, raid logs, Mythic+ score), expect to build additional integration.