1---2name: wow-api-transmog3description: Complete reference for WoW Retail Transmogrification, Appearance Collection, Transmog Sets, Transmog Outfits, Dye Colors, and Barber Shop APIs. Covers C_Transmogrify (applying transmog at NPC), C_TransmogCollection (appearance source info, categories, search, collected status), C_TransmogSets (set collection, set info, base sets, variants), C_TransmogOutfits (outfit management, save/load), C_DyeColor/C_DyeColorInfo (armor dye system new in 12.0.0), and C_BarberShop (customization). Use when working with transmog, appearance collections, wardrobe, transmog sets, outfit management, armor dyes, or character customization.4---5
6# Transmog API (Retail — Patch 12.0.0)
7
8Comprehensive reference for transmogrification, appearances, sets, outfits, dyes, and barber shop APIs.
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
18- **C_Transmogrify** — Applying transmog at NPC
19- **C_TransmogCollection** — Appearance sources, categories, collection status
20- **C_TransmogSets** — Transmog set management
21- **C_TransmogOutfits** — Outfit save/load
22- **C_DyeColor / C_DyeColorInfo** — Armor dye system (new in 12.0.0)
23- **C_BarberShop** — Character customization
24
25---
26
27## C_Transmogrify — Applying Transmog
28
29| Function | Returns | Description |
30|----------|---------|-------------|
31| `C_Transmogrify.ApplyAllPending()` | — | Apply all pending transmogs |
32| `C_Transmogrify.CanHaveSecondaryAppearanceForSlotID(slotID)` | `canHave` | Has secondary slot? |
33| `C_Transmogrify.CanTransmogItem(itemInfo)` | `canTransmog, selfFailure, canTransmogKnownAppearance, canTransmogUncollected` | Can transmog? |
34| `C_Transmogrify.CanTransmogItemWithItem(targetItemInfo, sourceItemInfo)` | `canTransmog` | Can transmog source to target? |
35| `C_Transmogrify.ClearAllPending()` | — | Clear all pending transmogs |
36| `C_Transmogrify.ClearPending(slotID)` | — | Clear pending for slot |
37| `C_Transmogrify.Close()` | — | Close transmog window |
38| `C_Transmogrify.GetBaseCategory(slotID)` | `category` | Base category for slot |
39| `C_Transmogrify.GetCost()` | `cost` | Current transmog cost |
40| `C_Transmogrify.GetCreatureDisplayIDForSource(sourceID)` | `displayID` | Creature display for source |
41| `C_Transmogrify.GetItemIDForSource(sourceID)` | `itemID` | Item ID for source |
42| `C_Transmogrify.GetPending(slotID)` | `pendingInfo` | Pending transmog for slot |
43| `C_Transmogrify.GetSlotEffectiveCategory(slotID)` | `category` | Effective category for slot |
44| `C_Transmogrify.GetSlotInfo(slotID)` | `isTransmogrified, hasPending, isPendingCollected, canTransmogrify, cannotTransmogrifyReason, hasUndo, isHideVisual, texture` | Slot transmog info |
45| `C_Transmogrify.GetSlotUseError(slotID)` | `errorCode, errorString` | Slot error |
46| `C_Transmogrify.GetSlotVisualInfo(slotID)` | `baseSourceID, baseVisualID, appliedSourceID, appliedVisualID, pendingSourceID, pendingVisualID, hasPendingUndo, hideVisual, hasActiveSecondaryAppearance` | Slot visual details |
47| `C_Transmogrify.SetPending(slotID, transmogType, modification, sourceID)` | — | Set pending transmog |
48
49---
50
51## C_TransmogCollection — Appearance Sources
52
53### Source & Appearance Info
54
55| Function | Returns | Description |
56|----------|---------|-------------|
57| `C_TransmogCollection.GetSourceInfo(sourceID)` | `sourceInfo` | Source details |
58| `C_TransmogCollection.GetAppearanceSourceInfo(sourceID)` | `category, appearanceID, canHaveIllusion, icon, isCollected, itemLink, transmogLink, sourceType, ...` | Appearance source info |
59| `C_TransmogCollection.GetSourceItemID(sourceID)` | `itemID` | Item for source |
60| `C_TransmogCollection.PlayerHasTransmog(itemID [, itemAppearanceModID])` | `hasTransmog` | Has transmog collected? |
61| `C_TransmogCollection.PlayerHasTransmogItemModifiedAppearance(itemModifiedAppearanceID)` | `hasAppearance` | Has modified appearance? |
62| `C_TransmogCollection.PlayerHasTransmogByItemInfo(itemInfo)` | `hasTransmog` | Has transmog by item info? |
63| `C_TransmogCollection.GetItemInfo(itemInfo)` | `appearanceID, sourceID` | Source for item |
64| `C_TransmogCollection.GetAllAppearanceSources(appearanceID)` | `sourceIDs` | All sources for appearance |
65| `C_TransmogCollection.GetAppearanceSources(appearanceID [, categoryID [, transmogType]])` | `sources` | Sources with info |
66
67### Categories
68
69| Function | Returns | Description |
70|----------|---------|-------------|
71| `C_TransmogCollection.GetCategoryAppearances(categoryID)` | `appearances` | All appearances in category |
72| `C_TransmogCollection.GetCategoryCollectedCount(categoryID)` | `collected` | Collected count |
73| `C_TransmogCollection.GetCategoryTotal(categoryID)` | `total` | Total in category |
74| `C_TransmogCollection.GetNumTransmogSources()` | `numSources` | Total sources |
75| `C_TransmogCollection.IsAppearanceCollected(appearanceID)` | `isCollected` | Is appearance collected? |
76
77### Illusions
78
79| Function | Returns | Description |
80|----------|---------|-------------|
81| `C_TransmogCollection.GetIllusions()` | `illusions` | All weapon illusions |
82| `C_TransmogCollection.GetIllusionSourceInfo(sourceID)` | `name, hyperlink, sourceText` | Illusion source info |
83| `C_TransmogCollection.PlayerKnowsSource(sourceID)` | `isKnown` | Knows source? |
84
85### Search & Filtering
86
87| Function | Returns | Description |
88|----------|---------|-------------|
89| `C_TransmogCollection.SetSearch(searchType, searchText)` | — | Set search filter |
90| `C_TransmogCollection.GetSearchResults(searchType)` | `results` | Get search results |
91| `C_TransmogCollection.ClearSearch(searchType)` | — | Clear search |
92| `C_TransmogCollection.IsSearchInProgress(searchType)` | `inProgress` | Is search running? |
93| `C_TransmogCollection.EndSearch()` | — | End search |
94| `C_TransmogCollection.GetIsAppearanceFavorite(appearanceID)` | `isFavorite` | Is favorite? |
95| `C_TransmogCollection.SetIsAppearanceFavorite(appearanceID, isFavorite)` | — | Set favorite |
96
97---
98
99## C_TransmogSets — Transmog Sets
100
101| Function | Returns | Description |
102|----------|---------|-------------|
103| `C_TransmogSets.GetAllSets()` | `sets` | All transmog sets |
104| `C_TransmogSets.GetBaseSetsCounts()` | `numCollected, numTotal` | base sets progress |
105| `C_TransmogSets.GetSetInfo(setID)` | `setInfo` | Set details |
106| `C_TransmogSets.GetSetSources(setID)` | `sources` | Sources in set |
107| `C_TransmogSets.GetSetPrimaryAppearances(setID)` | `appearances` | Primary appearances |
108| `C_TransmogSets.GetBaseSets()` | `baseSets` | All base sets |
109| `C_TransmogSets.GetBaseSetID(setID)` | `baseSetID` | Base set for variant |
110| `C_TransmogSets.GetVariantSets(baseSetID)` | `variantSets` | Variants of base set |
111| `C_TransmogSets.GetUsableSets()` | `usableSets` | Sets usable by class |
112| `C_TransmogSets.HasUsableSets()` | `hasUsable` | Has usable sets? |
113| `C_TransmogSets.IsSetCollected(setID)` | `isCollected` | Set fully collected? |
114| `C_TransmogSets.IsSetUsable(setID)` | `isUsable` | Set usable by player? |
115| `C_TransmogSets.IsNewAppearance(appearanceID)` | `isNew` | New since last viewed? |
116| `C_TransmogSets.ClearNewAppearance(appearanceID)` | — | Mark as seen |
117| `C_TransmogSets.GetNumSetsCollected()` | `numCollected` | Sets collected count |
118| `C_TransmogSets.GetNumSetsTotal()` | `numTotal` | Total number of sets |
119| `C_TransmogSets.GetSetSourceCounts(setID)` | `numCollected, numTotal` | Sources in set progress |
120| `C_TransmogSets.SetHasNewSources(setID)` | `hasNewSources` | New sources in set? |
121| `C_TransmogSets.SetIsFavorite(setID, isFavorite)` | — | Toggle favorite |
122| `C_TransmogSets.GetIsFavorite(setID)` | `isFavorite` | Is favorite set? |
123
124---
125
126## C_TransmogOutfits — Outfits
127
128| Function | Returns | Description |
129|----------|---------|-------------|
130| `C_TransmogOutfits.GetOutfits()` | `outfits` | All saved outfits |
131| `C_TransmogOutfits.GetOutfitInfo(outfitID)` | `name, icon` | Outfit info |
132| `C_TransmogOutfits.NewOutfit(name, icon, sources)` | `outfitID` | Create new outfit |
133| `C_TransmogOutfits.DeleteOutfit(outfitID)` | — | Delete outfit |
134| `C_TransmogOutfits.RenameOutfit(outfitID, name)` | — | Rename outfit |
135| `C_TransmogOutfits.SetOutfitIcon(outfitID, icon)` | — | Set outfit icon |
136| `C_TransmogOutfits.SaveOutfit(outfitID, sources)` | — | Update outfit |
137| `C_TransmogOutfits.GetOutfitSources(outfitID)` | `sources` | Get all sources in outfit |
138| `C_TransmogOutfits.GetSlotSourceID(outfitID, slotID)` | `sourceID` | Source for slot |
139
140---
141
142## C_DyeColor / C_DyeColorInfo — Armor Dyes (12.0.0)
143
144New system for applying dye colors to armor appearances.
145
146| Function | Returns | Description |
147|----------|---------|-------------|
148| `C_DyeColorInfo.GetDyeColorInfo(dyeColorID)` | `info` | Dye color details |
149| `C_DyeColorInfo.GetAvailableDyeColors()` | `dyeColors` | Available dye colors |
150| `C_DyeColorInfo.GetDyeColorCategories()` | `categories` | Dye color categories |
151| `C_DyeColorInfo.IsDyeColorUnlocked(dyeColorID)` | `isUnlocked` | Is color unlocked? |
152| `C_DyeColorInfo.GetNumUnlockedDyeColors()` | `numUnlocked` | Unlocked dye count |
153
154---
155
156## C_BarberShop — Character Customization
157
158| Function | Returns | Description |
159|----------|---------|-------------|
160| `C_BarberShop.IsViewingAlteredForm()` | `isViewing` | Viewing alt form? |
161| `C_BarberShop.SetViewingAlteredForm(isViewing)` | — | Toggle alt form view |
162| `C_BarberShop.GetAvailableCustomizations()` | `customizations` | Available customizations |
163| `C_BarberShop.GetCurrentCustomizations()` | `customizations` | Current selections |
164| `C_BarberShop.SetCustomizationChoice(customizationCategoryID, choiceIndex)` | — | Set a choice |
165| `C_BarberShop.PreviewCustomizationChoice(customizationCategoryID, choiceIndex)` | — | Preview a choice |
166| `C_BarberShop.GetCustomizationScope()` | `scope` | Customization scope |
167| `C_BarberShop.HasAnyChanges()` | `hasChanges` | Has unsaved changes? |
168| `C_BarberShop.ApplyCustomizationChoices()` | — | Apply changes |
169| `C_BarberShop.Cancel()` | — | Cancel and close |
170| `C_BarberShop.ResetCustomizationChoices()` | — | Reset to current |
171| `C_BarberShop.GetCurrentCost()` | `cost` | Cost for changes |
172| `C_BarberShop.MarkCustomizationChoiceAsSeen(choiceID)` | — | Mark choice seen |
173| `C_BarberShop.MarkCustomizationOptionAsSeen(optionID)` | — | Mark option seen |
174| `C_BarberShop.SetSelectedSex(sex)` | — | Set selected sex |
175
176---
177
178## Key Events
179
180| Event | Payload | Description |
181|-------|---------|-------------|
182| `TRANSMOGRIFY_OPEN` | — | Transmog NPC opened |
183| `TRANSMOGRIFY_CLOSE` | — | Transmog NPC closed |
184| `TRANSMOGRIFY_UPDATE` | slotID | Transmog slot updated |
185| `TRANSMOGRIFY_SUCCESS` | slotID | Transmog applied |
186| `TRANSMOG_COLLECTION_SOURCE_ADDED` | sourceID | New source collected |
187| `TRANSMOG_COLLECTION_SOURCE_REMOVED` | sourceID | Source removed |
188| `TRANSMOG_COLLECTION_UPDATED` | — | Collection changed |
189| `TRANSMOG_COLLECTION_CAMERA_UPDATE` | — | Camera update |
190| `TRANSMOG_SETS_UPDATE_FAVORITE` | — | Set favorite changed |
191| `TRANSMOG_SEARCH_UPDATED` | searchType | Search results updated |
192| `TRANSMOG_OUTFITS_CHANGED` | — | Outfits changed |
193| `BARBER_SHOP_OPEN` | — | Barber shop opened |
194| `BARBER_SHOP_CLOSE` | — | Barber shop closed |
195| `BARBER_SHOP_COST_UPDATE` | — | Cost updated |
196| `BARBER_SHOP_APPEARANCE_APPLIED` | — | Appearance applied |
197| `BARBER_SHOP_RESULT` | success | Barber shop result |
198
199---
200
201## Gotchas & Restrictions
202
2031. **Transmog NPC required** — `C_Transmogrify.ApplyAllPending()` and related functions only work at a transmog NPC.
2042. **sourceID vs appearanceID** — A sourceID is a specific item drop source. An appearanceID is the visual look (multiple sources can share one appearance).
2053. **Category by armor type** — Transmog categories are divided by armor slot and armor type (cloth, leather, mail, plate).
2064. **Dye system is new** — The dye color system is new in 12.0.0 and APIs may evolve.
2075. **Barber shop requires presence** — `C_BarberShop` functions only work while at the barber shop NPC.
2086. **Outfit limit** — There's a maximum number of saved outfits per character.
2097. **Set variants** — A base set can have multiple variants (different difficulties, etc.). Use `GetVariantSets()`.
2108. **illusion = weapon enchant visual** — Illusions are the weapon glow effects. Separate from armor transmog.