Spell & Ability API (Retail — Patch 12.0.0)
Comprehensive reference for all Spell, SpellBook, ActionBar, Cooldown, Totem, Shapeshifting, and related APIs. Covers spell information, cooldowns, usability, range checking, spellbook navigation, action bar slot management, spell procs, diminishing returns, assisted combat, and global spell functions.
Source of truth: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#Spell
SpellBook: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#SpellBook
ActionBar: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#ActionBar
Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026
Scope: Retail only. No deprecated or removed functions.
Scope
This skill covers these API systems:
- C_Spell — Core spell information, cooldowns, charges, usability, range, type checks
- C_SpellBook — Spellbook navigation, skill lines, slot queries, spell lookup
- C_ActionBar — Action bar slot management, state queries, bar pages, overrides
- C_SpellActivationOverlay — Spell proc/activation glow detection
- C_SpellDiminish — Diminishing returns tracking for crowd control
- C_CooldownViewer — Cooldown viewer categories and layout
- C_AssistedCombat — Assisted combat (rotation helper) integration
- Totem — Totem query functions (GetTotemInfo, DestroyTotem)
- Shapeshifting — Form/stance functions (GetShapeshiftForm, GetShapeshiftFormInfo)
- Global Spell Functions — CastSpellByName, CastSpellByID, SpellIsTargeting, etc.
When to Use This Skill
Use this skill when you need to:
- Query spell info: name, description, icon, subtext, link, power cost
- Check spell cooldowns, charges, or GCD state
- Determine if a spell is usable, in range, or on cooldown
- Navigate the spellbook: enumerate skill lines, find spell slots, check known spells
- Manage action bars: query action type, usability, cooldown, texture for a slot
- Detect action bar pages, bonus bars, override bars, vehicle bars
- Check for spell procs / activation overlays (glowing buttons)
- Track diminishing returns on crowd control effects
- Query totem state, duration, or destroy totems
- Check or cast shapeshift forms and stances
- Cast spells programmatically (protected functions)
- Handle spell targeting (SpellIsTargeting, SpellTargetUnit, SpellStopCasting)
- Use the assisted combat (rotation helper) system
- Work with flyout menus and multi-cast totem spells
Reference Files
| Reference |
Contents |
| SPELLS-CORE.md |
C_Spell — spell info, cooldowns, charges, usability, range, type checks |
| SPELLBOOK.md |
C_SpellBook — spellbook navigation, skill lines, slot queries |
| ACTIONBAR.md |
C_ActionBar — action bar slots, state, pages, overrides, pet/vehicle bars |
| COOLDOWNS-CASTING.md |
Cooldowns, casting functions, spell targeting, procs, DR, assisted combat |
| TOTEM-SHAPESHIFT.md |
Totem functions, shapeshifting/stances, global spell casting functions |
C_Spell — Core Spell API (Quick Reference)
The C_Spell namespace provides direct access to spell data by spellIdentifier — which can be a spellID (number) or spellName (string).
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#Spell
Key Functions
| Function |
Returns |
Description |
C_Spell.GetSpellInfo(spellIdentifier) |
spellInfo table |
Primary spell data (name, icon, castTime, etc.) |
C_Spell.GetSpellName(spellIdentifier) |
name |
Localized spell name |
C_Spell.GetSpellDescription(spellIdentifier) |
description |
Tooltip description text |
C_Spell.GetSpellTexture(spellIdentifier) |
iconID, originalIconID |
Spell icon texture |
C_Spell.GetSpellSubtext(spellIdentifier) |
subtext |
Rank or specialization label |
C_Spell.GetSpellLink(spellIdentifier [, glyphID]) |
spellLink |
Clickable hyperlink |
C_Spell.DoesSpellExist(spellIdentifier) |
spellExists |
Validates a spell ID/name |
C_Spell.GetSpellIDForSpellIdentifier(spellIdentifier) |
spellID |
Resolves spell name → ID |
C_Spell.GetBaseSpell(spellIdentifier [, spec]) |
baseSpellID |
Unwraps overrides to base spell |
C_Spell.GetOverrideSpell(spellIdentifier [, spec [, onlyKnown [, ignoreOverrideID]]]) |
overrideSpellID |
Gets current override for a spell |
Cooldowns & Charges
| Function |
Returns |
Description |
C_Spell.GetSpellCooldown(spellIdentifier) |
spellCooldownInfo |
Start time, duration, enabled, modRate |
C_Spell.GetSpellCooldownDuration(spellIdentifier) |
duration |
Remaining cooldown in seconds |
C_Spell.GetSpellCharges(spellIdentifier) |
chargeInfo |
Charges, maxCharges, start, duration |
C_Spell.GetSpellChargeDuration(spellIdentifier) |
duration |
Charge recharge duration |
C_Spell.GetSpellLossOfControlCooldown(spellIdentifier) |
startTime, duration |
LoC lockout timing |
C_Spell.GetSpellLossOfControlCooldownDuration(spellIdentifier) |
duration |
Remaining LoC duration |
Usability & Range
| Function |
Returns |
Description |
C_Spell.IsSpellUsable(spellIdentifier) |
isUsable, insufficientPower |
Can be cast now? |
C_Spell.IsSpellInRange(spellIdentifier [, targetUnit]) |
inRange |
Target in range? |
C_Spell.SpellHasRange(spellIdentifier) |
hasRange |
Does the spell have range? |
C_Spell.IsSpellDisabled(spellIdentifier) |
disabled |
Is spell disabled? |
C_Spell.GetSpellCastCount(spellIdentifier) |
castCount |
Number of available casts |
Type Checks
| Function |
Returns |
Description |
C_Spell.IsSpellPassive(spellIdentifier) |
isPassive |
Passive ability? |
C_Spell.IsSpellHarmful(spellIdentifier) |
isHarmful |
Offensive spell? |
C_Spell.IsSpellHelpful(spellIdentifier) |
isHelpful |
Beneficial spell? |
C_Spell.IsAutoAttackSpell(spellIdentifier) |
isAutoAttack |
Auto-attack? |
C_Spell.IsAutoRepeatSpell(spellIdentifier) |
isAutoRepeat |
Auto-repeat (e.g., Auto Shot)? |
C_Spell.IsRangedAutoAttackSpell(spellIdentifier) |
isRangedAutoAttack |
Ranged auto-attack? |
C_Spell.IsCurrentSpell(spellIdentifier) |
isCurrentSpell |
Currently being cast? |
C_Spell.IsConsumableSpell(spellIdentifier) |
consumable |
Consumes a resource on use? |
C_Spell.IsPressHoldReleaseSpell(spellIdentifier) |
isPressHoldRelease |
Empowered spell? |
C_Spell.IsClassTalentSpell(spellIdentifier) |
isClassTalent |
From the talent tree? |
C_Spell.IsPvPTalentSpell(spellIdentifier) |
isPvPTalent |
PvP talent? |
C_Spell.IsSpellCrowdControl(spellIdentifier) |
isCrowdControl |
CC effect? |
C_Spell.IsSpellImportant(spellIdentifier) |
isImportant |
Marked as important? |
C_Spell.IsPriorityAura(spellID) |
isHighPriority |
High-priority display aura? |
C_Spell.IsSelfBuff(spellID) |
hasSelfEffectsOnly |
Only affects self? |
C_Spell.IsExternalDefensive(spellID) |
isExternalDefensive |
External defensive? |
Power Cost & Data
| Function |
Returns |
Description |
C_Spell.GetSpellPowerCost(spellIdentifier) |
powerCosts table |
Resources required to cast |
C_Spell.GetSpellLevelLearned(spellIdentifier) |
levelLearned |
Level at which spell is learned |
C_Spell.GetSpellSkillLineAbilityRank(spellIdentifier) |
rank |
Rank for profession recipes |
C_Spell.GetSpellMaxCumulativeAuraApplications(spellID) |
cumulativeAura |
Max stacks |
C_Spell.GetAuraStatChanges(spellID) |
healthChange, powerTypeChanges |
Stat effects of an aura |
C_Spell.GetDeadlyDebuffInfo(spellIdentifier) |
deadlyDebuffInfo |
Deadly debuff display data |
C_Spell.GetSpellQueueWindow() |
result |
Spell queue window (ms) |
Spell Manipulation
| Function |
Returns |
Description |
C_Spell.CancelSpellByID(spellID) |
— |
Cancel a channeled/cast spell |
C_Spell.PickupSpell(spellIdentifier) |
— |
Attach spell to cursor |
C_Spell.RequestLoadSpellData(spellIdentifier) |
— |
Request async spell data load |
C_Spell.IsSpellDataCached(spellIdentifier) |
isCached |
Is data ready for query? |
C_Spell.EnableSpellRangeCheck(spellIdentifier, enable) |
— |
Enable/disable range checking |
C_Spell.SetSpellAutoCastEnabled(spellIdentifier, enabled) |
— |
Toggle pet spell autocast |
C_Spell.ToggleSpellAutoCast(spellIdentifier) |
— |
Toggle pet spell autocast |
C_Spell.GetSpellAutoCast(spellIdentifier) |
autoCastAllowed, autoCastEnabled |
Autocast state |
Visibility & Display
| Function |
Returns |
Description |
C_Spell.GetVisibilityInfo(spellID, visibilityType) |
hasCustom, alwaysShowMine, showForMySpec |
Aura display visibility rules |
C_Spell.GetSpellDisplayCount(spellIdentifier [, maxDisplayCount [, replacementString]]) |
displayCount |
Display count for stacking |
Targeting & Trade
| Function |
Returns |
Description |
C_Spell.TargetSpellIsEnchanting() |
isEnchanting |
Current targeting spell is enchant? |
C_Spell.TargetSpellJumpsUpgradeTrack() |
jumpsUpgradeTrack |
Upgrade track jump? |
C_Spell.TargetSpellReplacesBonusTree() |
result |
Replaces bonus loot tree? |
C_Spell.GetSpellTradeSkillLink(spellIdentifier) |
spellLink |
Trade skill recipe link |
C_SpellBook — Spellbook Navigation (Quick Reference)
The C_SpellBook namespace manages the spellbook UI, skill lines, and per-slot queries. Functions take (spellBookItemSlotIndex, spellBookItemSpellBank) where spellBank is Enum.SpellBookSpellBank.Player or Enum.SpellBookSpellBank.Pet.
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#SpellBook
Key Functions
| Function |
Returns |
Description |
C_SpellBook.GetNumSpellBookSkillLines() |
numSkillLines |
Number of spellbook tabs |
C_SpellBook.GetSpellBookSkillLineInfo(skillLineIndex) |
skillLineInfo |
Tab name, icon, offset, count |
C_SpellBook.GetSpellBookItemInfo(slot, bank) |
spellBookItemInfo |
Detailed spell/flyout info for a slot |
C_SpellBook.GetSpellBookItemType(slot, bank) |
itemType, actionID, spellID |
Type: SPELL, FLYOUT, FUTURESPELL, PETACTION |
C_SpellBook.GetSpellBookItemName(slot, bank) |
name, subName |
Localized name of slot |
C_SpellBook.GetSpellBookItemTexture(slot, bank) |
iconID |
Icon for slot |
C_SpellBook.GetSpellBookItemDescription(slot, bank) |
description |
Tooltip text |
C_SpellBook.GetSpellBookItemLink(slot, bank [, glyphID]) |
spellLink |
Hyperlink |
C_SpellBook.GetSpellBookItemLevelLearned(slot, bank) |
levelLearned |
Level learned |
C_SpellBook.FindSpellBookSlotForSpell(spellIdentifier [, includeHidden [, includeFlyouts [, includeFutureSpells [, includeOffSpec]]]]) |
slotIndex, bank |
Find slot for a spell |
C_SpellBook.IsSpellKnown(spellID [, spellBank]) |
isKnown |
Does the player know the spell? |
C_SpellBook.IsSpellInSpellBook(spellID [, spellBank [, includeOverrides]]) |
isInSpellBook |
Is it in the spellbook? |
C_SpellBook.IsSpellKnownOrInSpellBook(spellID [, spellBank [, includeOverrides]]) |
isKnownOrInSpellBook |
Known OR in spellbook? |
Slot Usability & State
| Function |
Returns |
Description |
C_SpellBook.IsSpellBookItemUsable(slot, bank) |
isUsable, insufficientPower |
Can cast from this slot? |
C_SpellBook.IsSpellBookItemPassive(slot, bank) |
isPassive |
Passive ability? |
C_SpellBook.IsSpellBookItemOffSpec(slot, bank) |
isOffSpec |
Belongs to inactive spec? |
C_SpellBook.IsSpellBookItemHarmful(slot, bank) |
isHarmful |
Harmful to targets? |
C_SpellBook.IsSpellBookItemHelpful(slot, bank) |
isHelpful |
Helpful to targets? |
C_SpellBook.IsSpellBookItemInRange(slot, bank [, targetUnit]) |
inRange |
In range of target? |
C_SpellBook.SpellBookItemHasRange(slot, bank) |
hasRange |
Has range requirement? |
C_SpellBook.IsAutoAttackSpellBookItem(slot, bank) |
isAutoAttack |
Auto-attack entry? |
C_SpellBook.IsRangedAutoAttackSpellBookItem(slot, bank) |
isRangedAutoAttack |
Ranged auto-attack? |
C_SpellBook.IsClassTalentSpellBookItem(slot, bank) |
isClassTalent |
Class talent? |
C_SpellBook.IsPvPTalentSpellBookItem(slot, bank) |
isPvPTalent |
PvP talent? |
Slot Cooldowns & Charges
| Function |
Returns |
Description |
C_SpellBook.GetSpellBookItemCooldown(slot, bank) |
spellCooldownInfo |
Cooldown for slot |
C_SpellBook.GetSpellBookItemCooldownDuration(slot, bank) |
duration |
Remaining cooldown |
C_SpellBook.GetSpellBookItemCharges(slot, bank) |
chargeInfo |
Charge info |
C_SpellBook.GetSpellBookItemChargeDuration(slot, bank) |
duration |
Charge recharge time |
C_SpellBook.GetSpellBookItemCastCount(slot, bank) |
castCount |
Available casts |
C_SpellBook.GetSpellBookItemLossOfControlCooldown(slot, bank) |
startTime, duration |
LoC lockout |
C_SpellBook.GetSpellBookItemLossOfControlCooldownDuration(slot, bank) |
duration |
Remaining LoC |
Spell Lookup
| Function |
Returns |
Description |
C_SpellBook.FindBaseSpellByID(spellID) |
baseSpellID |
Resolve to base spell |
C_SpellBook.FindSpellOverrideByID(spellID) |
overrideSpellID |
Get current override |
C_SpellBook.GetCurrentLevelSpells(level) |
spellIDs |
Spells learned at a level |
C_SpellBook.GetSkillLineIndexByID(skillLineID) |
skillIndex |
Skill line index by ID |
C_SpellBook.HasPetSpells() |
numPetSpells, petNameToken |
Does the pet have spells? |
C_SpellBook.ContainsAnyDisenchantSpell() |
contains |
Has disenchant? |
C_SpellBook.FindFlyoutSlotBySpellID(spellID) |
flyoutSlot |
Find flyout containing spell |
Other Slot Operations
| Function |
Returns |
Description |
C_SpellBook.CastSpellBookItem(slot, bank [, targetSelf]) |
— |
Cast from spellbook slot |
C_SpellBook.PickupSpellBookItem(slot, bank) |
— |
Pick up spell to cursor |
C_SpellBook.GetSpellBookItemAutoCast(slot, bank) |
autoCastAllowed, autoCastEnabled |
Autocast state |
C_SpellBook.SetSpellBookItemAutoCastEnabled(slot, bank, enabled) |
— |
Set autocast |
C_SpellBook.ToggleSpellBookItemAutoCast(slot, bank) |
— |
Toggle autocast |
C_SpellBook.GetSpellBookItemPowerCost(slot, bank) |
powerCosts |
Resource cost |
C_SpellBook.GetSpellBookItemTradeSkillLink(slot, bank) |
spellLink |
Trade skill link |
C_SpellBook.GetSpellBookItemSkillLineIndex(slot, bank) |
skillLineIndex |
Which skill line tab |
C_ActionBar — Action Bar Slot Management (Quick Reference)
The C_ActionBar namespace manages the 120+ action bar slots. Actions are referenced by actionID (1–180) or slotID.
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#ActionBar
Action Slot Layout
| Bar |
Slots |
Notes |
| Main bar |
1–12 |
Always visible |
| Bar 2 (Bottom Left) |
13–24 |
Toggled via settings |
| Bar 3 (Bottom Right) |
25–36 |
Toggled via settings |
| Bar 4 (Right) |
37–48 |
Toggled via settings |
| Bar 5 (Right 2) |
49–60 |
Toggled via settings |
| Bars 6–10 |
61–120 |
Additional bars |
| StanceBar pages |
121–180 |
Stance-specific bars |
Core Queries
| Function |
Returns |
Description |
C_ActionBar.HasAction(actionID) |
hasAction |
Is something in this slot? |
C_ActionBar.GetSpell(actionID) |
spellID |
Spell in slot (nil if not a spell) |
C_ActionBar.GetActionTexture(actionID) |
textureFileID |
Icon for the action |
C_ActionBar.GetActionText(actionID) |
text |
Display text (macros) |
C_ActionBar.GetActionCooldown(actionID) |
cooldownInfo |
Cooldown data |
C_ActionBar.GetActionCooldownDuration(actionID) |
duration |
Remaining cooldown |
C_ActionBar.GetActionChargeDuration(actionID) |
duration |
Charge recharge time |
C_ActionBar.GetActionCharges(actionID) |
chargeInfo |
Charge state |
C_ActionBar.IsUsableAction(actionID) |
isUsable, isLackingResources |
Can use? |
C_ActionBar.IsActionInRange(actionID [, target]) |
isInRange |
Target in range? |
Action State Checks
| Function |
Returns |
Description |
C_ActionBar.IsCurrentAction(actionID) |
isCurrentAction |
Being cast now? |
C_ActionBar.IsAttackAction(actionID) |
isAttackAction |
Auto-attack? |
C_ActionBar.IsAutoRepeatAction(actionID) |
isAutoRepeatAction |
Auto-repeat? |
C_ActionBar.IsConsumableAction(actionID) |
isConsumableAction |
Consumable? |
C_ActionBar.IsEquippedAction(actionID) |
isEquippedAction |
Equipped item? |
C_ActionBar.IsStackableAction(actionID) |
isStackableAction |
Stackable item? |
C_ActionBar.IsItemAction(actionID) |
isItemAction |
Item action? |
C_ActionBar.IsHarmfulAction(actionID, useNeutral) |
isHarmful |
Harmful? |
C_ActionBar.IsHelpfulAction(actionID, useNeutral) |
isHelpful |
Helpful? |
C_ActionBar.IsInterruptAction(slotID) |
isInterruptAction |
Interrupt? |
C_ActionBar.IsAssistedCombatAction(slotID) |
isAssistedCombat |
Assisted combat action? |
C_ActionBar.HasRangeRequirements(actionID) |
hasRangeRequirements |
Has range? |
Bar Pages & Overrides
| Function |
Returns |
Description |
C_ActionBar.GetActionBarPage() |
currentPage |
Current page (1–6) |
C_ActionBar.SetActionBarPage(pageIndex) |
— |
Switch page |
C_ActionBar.GetBonusBarIndex() |
bonusBarIndex |
Class-specific bonus bar |
C_ActionBar.GetBonusBarOffset() |
bonusBarOffset |
Offset for bonus bar |
C_ActionBar.HasBonusActionBar() |
hasBonusActionBar |
Has bonus bar? |
C_ActionBar.GetOverrideBarIndex() |
overrideBarIndex |
Override bar index |
C_ActionBar.GetOverrideBarSkin() |
textureFileID |
Override bar texture |
C_ActionBar.HasOverrideActionBar() |
hasOverrideActionBar |
Override active? |
C_ActionBar.GetExtraBarIndex() |
extraBarIndex |
Extra action button bar |
C_ActionBar.HasExtraActionBar() |
hasExtraActionBar |
Extra bar active? |
C_ActionBar.GetVehicleBarIndex() |
vehicleBarIndex |
Vehicle bar index |
C_ActionBar.HasVehicleActionBar() |
hasVehicleActionBar |
In vehicle? |
C_ActionBar.GetTempShapeshiftBarIndex() |
tempShapeshiftBarIndex |
Temp shapeshift bar |
C_ActionBar.HasTempShapeshiftActionBar() |
hasTempShapeshiftActionBar |
Has temp form bar? |
C_ActionBar.GetMultiCastBarIndex() |
multiCastBarIndex |
Multi-cast bar (totem) |
C_ActionBar.ShouldOverrideBarShowHealthBar() |
showHealthBar |
Show health bar? |
C_ActionBar.ShouldOverrideBarShowManaBar() |
showManaBar |
Show mana bar? |
C_ActionBar.IsPossessBarVisible() |
isPossessBarVisible |
Possess bar visible? |
Display & Count
| Function |
Returns |
Description |
C_ActionBar.GetActionDisplayCount(actionID [, maxDisplayCount [, replacementString]]) |
displayCount |
Display count for stacking |
C_ActionBar.GetActionUseCount(actionID) |
count |
Remaining uses |
C_ActionBar.GetActionAutocast(actionID) |
autoCastAllowed, autoCastEnabled |
Autocast state |
C_ActionBar.GetActionLossOfControlCooldown(actionID) |
startTime, duration |
LoC cooldown |
C_ActionBar.GetActionLossOfControlCooldownDuration(actionID) |
duration |
Remaining LoC |
Spell ↔ Action Lookups
| Function |
Returns |
Description |
C_ActionBar.FindSpellActionButtons(spellID) |
slots |
Find all slots containing a spell |
C_ActionBar.HasSpellActionButtons(spellID) |
hasButtons |
Is spell on any bar? |
C_ActionBar.IsOnBarOrSpecialBar(spellID) |
isOnBar |
On any bar or special bar? |
C_ActionBar.FindFlyoutActionButtons(flyoutID) |
slots |
Find flyout button slots |
C_ActionBar.HasFlyoutActionButtons(flyoutID) |
hasFlyoutButtons |
Flyout on bar? |
C_ActionBar.FindPetActionButtons(petActionID) |
slots |
Pet action on bar? |
C_ActionBar.HasPetActionButtons(petActionID) |
hasPetButtons |
Pet action exists? |
C_ActionBar.FindAssistedCombatActionButtons() |
slots |
Assisted combat slots |
C_ActionBar.HasAssistedCombatActionButtons() |
hasButtons |
Has assisted combat? |
C_ActionBar.GetPetActionPetBarIndices(petActionID) |
slots |
Pet bar indices |
C_ActionBar.HasPetActionPetBarIndices(petActionID) |
hasIndices |
Has pet bar indices? |
Profession & Gear
| Function |
Returns |
Description |
C_ActionBar.GetProfessionQuality(actionID) |
quality |
Crafting result quality |
C_ActionBar.GetProfessionQualityInfo(actionID) |
info |
Quality info table |
C_ActionBar.GetItemActionOnEquipSpellID(actionID) |
onEquipSpellID |
On-equip spell ID |
C_ActionBar.IsEquippedGearOutfitAction(slotID) |
isEquipped |
Gear outfit equipped? |
C_ActionBar.GetBonusBarIndexForSlot(slotID) |
bonusBarIndex |
Bonus bar for slot |
Slot Management
| Function |
Returns |
Description |
C_ActionBar.PutActionInSlot(slotID) |
— |
Place cursor action into slot |
C_ActionBar.RegisterActionUIButton(checkboxFrame, actionID, cooldownFrame) |
— |
Register frame for updates |
C_ActionBar.UnregisterActionUIButton(checkboxFrame) |
— |
Unregister frame |
C_ActionBar.ForceUpdateAction(slotID) |
— |
Force action update |
C_ActionBar.EnableActionRangeCheck(actionID, enable) |
— |
Enable/disable range check |
C_ActionBar.ToggleAutoCastPetAction(slotID) |
— |
Toggle pet autocast |
C_ActionBar.IsAutoCastPetAction(slotID) |
isAutoCastPetAction |
Pet autocast? |
C_ActionBar.IsEnabledAutoCastPetAction(slotID) |
isEnabled |
Pet autocast enabled? |
Auxiliary Namespaces (Quick Reference)
C_SpellActivationOverlay — Spell Procs
Detects when a spell has a visual activation overlay (glowing border / proc alert).
| Function |
Returns |
Description |
C_SpellActivationOverlay.IsSpellOverlayed(spellID) |
isOverlayed |
Spell has active proc glow? |
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#SpellActivationOverlay
C_SpellDiminish — Diminishing Returns
Tracks diminishing returns (DR) categories for crowd control and interrupt tracking.
| Function |
Returns |
Description |
C_SpellDiminish.GetAllSpellDiminishCategories([ruleset]) |
categories |
All DR categories |
C_SpellDiminish.GetSpellDiminishCategoryInfo(category) |
categoryInfo |
Info for a DR category |
C_SpellDiminish.IsSystemSupported() |
isSupported |
Is DR tracking available? |
C_SpellDiminish.ShouldTrackSpellDiminishCategory(category, ruleset) |
isTracked |
Should this category be tracked? |
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#SpellDiminishUI
C_CooldownViewer — Cooldown Display
Provides categorized cooldown data for the cooldown viewer UI.
| Function |
Returns |
Description |
C_CooldownViewer.GetCooldownViewerCategorySet(category [, allowUnlearned]) |
cooldownIDs |
Cooldowns in a category |
C_CooldownViewer.GetCooldownViewerCooldownInfo(cooldownID) |
cooldownInfo |
Cooldown details |
C_CooldownViewer.GetLayoutData() |
data |
Viewer layout state |
C_CooldownViewer.GetValidAlertTypes(cooldownID) |
validAlertTypes |
Valid alert types for cooldown |
C_CooldownViewer.IsCooldownViewerAvailable() |
isAvailable, failureReason |
Is viewer available? |
C_CooldownViewer.SetLayoutData(data) |
— |
Save layout state |
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#CooldownViewer
C_AssistedCombat — Rotation Helper
The Assisted Combat system (new in 12.0) provides suggested spell rotations.
| Function |
Returns |
Description |
C_AssistedCombat.GetActionSpell() |
spellID |
Current action spell suggestion |
C_AssistedCombat.GetNextCastSpell([checkForVisibleButton]) |
spellID |
Next suggested cast |
C_AssistedCombat.GetRotationSpells() |
spellIDs |
All rotation spells |
C_AssistedCombat.IsAvailable() |
isAvailable, failureReason |
Is system available? |
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#AssistedCombat
C_LevelLink — Spell Level Lock
Checks if spells or actions are level-locked for scaling content.
| Function |
Returns |
Description |
C_LevelLink.IsActionLocked(actionID) |
isLocked |
Action locked by level? |
C_LevelLink.IsSpellLocked(spellID) |
isLocked |
Spell locked by level? |
Totem Functions
Totem functions query and manage totem/minion slots. Shamans have 4 totem slots; other classes may have totem-style minions (e.g., Death Knight ghouls, mushrooms).
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#Totem
| Function |
Returns |
Description |
GetTotemInfo(slot) |
haveTotem, totemName, startTime, duration, icon, modRate, spellID |
Complete totem info |
GetTotemTimeLeft(slot) |
timeLeft |
Remaining duration (seconds) |
GetTotemCannotDismiss(slot) |
cannotDismiss |
Can this totem be dismissed? |
DestroyTotem(slot) |
— |
Destroy totem/minion #protected |
TargetTotem(slot) |
— |
Target the totem |
totem Slot Constants
EARTH_TOTEM_SLOT = 2
FIRE_TOTEM_SLOT = 1
WATER_TOTEM_SLOT = 3
AIR_TOTEM_SLOT = 4
Shapeshifting / Stances
Manages shapeshift forms (Druid forms, Warrior stances, Rogue stealth, Paladin auras, etc.).
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API#Shapeshifting
Category: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API (Shapeshifting section)
| Function |
Returns |
Description |
GetNumShapeshiftForms() |
numForms |
Number of available forms |
GetShapeshiftForm([flag]) |
index |
Current form (0 = none) |
GetShapeshiftFormID() |
index |
Form ID of current form |
GetShapeshiftFormInfo(index) |
icon, active, castable, spellID |
Info for a form |
GetShapeshiftFormCooldown(index) |
startTime, duration, isActive |
Cooldown for a form |
CancelShapeshiftForm() |
— |
Leave current form #protected |
CastShapeshiftForm(index) |
— |
Enter a form #protected |
Global Spell Casting Functions
These are category-level functions (not namespaced) for casting, targeting, and confirming spells.
Wiki: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API (Spells category)
Casting (Protected)
| Function |
Description |
CastSpell(spellIndex, spellbookType) |
Cast from spellbook by index #protected |
CastSpellByID(spellID [, target]) |
Cast by spell ID #protected |
CastSpellByName(name [, target]) |
Cast by name #protected |
UseAction(slot [, checkCursor [, onSelf]]) |
Use action bar slot #protected |
SpellStopCasting() |
Stop current cast #protected |
Targeting (Protected)
| Function |
Description |
SpellIsTargeting() |
Is a spell waiting for target selection? |
SpellCanTargetUnit(unit) |
Can the pending spell target this unit? |
SpellTargetUnit(unit) |
Cast pending spell on unit #protected |
SpellStopTargeting() |
Cancel pending spell targeting #protected |
SpellTargetItem(item) |
Cast pending spell on item #protected |
SpellCanTargetItem() |
Can pending spell target an item? |
SpellCanTargetItemID() |
Can pending spell target an item ID? |
SpellCanTargetQuest() |
Can pending spell target a quest? |
SpellCancelQueuedSpell() |
Cancel queued spell |
CancelSpellByName(name) |
Cancel channeling by name #nocombat |
Spell Confirmation
| Function |
Description |
AcceptSpellConfirmationPrompt(spellID) |
Accept a spell confirmation dialog |
DeclineSpellConfirmationPrompt(spellID) |
Decline a spell confirmation dialog |
GetSpellConfirmationPromptsInfo() |
Get pending confirmations |
Action Button Helpers
| Function |
Returns |
Description |
GetActionInfo(slot) |
actionType, id, subType |
What's in this action slot? |
GetActionBarToggles() |
bar1..bar7 |
Which extra bars are visible |
SetActionBarToggles(bar1..bar7, alwaysShow) |
— |
Set visibility of extra bars |
PetHasActionBar() |
hasActionBar |
Does pet have an action bar? |
GetPossessInfo(index) |
texture, spellID, enabled |
Possession bar info |
Flyouts
| Function |
Returns |
Description |
GetFlyoutInfo(flyoutID) |
name, description, numSlots, isKnown |
Flyout menu info |
GetFlyoutSlotInfo(flyoutID, slot) |
flyoutSpellID, overrideSpellID, isKnown, spellName, slotSpecID |
Individual flyout slot |
FlyoutHasSpell(flyoutID, spellID) |
hasSpell |
Does flyout contain spell? |
GetNumFlyouts() |
count |
Total flyout count |
FindSpellBookSlotBySpellID(spellID [, isPet]) |
slot |
Legacy slot lookup |
Combat Pet Actions
| Function |
Returns |
Description |
CastPetAction(index [, target]) |
— |
Cast pet action #protected |
GetPetActionCooldown(index) |
startTime, duration, enable |
Pet action cooldown |
GetPetActionInfo(index) |
name, texture, isToken, isActive, autoCastAllowed, autoCastEnabled, spellID, checksRange, inRange |
Full pet action info |
GetPetActionSlotUsable(index) |
isUsable |
Can use this pet action? |
Multi-Cast / Totem Bar
| Function |
Returns |
Description |
GetMultiCastTotemSpells(slot) |
totem1..totem7 |
Valid spells for a totem slot |
SetMultiCastSpell(actionID, spellID) |
— |
Set totem bar spell #protected |
Misc Spell Helpers
| Function |
Returns |
Description |
GetSpellBaseCooldown(spellID) |
cooldownMS, gcdMS |
Base cooldown in milliseconds |
IsSelectedSpellBookItem(spellSlot) |
bool |
Is this slot selected? |
CancelUnitBuff(unit, buffIndex [, filter]) |
— |
Remove a buff #nocombat |
QueryCastSequence(sequence) |
index, item, spell |
Preview next step in /castsequence |
Patch 12.0.0 — Secret Values Impact
Spell-related APIs are significantly affected by Secret Values in Patch 12.0.0:
C_Secrets Predicates for Spells
| Function |
Returns |
Description |
C_Secrets.GetSpellCastSecrecy(spellIdentifier) |
secrecy |
Cast info secret level |
C_Secrets.GetSpellCooldownSecrecy(spellIdentifier) |
secrecy |
Cooldown data secret level |
C_Secrets.GetSpellAuraSecrecy(spellIdentifier) |
secrecy |
Aura data secret level |
C_Secrets.ShouldCooldownsBeSecret() |
hasSecretCooldowns |
Any cooldowns secret? |
C_Secrets.ShouldSpellCooldownBeSecret(spellIdentifier) |
isCooldownSecret |
This spell's CD secret? |
C_Secrets.ShouldSpellAuraBeSecret(spellIdentifier) |
isAuraSecret |
This spell's aura secret? |
C_Secrets.ShouldSpellBookItemCooldownBeSecret(slot, bank) |
isCooldownSecret |
Spellbook slot CD secret? |
C_Secrets.ShouldActionCooldownBeSecret(actionID) |
isCooldownSecret |
Action slot CD secret? |
C_Secrets.ShouldTotemSlotBeSecret(slot) |
isTotemSecret |
Totem info secret? |
C_Secrets.ShouldTotemSpellBeSecret(spellID) |
isTotemSecret |
Specific totem spell secret? |
C_Secrets.ShouldUnitSpellCastBeSecret(unit, spellIdentifier) |
isSpellCastSecret |
Cast info secret? |
C_Secrets.ShouldUnitSpellCastingBeSecret(unit) |
isSpellCastingSecret |
All cast info for unit secret? |
What Returns Secrets
- Cooldown times —
C_Spell.GetSpellCooldown() may return secret start/duration when C_Secrets.ShouldSpellCooldownBeSecret() is true
- Spell cast info —
UnitCastingInfo() / UnitChannelInfo() return secret fields when unit identity is restricted
- Totem info —
GetTotemInfo() may return secret startTime/duration when the totem spell is secret
Safe Patterns
local cdInfo = C_Spell.GetSpellCooldown(spellID)
myCooldownFrame:SetCooldown(cdInfo.startTime, cdInfo.duration)
local name = C_Spell.GetSpellName(spellID)
myFontString:SetText(name)
local cdInfo = C_Spell.GetSpellCooldown(spellID)
if cdInfo.duration > 0 then end
Common Patterns
Iterate All Spellbook Entries
local numLines = C_SpellBook.GetNumSpellBookSkillLines()
for skillIndex = 1, numLines do
local info = C_SpellBook.GetSpellBookSkillLineInfo(skillIndex)
for slotIndex = info.itemIndexOffset + 1, info.itemIndexOffset + info.numSpellBookItems do
local itemInfo = C_SpellBook.GetSpellBookItemInfo(slotIndex, Enum.SpellBookSpellBank.Player)
if itemInfo and itemInfo.itemType == Enum.SpellBookItemType.Spell then
print(itemInfo.name, itemInfo.spellID)
end
end
end
Check If Spell Is Usable and in Range
local function CanCastOnTarget(spellID, unit)
local isUsable, insufficientPower = C_Spell.IsSpellUsable(spellID)
if not isUsable then return false, insufficientPower end
if C_Spell.SpellHasRange(spellID) then
local inRange = C_Spell.IsSpellInRange(spellID, unit)
if inRange == false then return false end
end
local cdInfo = C_Spell.GetSpellCooldown(spellID)
return true
end
Display Action Button State
local function UpdateActionButton(button, actionID)
if not C_ActionBar.HasAction(actionID) then
button:Hide()
return
end
button.icon:SetTexture(C_ActionBar.GetActionTexture(actionID))
local isUsable, noMana = C_ActionBar.IsUsableAction(actionID)
if isUsable then
button.icon:SetVertexColor(1, 1, 1)
elseif noMana then
button.icon:SetVertexColor(0.5, 0.5, 1)
else
button.icon:SetVertexColor(0.4, 0.4, 0.4)
end
if C_SpellActivationOverlay.IsSpellOverlayed(C_ActionBar.GetSpell(actionID)) then
button.overlay:Show()
else
button.overlay:Hide()
end
end
Monitor Totem State
local function UpdateTotemFrame(slot)
local haveTotem, name, startTime, duration, icon, modRate, spellID = GetTotemInfo(slot)
if haveTotem then
myTotemIcon:SetTexture(icon)
myTotemCooldown:SetCooldown(startTime, duration)
myTotemName:SetText(name)
end
end
Query Shapeshift Forms
local function ShowAvailableForms()
local numForms = GetNumShapeshiftForms()
for i = 1, numForms do
local icon, active, castable, spellID = GetShapeshiftFormInfo(i)
print(C_Spell.GetSpellName(spellID), active and "(Active)" or "")
end
end
Related Events
| Event |
Payload |
When |
SPELL_DATA_LOAD_RESULT |
spellID, success |
Async spell data load complete |
ACTIONBAR_SLOT_CHANGED |
slot |
Action placed/removed from slot |
ACTIONBAR_PAGE_CHANGED |
— |
Action bar page changed |
ACTIONBAR_UPDATE_COOLDOWN |
— |
Action cooldown updated |
ACTIONBAR_UPDATE_USABLE |
— |
Action usability changed |
ACTIONBAR_UPDATE_STATE |
— |
Action state changed |
UPDATE_BONUS_ACTIONBAR |
— |
Bonus bar changed (stance/form) |
UPDATE_EXTRA_ACTIONBAR |
— |
Extra action button changed |
UPDATE_OVERRIDE_ACTIONBAR |
— |
Override bar state changed |
UPDATE_VEHICLE_ACTIONBAR |
— |
Vehicle bar changed |
UPDATE_POSSESS_BAR |
— |
Possession bar changed |
SPELL_ACTIVATION_OVERLAY_SHOW |
spellID, ... |
Proc overlay should show |
SPELL_ACTIVATION_OVERLAY_HIDE |
spellID |
Proc overlay should hide |
SPELL_UPDATE_COOLDOWN |
— |
Spell cooldowns changed |
SPELL_UPDATE_USABLE |
— |
Spell usability changed |
SPELL_UPDATE_CHARGES |
— |
Spell charges changed |
CURRENT_SPELL_CAST_CHANGED |
— |
Current cast changed |
SPELLS_CHANGED |
— |
Spellbook contents changed |
LEARNED_SPELL_IN_SKILL_LINE |
spellID, skillLineIndex, isGuildPerkSpell |
New spell learned |
PLAYER_TOTEM_UPDATE |
slot |
Totem state changed |
UPDATE_SHAPESHIFT_FORM |
— |
Shapeshift form changed |
UPDATE_SHAPESHIFT_FORMS |
— |
Available forms changed |
UPDATE_SHAPESHIFT_COOLDOWN |
— |
Form cooldown changed |
SPELL_CONFIRMATION_PROMPT |
spellID, confirmType, text, duration, currencyID, currencyCost, difficultyID |
Spell confirmation needed |
SPELL_CONFIRMATION_TIMEOUT |
spellID |
Confirmation timed out |
PET_BAR_UPDATE |
— |
Pet bar updated |
PET_BAR_UPDATE_COOLDOWN |
— |
Pet action cooldown changed |
PET_BAR_UPDATE_USABLE |
— |
Pet action usability changed |
ASSISTED_COMBAT_UPDATE |
— |
Rotation helper suggestion changed |
COOLDOWN_VIEWER_UPDATE |
— |
Cooldown viewer data changed |
SPELL_FLYOUT_UPDATE |
flyoutID, spellID, isLearned |
Flyout spell learned/changed |