Miscellaneous Systems API (Retail — Patch 12.0.0)
Catch-all reference for smaller API systems that don't warrant individual skills.
Source: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API
Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026
Scope: Retail only.
Scope
This skill covers ~40 smaller API systems grouped by category:
- NPC Interaction — GossipInfo, PlayerChoice, PlayerInteractionManager, ImmersiveInteraction
- Tooltips — TooltipInfo, TooltipComparison
- UI Systems — Tutorial, SplashScreen, SlashCommand, ClickBindings, MirrorTimer
- Cinematics & Media — Cinematic, Movie, ModelInfo
- Social/Account — ReportSystem, UserFeedback, ParentalControls, RecruitAFriend
- Game Systems — ChromieTimeInfo, AlliedRaces, WarbandSceneInfo, PerksActivities
- Utility — Log, EventUtils, Localization, Locale
- Legacy — GarrisonInfo, Covenant/Soulbinds, AzeriteItem, ResearchInfo, ContributionCollector
NPC Interaction
C_GossipInfo — NPC Dialog
| Function |
Returns |
Description |
C_GossipInfo.GetOptions() |
options |
Available dialog options |
C_GossipInfo.GetText() |
text |
NPC dialog text |
C_GossipInfo.GetNumOptions() |
numOptions |
Number of options |
C_GossipInfo.SelectOption(optionID, text, confirmed) |
— |
Select dialog option |
C_GossipInfo.SelectOptionByIndex(index) |
— |
Select by index |
C_GossipInfo.GetNumAvailableQuests() |
numQuests |
Available quests |
C_GossipInfo.GetAvailableQuests() |
quests |
Available quest list |
C_GossipInfo.GetNumActiveQuests() |
numQuests |
Active quests |
C_GossipInfo.GetActiveQuests() |
quests |
Active quest list |
C_GossipInfo.SelectAvailableQuest(questID) |
— |
Select available quest |
C_GossipInfo.SelectActiveQuest(questID) |
— |
Select active quest |
C_GossipInfo.ForceGossip() |
forceGossip |
Force gossip display? |
C_GossipInfo.CloseGossip() |
— |
Close gossip window |
C_GossipInfo.GetPoiForUiMapID(uiMapID) |
poiInfo |
POI for map |
C_GossipInfo.GetPoiInfo(uiMapID, gossipPoiID) |
poiInfo |
Specific POI info |
C_GossipInfo.GetCustomGossipDescriptionString() |
description |
Custom description |
C_GossipInfo.RefreshOptions() |
— |
Refresh options |
Gossip Option Fields
gossipOptionID — Unique option ID
name — Option text
icon — Option icon
status — Status enum
orderIndex — Sort order
flags — Option flags
overrideIconID — Override icon
selectOptionWhenOnlyOption — Auto-select?
spellID — Associated spell
C_PlayerChoice — Player Choices
| Function |
Returns |
Description |
C_PlayerChoice.GetCurrentPlayerChoiceInfo() |
choiceInfo |
Current choice |
C_PlayerChoice.GetNumPlayerChoices() |
numChoices |
Number of choices |
C_PlayerChoice.GetPlayerChoiceOptionInfo(optionIndex) |
optionInfo |
Option details |
C_PlayerChoice.GetPlayerChoiceRewardInfo(rewardIndex) |
rewardInfo |
Reward details |
C_PlayerChoice.SendPlayerChoiceResponse(responseID) |
— |
Make choice |
C_PlayerChoice.IsWaitingForPlayerChoiceResponse() |
isWaiting |
Response pending? |
C_PlayerChoice.OnUIClosed() |
— |
UI closed callback |
C_PlayerChoice.GetRemainingTime() |
seconds |
Time limit |
C_PlayerInteractionManager — Interaction Windows
| Function |
Returns |
Description |
C_PlayerInteractionManager.ClearInteraction(type) |
cleared |
Close interaction |
C_PlayerInteractionManager.ReplaceInteraction(type, target) |
— |
Replace interaction |
C_PlayerInteractionManager.IsInteractingWithNpcOfType(type) |
isInteracting |
Interacting with type? |
C_PlayerInteractionManager.GetCurrentInteractionType() |
type |
Current interaction |
Player Interaction Types (Enum.PlayerInteractionType)
| Name |
Description |
Banker |
Bank NPC |
Merchant |
Vendor |
Trainer |
Trainer |
MailInfo |
Mailbox |
AuctionHouse |
Auction House |
GuildBanker |
Guild bank |
Transmogrifier |
Transmog NPC |
VoidStorageBanker |
Void storage |
StableManager |
Stable master |
BarberShop |
Barber shop |
C_ImmersiveInteraction — Immersive NPC
| Function |
Returns |
Description |
C_ImmersiveInteraction.GetCurrentInteraction() |
interactionInfo |
Current immersive interaction |
C_ImmersiveInteraction.IsActive() |
isActive |
Immersive mode active? |
Tooltips
C_TooltipInfo — Tooltip Data Provider
| Function |
Returns |
Description |
C_TooltipInfo.GetItemByID(itemID) |
tooltipData |
Item tooltip data |
C_TooltipInfo.GetItemByItemLink(itemLink) |
tooltipData |
Tooltip from link |
C_TooltipInfo.GetSpellByID(spellID) |
tooltipData |
Spell tooltip |
C_TooltipInfo.GetUnitAura(unit, index, filter) |
tooltipData |
Aura tooltip |
C_TooltipInfo.GetHyperlink(hyperlink) |
tooltipData |
Generic hyperlink tooltip |
C_TooltipInfo.GetInventoryItem(unit, slot) |
tooltipData |
Equipped item tooltip |
C_TooltipInfo.GetBagItem(bag, slot) |
tooltipData |
Bag item tooltip |
C_TooltipInfo.GetGuildBankItem(tab, slot) |
tooltipData |
Guild bank tooltip |
C_TooltipInfo.GetVoidStorageItem(slot) |
tooltipData |
Void storage tooltip |
C_TooltipInfo.GetAchievementByID(achievementID) |
tooltipData |
Achievement tooltip |
C_TooltipInfo.GetCurrencyByID(currencyID) |
tooltipData |
Currency tooltip |
C_TooltipInfo.GetMountBySpellID(spellID) |
tooltipData |
Mount tooltip |
C_TooltipInfo.GetPetByID(petID) |
tooltipData |
Pet tooltip |
C_TooltipInfo.GetToyByItemID(itemID) |
tooltipData |
Toy tooltip |
C_TooltipInfo.GetQuestItem(type, index) |
tooltipData |
Quest reward tooltip |
C_TooltipComparison — Item Comparison
| Function |
Returns |
Description |
C_TooltipComparison.GetItemComparisonInfo(tooltipData) |
comparisonInfo |
Compare items |
C_TooltipComparison.GetItemComparisonDelta(tooltipData) |
delta |
Stat differences |
UI Systems
Tutorial
| Function |
Returns |
Description |
C_Tutorial.AcknowledgeTutorial(tutorialID) |
— |
Mark tutorial seen |
C_Tutorial.IsTutorialFlagged(tutorialID) |
isFlagged |
Already shown? |
C_Tutorial.SetTutorialFlag(tutorialID, flagged) |
— |
Set flag |
SplashScreen
| Function |
Returns |
Description |
C_SplashScreen.AcknowledgeSplash() |
— |
Dismiss splash |
C_SplashScreen.CanViewSplashScreen() |
canView |
Can show splash? |
C_SplashScreen.RequestLatestSplashScreen() |
— |
Request latest |
C_SplashScreen.ShouldShowSplashScreen() |
shouldShow |
Should display? |
SlashCommand
| Function |
Returns |
Description |
SlashCmdList["COMMANDNAME"] |
— |
Register slash command |
SLASH_COMMANDNAME1 = "/cmd" |
— |
Define slash trigger |
hash_SlashCmdList |
— |
Internal hash table |
ClickBindings
| Function |
Returns |
Description |
C_ClickBindings.GetBindingType(modifiers, button) |
bindingType |
Binding at key combo |
C_ClickBindings.SetBindingType(modifiers, button, type) |
— |
Set binding |
C_ClickBindings.ResetBindings() |
— |
Reset all |
C_ClickBindings.GetProfileInfo() |
profileInfo |
Profile data |
MirrorTimer — Breath/Fatigue Bars
| Function |
Returns |
Description |
GetMirrorTimerInfo(index) |
timer, initial, maxValue, scale, paused, label |
Timer info |
GetMirrorTimerProgress(timer) |
value |
Timer value |
MIRRORTIMER_NUMTIMERS |
3 |
Max timers |
Cinematics & Media
Cinematic
| Function |
Returns |
Description |
OpeningCinematic() |
— |
Play opening cinematic |
CinematicFinished(id, didCancel) |
— |
Cinematic ended |
IsInCinematicScene() |
inCinematic |
In cinematic? |
StopCinematic() |
— |
Stop cinematic |
InCinematic() |
inCinematic |
Legacy cinematic check |
Movie
| Function |
Returns |
Description |
MovieFrame.PlayMovie(movieID) |
— |
Play movie |
GameMovieFinished() |
— |
Movie ended callback |
C_ModelInfo — Model Data
| Function |
Returns |
Description |
C_ModelInfo.GetModelSceneInfoByID(sceneID) |
sceneInfo |
Scene info |
C_ModelInfo.GetModelSceneActorInfoByID(actorID) |
actorInfo |
Actor info |
C_ModelInfo.GetModelSceneCameraInfoByID(cameraID) |
cameraInfo |
Camera info |
C_ModelInfo.AddActiveModelScene(frame, sceneID) |
— |
Add scene to frame |
C_ModelInfo.ClearActiveModelScene(frame) |
— |
Clear scene |
Social / Account
C_ReportSystem — Player Reports
| Function |
Returns |
Description |
C_ReportSystem.CanReportPlayer(playerLocation) |
canReport |
Can report? |
C_ReportSystem.SendReport(reportInfo) |
— |
Submit report |
C_ReportSystem.GetMajorCategoriesForReportType(reportType) |
categories |
Report categories |
C_ReportSystem.GetMinorCategoriesForMajorCategory(majorCategory) |
minorCategories |
Sub-categories |
C_ReportSystem.InitiateReportPlayer(complaintType, playerName) |
— |
Start report flow |
C_UserFeedback — Feedback System
| Function |
Returns |
Description |
C_UserFeedback.SubmitBug(description) |
— |
Submit bug report |
C_UserFeedback.SubmitSuggestion(description) |
— |
Submit suggestion |
C_ParentalControls — Parental Controls
| Function |
Returns |
Description |
C_ParentalControls.GetRemainingPlayTime() |
minutes |
Play time left |
C_ParentalControls.IsPlayTimeActive() |
isActive |
Play time limit? |
C_RecruitAFriend — Recruit A Friend
| Function |
Returns |
Description |
C_RecruitAFriend.GetRecruitInfo() |
recruitInfo |
RAF info |
C_RecruitAFriend.IsEnabled() |
enabled |
RAF enabled? |
C_RecruitAFriend.IsRecruitingEnabled() |
enabled |
Can recruit? |
C_RecruitAFriend.GenerateLink() |
link |
Generate RAF link |
C_RecruitAFriend.ClaimActivityReward(activityID) |
— |
Claim RAF reward |
C_RecruitAFriend.ClaimNextReward() |
— |
Claim next |
Game Systems
C_ChromieTimeInfo — Chromie Time (Level Scaling)
| Function |
Returns |
Description |
C_ChromieTimeInfo.GetChromieTimeExpansionOptions() |
options |
Available expansions |
C_ChromieTimeInfo.SelectChromieTimeExpansionOption(optionID) |
— |
Select expansion |
C_ChromieTimeInfo.GetChromieTimeExpansionOption(optionID) |
optionInfo |
Option info |
C_ChromieTimeInfo.GetCurrentChromieTimeExpansionOption() |
optionInfo |
Current selection |
C_ChromieTimeInfo.CloseChromieTimeUI() |
— |
Close UI |
C_AlliedRaces — Allied Races
| Function |
Returns |
Description |
C_AlliedRaces.GetAllRacialAbilitiesForRace(raceID) |
abilities |
Race abilities |
C_AlliedRaces.GetRaceInfoByID(raceID) |
raceInfo |
Race info |
C_AlliedRaces.ClearAlliedRaceDetailsGiver() |
— |
Clear details |
C_AlliedRaces.GetAlliedRaceInfo(raceID) |
info |
Allied race details |
C_WarbandSceneInfo — Warband Scenes
| Function |
Returns |
Description |
C_WarbandSceneInfo.GetWarbandSceneInfo() |
sceneInfo |
Warband scene data |
C_WarbandSceneInfo.GetCharacterEntries() |
entries |
Character positions |
C_WarbandSceneInfo.SetCharacterEntry(index, characterInfo) |
— |
Set character slot |
C_WarbandSceneInfo.GetAvailableCharacters() |
characters |
Available characters |
C_WarbandSceneInfo.SaveScene() |
— |
Save warband scene |
C_PerksActivities — Monthly Activities
| Function |
Returns |
Description |
C_PerksActivities.GetPerksActivitiesInfo() |
info |
Activities overview |
C_PerksActivities.GetTrackedPerksActivities() |
activities |
Tracked activities |
C_PerksActivities.AddTrackedPerksActivity(activityID) |
— |
Track activity |
C_PerksActivities.RemoveTrackedPerksActivity(activityID) |
— |
Untrack |
C_PerksActivities.GetPerksActivityInfo(activityID) |
activityInfo |
Activity details |
C_PerksActivities.GetAllPerksActivityTags() |
tags |
All tags/categories |
Utility Systems
C_Localization / Locale
| Function |
Returns |
Description |
GetLocale() |
locale |
Game locale (e.g., "enUS") |
GetCurrentRegion() |
regionID |
Current region |
GetCurrentRegionName() |
regionName |
Region name |
Log
| Function |
Returns |
Description |
LoggingCombat(enable) |
— |
Toggle combat log file |
LoggingChat(enable) |
— |
Toggle chat log file |
IsLoggingCombat() |
isLogging |
Combat logging? |
IsLoggingChat() |
isLogging |
Chat logging? |
C_EventUtils
| Function |
Returns |
Description |
C_EventUtils.IsEventValid(event) |
isValid |
Is event string valid? |
Legacy Systems (Deprecated/Maintained)
These systems originated in earlier expansions. APIs may still function but the content is legacy.
GarrisonInfo (WoD/Legion)
| Function |
Returns |
Description |
C_Garrison.GetFollowerInfo(followerID) |
followerInfo |
Follower data |
C_Garrison.GetFollowers(followerType) |
followers |
Follower list |
C_Garrison.GetLandingPageInfo(garrType) |
info |
Landing page |
C_Garrison.GetBuildings(garrType) |
buildings |
Building list |
C_Garrison.GetMissions(garrType) |
missions |
Available missions |
C_Garrison.IsOnGarrisonMap() |
onMap |
In garrison? |
Covenant / Soulbinds (Shadowlands)
| Function |
Returns |
Description |
C_Covenants.GetActiveCovenantID() |
covenantID |
Active covenant |
C_Covenants.GetCovenantData(covenantID) |
covenantData |
Covenant info |
C_Soulbinds.GetActiveSoulbindID() |
soulbindID |
Active soulbind |
C_Soulbinds.GetSoulbindData(soulbindID) |
soulbindData |
Soulbind info |
C_Soulbinds.GetConduitItemLevel(conduitID, conduitRank) |
itemLevel |
Conduit ilvl |
AzeriteItem (Battle for Azeroth)
| Function |
Returns |
Description |
C_AzeriteItem.IsAzeriteItem(itemLocation) |
isAzerite |
Is Azerite item? |
C_AzeriteItem.GetPowerLevel(azeriteItemLocation) |
powerLevel |
Necklace level |
C_AzeriteItem.GetAzeriteItemXPInfo(azeriteItemLocation) |
xp, totalLevelXP |
XP info |
C_AzeriteEmpoweredItem.GetPowerInfo(powerID) |
powerInfo |
Trait info |
C_AzeriteEmpoweredItem.SelectPower(azeriteItemLocation, powerID) |
— |
Select trait |
ResearchInfo (Archaeology — Removed)
| Function |
Returns |
Description |
C_ResearchInfo.GetDigSitesForMap(uiMapID) |
digSites |
Dig sites (legacy) |
Note: Archaeology as a profession was removed, but some API remnants persist.
ContributionCollector (Legion)
| Function |
Returns |
Description |
C_ContributionCollector.GetState(contributionID) |
state |
Contribution state |
C_ContributionCollector.GetName(contributionID) |
name |
Contribution name |
C_ContributionCollector.Contribute(contributionID) |
— |
Contribute |
Common Patterns
Handle NPC Gossip
local f = CreateFrame("Frame")
f:RegisterEvent("GOSSIP_SHOW")
f:SetScript("OnEvent", function()
local options = C_GossipInfo.GetOptions()
for i, option in ipairs(options) do
print(i, option.name, option.gossipOptionID)
end
-- Auto-select if only one option
if #options == 1 and options[1].selectOptionWhenOnlyOption then
C_GossipInfo.SelectOption(options[1].gossipOptionID)
end
end)
Display Player Choice
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_CHOICE_UPDATE")
f:SetScript("OnEvent", function()
local choiceInfo = C_PlayerChoice.GetCurrentPlayerChoiceInfo()
if choiceInfo then
print("Choice:", choiceInfo.questionText)
for i = 1, C_PlayerChoice.GetNumPlayerChoices() do
local option = C_PlayerChoice.GetPlayerChoiceOptionInfo(i)
if option then
print(" Option", i, ":", option.header, "-", option.description)
end
end
end
end)
Get Tooltip Data Programmatically
-- Get item tooltip text without showing tooltip
local tooltipData = C_TooltipInfo.GetItemByID(12345)
if tooltipData then
TooltipUtil.SurfaceArgs(tooltipData)
for _, line in ipairs(tooltipData.lines) do
TooltipUtil.SurfaceArgs(line)
print(line.leftText)
end
end
Check Chromie Time Status
local function ShowChromieTimeOptions()
local options = C_ChromieTimeInfo.GetChromieTimeExpansionOptions()
if options then
for _, option in ipairs(options) do
print(option.name, option.description,
option.isCurrent and "(ACTIVE)" or "")
end
end
end
Register Slash Commands
SLASH_MYADDON1 = "/myaddon"
SLASH_MYADDON2 = "/ma"
SlashCmdList["MYADDON"] = function(msg)
local cmd, args = msg:match("^(%S+)%s*(.*)")
cmd = cmd and cmd:lower() or msg:lower()
if cmd == "config" then
-- Open config
elseif cmd == "help" then
print("/myaddon config - Open settings")
print("/myaddon help - Show help")
else
print("Unknown command. Use /myaddon help")
end
end
Key Events
| Event |
Payload |
Description |
GOSSIP_SHOW |
uiTextureKit |
NPC gossip opened |
GOSSIP_CLOSED |
— |
Gossip window closed |
GOSSIP_CONFIRM |
gossipID, text, cost |
Gossip confirmation |
PLAYER_CHOICE_UPDATE |
— |
Player choice available |
PLAYER_CHOICE_CLOSE |
— |
Choice closed |
PLAYER_INTERACTION_MANAGER_FRAME_SHOW |
type |
Interaction opened |
PLAYER_INTERACTION_MANAGER_FRAME_HIDE |
type |
Interaction closed |
CINEMATIC_START |
canBeCancelled |
Cinematic starting |
CINEMATIC_STOP |
— |
Cinematic ended |
PLAY_MOVIE |
movieID |
Movie playing |
STOP_MOVIE |
— |
Movie stopped |
SPLASH_SCREEN_SHOW |
— |
Show splash screen |
SPLASH_SCREEN_HIDE |
— |
Hide splash screen |
TUTORIAL_TRIGGER |
tutorialID |
Tutorial triggered |
MIRROR_TIMER_START |
timer, value, maxValue, scale, paused, label |
Timer started |
MIRROR_TIMER_STOP |
timer |
Timer stopped |
MIRROR_TIMER_PAUSE |
timer, paused |
Timer paused |
CHROMIE_TIME_OPEN |
— |
Chromie Time UI opened |
CHROMIE_TIME_CLOSE |
— |
Chromie Time UI closed |
GARRISON_UPDATE |
— |
Garrison data updated |
PERKS_ACTIVITIES_TRACKED_UPDATED |
— |
Activity tracking changed |
Gotchas & Restrictions
- Gossip auto-select —
selectOptionWhenOnlyOption flag means the game may auto-select; don't assume GOSSIP_SHOW always waits for input.
- PlayerInteractionManager types — Use
Enum.PlayerInteractionType for type-safe checks; don't hardcode integers.
- Tooltip data API (12.0.0) — Use
C_TooltipInfo for programmatic tooltip access rather than scraping GameTooltip text lines.
- Legacy API availability — Garrison, Covenant, and Azerite APIs still exist but content is no longer current. Some may be removed in future patches.
- Cinematic blocking — Some cinematics block all addon UI; plan for
CINEMATIC_START / CINEMATIC_STOP.
- Player choices are timed — Some choices have countdowns. Check
GetRemainingTime().
- SlashCmdList keys — Command names in SlashCmdList must be UPPERCASE. The slash aliases (SLASH_NAME1) are case-insensitive for matching.
- Chromie Time level cap — Chromie Time is only available to characters below the expansion's level range.
- Gossip POI —
GetPoiForUiMapID() returns quest giver locations on the map, useful for minimap tracking.
- Report system — Reports require valid player locations; use
C_ReportSystem.CanReportPlayer() first.
1---2name: wow-api-misc-systems3description: Catch-all reference for smaller WoW Retail API systems that don't warrant individual skills. Covers Tutorial, ReportSystem, SplashScreen, Cinematic, ChromieTimeInfo, AlliedRaces, UserFeedback, WarbandSceneInfo, ResearchInfo (archaeology), Log, EventUtils, SlashCommand, ClickBindings, TooltipInfo, TooltipComparison, GossipInfo (NPC dialog), PlayerChoice, PlayerInteractionManager, ImmersiveInteraction, Localization, Locale, MirrorTimer, ModelInfo, Movie, ParentalControls, PerksActivities, RecruitAFriend, ContributionCollector, GarrisonInfo (legacy), Covenant/Soulbinds (legacy), AzeriteItem (legacy), and other utility namespaces. Use when working with NPC gossip/dialog, player choices, tooltips, tutorials, cinematics, Chromie Time, allied races, warbands, report system, or any miscellaneous game system.4---5
6# Miscellaneous Systems API (Retail — Patch 12.0.0)
7
8Catch-all reference for smaller API systems that don't warrant individual skills.
9
10> **Source:** https://warcraft.wiki.gg/wiki/World_of_Warcraft_API
11> **Current as of:** Patch 12.0.0 (Build 65655) — January 28, 2026
12> **Scope:** Retail only.
13
14---
15
16## Scope
17
18This skill covers ~40 smaller API systems grouped by category:
19
20- **NPC Interaction** — GossipInfo, PlayerChoice, PlayerInteractionManager, ImmersiveInteraction
21- **Tooltips** — TooltipInfo, TooltipComparison
22- **UI Systems** — Tutorial, SplashScreen, SlashCommand, ClickBindings, MirrorTimer
23- **Cinematics & Media** — Cinematic, Movie, ModelInfo
24- **Social/Account** — ReportSystem, UserFeedback, ParentalControls, RecruitAFriend
25- **Game Systems** — ChromieTimeInfo, AlliedRaces, WarbandSceneInfo, PerksActivities
26- **Utility** — Log, EventUtils, Localization, Locale
27- **Legacy** — GarrisonInfo, Covenant/Soulbinds, AzeriteItem, ResearchInfo, ContributionCollector
28
29---
30
31## NPC Interaction
32
33### C_GossipInfo — NPC Dialog
34
35| Function | Returns | Description |
36|----------|---------|-------------|
37| `C_GossipInfo.GetOptions()` | `options` | Available dialog options |
38| `C_GossipInfo.GetText()` | `text` | NPC dialog text |
39| `C_GossipInfo.GetNumOptions()` | `numOptions` | Number of options |
40| `C_GossipInfo.SelectOption(optionID, text, confirmed)` | — | Select dialog option |
41| `C_GossipInfo.SelectOptionByIndex(index)` | — | Select by index |
42| `C_GossipInfo.GetNumAvailableQuests()` | `numQuests` | Available quests |
43| `C_GossipInfo.GetAvailableQuests()` | `quests` | Available quest list |
44| `C_GossipInfo.GetNumActiveQuests()` | `numQuests` | Active quests |
45| `C_GossipInfo.GetActiveQuests()` | `quests` | Active quest list |
46| `C_GossipInfo.SelectAvailableQuest(questID)` | — | Select available quest |
47| `C_GossipInfo.SelectActiveQuest(questID)` | — | Select active quest |
48| `C_GossipInfo.ForceGossip()` | `forceGossip` | Force gossip display? |
49| `C_GossipInfo.CloseGossip()` | — | Close gossip window |
50| `C_GossipInfo.GetPoiForUiMapID(uiMapID)` | `poiInfo` | POI for map |
51| `C_GossipInfo.GetPoiInfo(uiMapID, gossipPoiID)` | `poiInfo` | Specific POI info |
52| `C_GossipInfo.GetCustomGossipDescriptionString()` | `description` | Custom description |
53| `C_GossipInfo.RefreshOptions()` | — | Refresh options |
54
55#### Gossip Option Fields
56
57- `gossipOptionID` — Unique option ID
58- `name` — Option text
59- `icon` — Option icon
60- `status` — Status enum
61- `orderIndex` — Sort order
62- `flags` — Option flags
63- `overrideIconID` — Override icon
64- `selectOptionWhenOnlyOption` — Auto-select?
65- `spellID` — Associated spell
66
67### C_PlayerChoice — Player Choices
68
69| Function | Returns | Description |
70|----------|---------|-------------|
71| `C_PlayerChoice.GetCurrentPlayerChoiceInfo()` | `choiceInfo` | Current choice |
72| `C_PlayerChoice.GetNumPlayerChoices()` | `numChoices` | Number of choices |
73| `C_PlayerChoice.GetPlayerChoiceOptionInfo(optionIndex)` | `optionInfo` | Option details |
74| `C_PlayerChoice.GetPlayerChoiceRewardInfo(rewardIndex)` | `rewardInfo` | Reward details |
75| `C_PlayerChoice.SendPlayerChoiceResponse(responseID)` | — | Make choice |
76| `C_PlayerChoice.IsWaitingForPlayerChoiceResponse()` | `isWaiting` | Response pending? |
77| `C_PlayerChoice.OnUIClosed()` | — | UI closed callback |
78| `C_PlayerChoice.GetRemainingTime()` | `seconds` | Time limit |
79
80### C_PlayerInteractionManager — Interaction Windows
81
82| Function | Returns | Description |
83|----------|---------|-------------|
84| `C_PlayerInteractionManager.ClearInteraction(type)` | `cleared` | Close interaction |
85| `C_PlayerInteractionManager.ReplaceInteraction(type, target)` | — | Replace interaction |
86| `C_PlayerInteractionManager.IsInteractingWithNpcOfType(type)` | `isInteracting` | Interacting with type? |
87| `C_PlayerInteractionManager.GetCurrentInteractionType()` | `type` | Current interaction |
88
89#### Player Interaction Types (Enum.PlayerInteractionType)
90
91| Name | Description |
92|------|-------------|
93| `Banker` | Bank NPC |
94| `Merchant` | Vendor |
95| `Trainer` | Trainer |
96| `MailInfo` | Mailbox |
97| `AuctionHouse` | Auction House |
98| `GuildBanker` | Guild bank |
99| `Transmogrifier` | Transmog NPC |
100| `VoidStorageBanker` | Void storage |
101| `StableManager` | Stable master |
102| `BarberShop` | Barber shop |
103
104### C_ImmersiveInteraction — Immersive NPC
105
106| Function | Returns | Description |
107|----------|---------|-------------|
108| `C_ImmersiveInteraction.GetCurrentInteraction()` | `interactionInfo` | Current immersive interaction |
109| `C_ImmersiveInteraction.IsActive()` | `isActive` | Immersive mode active? |
110
111---
112
113## Tooltips
114
115### C_TooltipInfo — Tooltip Data Provider
116
117| Function | Returns | Description |
118|----------|---------|-------------|
119| `C_TooltipInfo.GetItemByID(itemID)` | `tooltipData` | Item tooltip data |
120| `C_TooltipInfo.GetItemByItemLink(itemLink)` | `tooltipData` | Tooltip from link |
121| `C_TooltipInfo.GetSpellByID(spellID)` | `tooltipData` | Spell tooltip |
122| `C_TooltipInfo.GetUnitAura(unit, index, filter)` | `tooltipData` | Aura tooltip |
123| `C_TooltipInfo.GetHyperlink(hyperlink)` | `tooltipData` | Generic hyperlink tooltip |
124| `C_TooltipInfo.GetInventoryItem(unit, slot)` | `tooltipData` | Equipped item tooltip |
125| `C_TooltipInfo.GetBagItem(bag, slot)` | `tooltipData` | Bag item tooltip |
126| `C_TooltipInfo.GetGuildBankItem(tab, slot)` | `tooltipData` | Guild bank tooltip |
127| `C_TooltipInfo.GetVoidStorageItem(slot)` | `tooltipData` | Void storage tooltip |
128| `C_TooltipInfo.GetAchievementByID(achievementID)` | `tooltipData` | Achievement tooltip |
129| `C_TooltipInfo.GetCurrencyByID(currencyID)` | `tooltipData` | Currency tooltip |
130| `C_TooltipInfo.GetMountBySpellID(spellID)` | `tooltipData` | Mount tooltip |
131| `C_TooltipInfo.GetPetByID(petID)` | `tooltipData` | Pet tooltip |
132| `C_TooltipInfo.GetToyByItemID(itemID)` | `tooltipData` | Toy tooltip |
133| `C_TooltipInfo.GetQuestItem(type, index)` | `tooltipData` | Quest reward tooltip |
134
135### C_TooltipComparison — Item Comparison
136
137| Function | Returns | Description |
138|----------|---------|-------------|
139| `C_TooltipComparison.GetItemComparisonInfo(tooltipData)` | `comparisonInfo` | Compare items |
140| `C_TooltipComparison.GetItemComparisonDelta(tooltipData)` | `delta` | Stat differences |
141
142---
143
144## UI Systems
145
146### Tutorial
147
148| Function | Returns | Description |
149|----------|---------|-------------|
150| `C_Tutorial.AcknowledgeTutorial(tutorialID)` | — | Mark tutorial seen |
151| `C_Tutorial.IsTutorialFlagged(tutorialID)` | `isFlagged` | Already shown? |
152| `C_Tutorial.SetTutorialFlag(tutorialID, flagged)` | — | Set flag |
153
154### SplashScreen
155
156| Function | Returns | Description |
157|----------|---------|-------------|
158| `C_SplashScreen.AcknowledgeSplash()` | — | Dismiss splash |
159| `C_SplashScreen.CanViewSplashScreen()` | `canView` | Can show splash? |
160| `C_SplashScreen.RequestLatestSplashScreen()` | — | Request latest |
161| `C_SplashScreen.ShouldShowSplashScreen()` | `shouldShow` | Should display? |
162
163### SlashCommand
164
165| Function | Returns | Description |
166|----------|---------|-------------|
167| `SlashCmdList["COMMANDNAME"]` | — | Register slash command |
168| `SLASH_COMMANDNAME1 = "/cmd"` | — | Define slash trigger |
169| `hash_SlashCmdList` | — | Internal hash table |
170
171### ClickBindings
172
173| Function | Returns | Description |
174|----------|---------|-------------|
175| `C_ClickBindings.GetBindingType(modifiers, button)` | `bindingType` | Binding at key combo |
176| `C_ClickBindings.SetBindingType(modifiers, button, type)` | — | Set binding |
177| `C_ClickBindings.ResetBindings()` | — | Reset all |
178| `C_ClickBindings.GetProfileInfo()` | `profileInfo` | Profile data |
179
180### MirrorTimer — Breath/Fatigue Bars
181
182| Function | Returns | Description |
183|----------|---------|-------------|
184| `GetMirrorTimerInfo(index)` | `timer, initial, maxValue, scale, paused, label` | Timer info |
185| `GetMirrorTimerProgress(timer)` | `value` | Timer value |
186| `MIRRORTIMER_NUMTIMERS` | 3 | Max timers |
187
188---
189
190## Cinematics & Media
191
192### Cinematic
193
194| Function | Returns | Description |
195|----------|---------|-------------|
196| `OpeningCinematic()` | — | Play opening cinematic |
197| `CinematicFinished(id, didCancel)` | — | Cinematic ended |
198| `IsInCinematicScene()` | `inCinematic` | In cinematic? |
199| `StopCinematic()` | — | Stop cinematic |
200| `InCinematic()` | `inCinematic` | Legacy cinematic check |
201
202### Movie
203
204| Function | Returns | Description |
205|----------|---------|-------------|
206| `MovieFrame.PlayMovie(movieID)` | — | Play movie |
207| `GameMovieFinished()` | — | Movie ended callback |
208
209### C_ModelInfo — Model Data
210
211| Function | Returns | Description |
212|----------|---------|-------------|
213| `C_ModelInfo.GetModelSceneInfoByID(sceneID)` | `sceneInfo` | Scene info |
214| `C_ModelInfo.GetModelSceneActorInfoByID(actorID)` | `actorInfo` | Actor info |
215| `C_ModelInfo.GetModelSceneCameraInfoByID(cameraID)` | `cameraInfo` | Camera info |
216| `C_ModelInfo.AddActiveModelScene(frame, sceneID)` | — | Add scene to frame |
217| `C_ModelInfo.ClearActiveModelScene(frame)` | — | Clear scene |
218
219---
220
221## Social / Account
222
223### C_ReportSystem — Player Reports
224
225| Function | Returns | Description |
226|----------|---------|-------------|
227| `C_ReportSystem.CanReportPlayer(playerLocation)` | `canReport` | Can report? |
228| `C_ReportSystem.SendReport(reportInfo)` | — | Submit report |
229| `C_ReportSystem.GetMajorCategoriesForReportType(reportType)` | `categories` | Report categories |
230| `C_ReportSystem.GetMinorCategoriesForMajorCategory(majorCategory)` | `minorCategories` | Sub-categories |
231| `C_ReportSystem.InitiateReportPlayer(complaintType, playerName)` | — | Start report flow |
232
233### C_UserFeedback — Feedback System
234
235| Function | Returns | Description |
236|----------|---------|-------------|
237| `C_UserFeedback.SubmitBug(description)` | — | Submit bug report |
238| `C_UserFeedback.SubmitSuggestion(description)` | — | Submit suggestion |
239
240### C_ParentalControls — Parental Controls
241
242| Function | Returns | Description |
243|----------|---------|-------------|
244| `C_ParentalControls.GetRemainingPlayTime()` | `minutes` | Play time left |
245| `C_ParentalControls.IsPlayTimeActive()` | `isActive` | Play time limit? |
246
247### C_RecruitAFriend — Recruit A Friend
248
249| Function | Returns | Description |
250|----------|---------|-------------|
251| `C_RecruitAFriend.GetRecruitInfo()` | `recruitInfo` | RAF info |
252| `C_RecruitAFriend.IsEnabled()` | `enabled` | RAF enabled? |
253| `C_RecruitAFriend.IsRecruitingEnabled()` | `enabled` | Can recruit? |
254| `C_RecruitAFriend.GenerateLink()` | `link` | Generate RAF link |
255| `C_RecruitAFriend.ClaimActivityReward(activityID)` | — | Claim RAF reward |
256| `C_RecruitAFriend.ClaimNextReward()` | — | Claim next |
257
258---
259
260## Game Systems
261
262### C_ChromieTimeInfo — Chromie Time (Level Scaling)
263
264| Function | Returns | Description |
265|----------|---------|-------------|
266| `C_ChromieTimeInfo.GetChromieTimeExpansionOptions()` | `options` | Available expansions |
267| `C_ChromieTimeInfo.SelectChromieTimeExpansionOption(optionID)` | — | Select expansion |
268| `C_ChromieTimeInfo.GetChromieTimeExpansionOption(optionID)` | `optionInfo` | Option info |
269| `C_ChromieTimeInfo.GetCurrentChromieTimeExpansionOption()` | `optionInfo` | Current selection |
270| `C_ChromieTimeInfo.CloseChromieTimeUI()` | — | Close UI |
271
272### C_AlliedRaces — Allied Races
273
274| Function | Returns | Description |
275|----------|---------|-------------|
276| `C_AlliedRaces.GetAllRacialAbilitiesForRace(raceID)` | `abilities` | Race abilities |
277| `C_AlliedRaces.GetRaceInfoByID(raceID)` | `raceInfo` | Race info |
278| `C_AlliedRaces.ClearAlliedRaceDetailsGiver()` | — | Clear details |
279| `C_AlliedRaces.GetAlliedRaceInfo(raceID)` | `info` | Allied race details |
280
281### C_WarbandSceneInfo — Warband Scenes
282
283| Function | Returns | Description |
284|----------|---------|-------------|
285| `C_WarbandSceneInfo.GetWarbandSceneInfo()` | `sceneInfo` | Warband scene data |
286| `C_WarbandSceneInfo.GetCharacterEntries()` | `entries` | Character positions |
287| `C_WarbandSceneInfo.SetCharacterEntry(index, characterInfo)` | — | Set character slot |
288| `C_WarbandSceneInfo.GetAvailableCharacters()` | `characters` | Available characters |
289| `C_WarbandSceneInfo.SaveScene()` | — | Save warband scene |
290
291### C_PerksActivities — Monthly Activities
292
293| Function | Returns | Description |
294|----------|---------|-------------|
295| `C_PerksActivities.GetPerksActivitiesInfo()` | `info` | Activities overview |
296| `C_PerksActivities.GetTrackedPerksActivities()` | `activities` | Tracked activities |
297| `C_PerksActivities.AddTrackedPerksActivity(activityID)` | — | Track activity |
298| `C_PerksActivities.RemoveTrackedPerksActivity(activityID)` | — | Untrack |
299| `C_PerksActivities.GetPerksActivityInfo(activityID)` | `activityInfo` | Activity details |
300| `C_PerksActivities.GetAllPerksActivityTags()` | `tags` | All tags/categories |
301
302---
303
304## Utility Systems
305
306### C_Localization / Locale
307
308| Function | Returns | Description |
309|----------|---------|-------------|
310| `GetLocale()` | `locale` | Game locale (e.g., "enUS") |
311| `GetCurrentRegion()` | `regionID` | Current region |
312| `GetCurrentRegionName()` | `regionName` | Region name |
313
314### Log
315
316| Function | Returns | Description |
317|----------|---------|-------------|
318| `LoggingCombat(enable)` | — | Toggle combat log file |
319| `LoggingChat(enable)` | — | Toggle chat log file |
320| `IsLoggingCombat()` | `isLogging` | Combat logging? |
321| `IsLoggingChat()` | `isLogging` | Chat logging? |
322
323### C_EventUtils
324
325| Function | Returns | Description |
326|----------|---------|-------------|
327| `C_EventUtils.IsEventValid(event)` | `isValid` | Is event string valid? |
328
329---
330
331## Legacy Systems (Deprecated/Maintained)
332
333These systems originated in earlier expansions. APIs may still function but the content is legacy.
334
335### GarrisonInfo (WoD/Legion)
336
337| Function | Returns | Description |
338|----------|---------|-------------|
339| `C_Garrison.GetFollowerInfo(followerID)` | `followerInfo` | Follower data |
340| `C_Garrison.GetFollowers(followerType)` | `followers` | Follower list |
341| `C_Garrison.GetLandingPageInfo(garrType)` | `info` | Landing page |
342| `C_Garrison.GetBuildings(garrType)` | `buildings` | Building list |
343| `C_Garrison.GetMissions(garrType)` | `missions` | Available missions |
344| `C_Garrison.IsOnGarrisonMap()` | `onMap` | In garrison? |
345
346### Covenant / Soulbinds (Shadowlands)
347
348| Function | Returns | Description |
349|----------|---------|-------------|
350| `C_Covenants.GetActiveCovenantID()` | `covenantID` | Active covenant |
351| `C_Covenants.GetCovenantData(covenantID)` | `covenantData` | Covenant info |
352| `C_Soulbinds.GetActiveSoulbindID()` | `soulbindID` | Active soulbind |
353| `C_Soulbinds.GetSoulbindData(soulbindID)` | `soulbindData` | Soulbind info |
354| `C_Soulbinds.GetConduitItemLevel(conduitID, conduitRank)` | `itemLevel` | Conduit ilvl |
355
356### AzeriteItem (Battle for Azeroth)
357
358| Function | Returns | Description |
359|----------|---------|-------------|
360| `C_AzeriteItem.IsAzeriteItem(itemLocation)` | `isAzerite` | Is Azerite item? |
361| `C_AzeriteItem.GetPowerLevel(azeriteItemLocation)` | `powerLevel` | Necklace level |
362| `C_AzeriteItem.GetAzeriteItemXPInfo(azeriteItemLocation)` | `xp, totalLevelXP` | XP info |
363| `C_AzeriteEmpoweredItem.GetPowerInfo(powerID)` | `powerInfo` | Trait info |
364| `C_AzeriteEmpoweredItem.SelectPower(azeriteItemLocation, powerID)` | — | Select trait |
365
366### ResearchInfo (Archaeology — Removed)
367
368| Function | Returns | Description |
369|----------|---------|-------------|
370| `C_ResearchInfo.GetDigSitesForMap(uiMapID)` | `digSites` | Dig sites (legacy) |
371
372> **Note:** Archaeology as a profession was removed, but some API remnants persist.
373
374### ContributionCollector (Legion)
375
376| Function | Returns | Description |
377|----------|---------|-------------|
378| `C_ContributionCollector.GetState(contributionID)` | `state` | Contribution state |
379| `C_ContributionCollector.GetName(contributionID)` | `name` | Contribution name |
380| `C_ContributionCollector.Contribute(contributionID)` | — | Contribute |
381
382---
383
384## Common Patterns
385
386### Handle NPC Gossip
387
388```lua
389local f = CreateFrame("Frame")
390f:RegisterEvent("GOSSIP_SHOW")
391f:SetScript("OnEvent", function()
392 local options = C_GossipInfo.GetOptions()
393 for i, option in ipairs(options) do
394 print(i, option.name, option.gossipOptionID)
395 end
396
397 -- Auto-select if only one option
398 if #options == 1 and options[1].selectOptionWhenOnlyOption then
399 C_GossipInfo.SelectOption(options[1].gossipOptionID)
400 end
401end)
402```
403
404### Display Player Choice
405
406```lua
407local f = CreateFrame("Frame")
408f:RegisterEvent("PLAYER_CHOICE_UPDATE")
409f:SetScript("OnEvent", function()
410 local choiceInfo = C_PlayerChoice.GetCurrentPlayerChoiceInfo()
411 if choiceInfo then
412 print("Choice:", choiceInfo.questionText)
413 for i = 1, C_PlayerChoice.GetNumPlayerChoices() do
414 local option = C_PlayerChoice.GetPlayerChoiceOptionInfo(i)
415 if option then
416 print(" Option", i, ":", option.header, "-", option.description)
417 end
418 end
419 end
420end)
421```
422
423### Get Tooltip Data Programmatically
424
425```lua
426-- Get item tooltip text without showing tooltip
427local tooltipData = C_TooltipInfo.GetItemByID(12345)
428if tooltipData then
429 TooltipUtil.SurfaceArgs(tooltipData)
430 for _, line in ipairs(tooltipData.lines) do
431 TooltipUtil.SurfaceArgs(line)
432 print(line.leftText)
433 end
434end
435```
436
437### Check Chromie Time Status
438
439```lua
440local function ShowChromieTimeOptions()
441 local options = C_ChromieTimeInfo.GetChromieTimeExpansionOptions()
442 if options then
443 for _, option in ipairs(options) do
444 print(option.name, option.description,
445 option.isCurrent and "(ACTIVE)" or "")
446 end
447 end
448end
449```
450
451### Register Slash Commands
452
453```lua
454SLASH_MYADDON1 = "/myaddon"
455SLASH_MYADDON2 = "/ma"
456SlashCmdList["MYADDON"] = function(msg)
457 local cmd, args = msg:match("^(%S+)%s*(.*)")
458 cmd = cmd and cmd:lower() or msg:lower()
459
460 if cmd == "config" then
461 -- Open config
462 elseif cmd == "help" then
463 print("/myaddon config - Open settings")
464 print("/myaddon help - Show help")
465 else
466 print("Unknown command. Use /myaddon help")
467 end
468end
469```
470
471---
472
473## Key Events
474
475| Event | Payload | Description |
476|-------|---------|-------------|
477| `GOSSIP_SHOW` | uiTextureKit | NPC gossip opened |
478| `GOSSIP_CLOSED` | — | Gossip window closed |
479| `GOSSIP_CONFIRM` | gossipID, text, cost | Gossip confirmation |
480| `PLAYER_CHOICE_UPDATE` | — | Player choice available |
481| `PLAYER_CHOICE_CLOSE` | — | Choice closed |
482| `PLAYER_INTERACTION_MANAGER_FRAME_SHOW` | type | Interaction opened |
483| `PLAYER_INTERACTION_MANAGER_FRAME_HIDE` | type | Interaction closed |
484| `CINEMATIC_START` | canBeCancelled | Cinematic starting |
485| `CINEMATIC_STOP` | — | Cinematic ended |
486| `PLAY_MOVIE` | movieID | Movie playing |
487| `STOP_MOVIE` | — | Movie stopped |
488| `SPLASH_SCREEN_SHOW` | — | Show splash screen |
489| `SPLASH_SCREEN_HIDE` | — | Hide splash screen |
490| `TUTORIAL_TRIGGER` | tutorialID | Tutorial triggered |
491| `MIRROR_TIMER_START` | timer, value, maxValue, scale, paused, label | Timer started |
492| `MIRROR_TIMER_STOP` | timer | Timer stopped |
493| `MIRROR_TIMER_PAUSE` | timer, paused | Timer paused |
494| `CHROMIE_TIME_OPEN` | — | Chromie Time UI opened |
495| `CHROMIE_TIME_CLOSE` | — | Chromie Time UI closed |
496| `GARRISON_UPDATE` | — | Garrison data updated |
497| `PERKS_ACTIVITIES_TRACKED_UPDATED` | — | Activity tracking changed |
498
499---
500
501## Gotchas & Restrictions
502
5031. **Gossip auto-select** — `selectOptionWhenOnlyOption` flag means the game may auto-select; don't assume GOSSIP_SHOW always waits for input.
5042. **PlayerInteractionManager types** — Use `Enum.PlayerInteractionType` for type-safe checks; don't hardcode integers.
5053. **Tooltip data API (12.0.0)** — Use `C_TooltipInfo` for programmatic tooltip access rather than scraping GameTooltip text lines.
5064. **Legacy API availability** — Garrison, Covenant, and Azerite APIs still exist but content is no longer current. Some may be removed in future patches.
5075. **Cinematic blocking** — Some cinematics block all addon UI; plan for `CINEMATIC_START` / `CINEMATIC_STOP`.
5086. **Player choices are timed** — Some choices have countdowns. Check `GetRemainingTime()`.
5097. **SlashCmdList keys** — Command names in SlashCmdList must be UPPERCASE. The slash aliases (SLASH_NAME1) are case-insensitive for matching.
5108. **Chromie Time level cap** — Chromie Time is only available to characters below the expansion's level range.
5119. **Gossip POI** — `GetPoiForUiMapID()` returns quest giver locations on the map, useful for minimap tracking.
51210. **Report system** — Reports require valid player locations; use `C_ReportSystem.CanReportPlayer()` first.