Skip to content

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 /equipment endpoint. 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.