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. Use when this capability is needed.4---56# Transmog API (Retail — Patch 12.0.0)78Comprehensive reference for transmogrification, appearances, sets, outfits, dyes, and barber shop APIs.910> **Source:** https://warcraft.wiki.gg/wiki/World_of_Warcraft_API11> **Current as of:** Patch 12.0.0 (Build 65655) — January 28, 202612> **Scope:** Retail only.1314---1516## Scope1718- **C_Transmogrify** — Applying transmog at NPC19- **C_TransmogCollection** — Appearance sources, categories, collection status20- **C_TransmogSets** — Transmog set management21- **C_TransmogOutfits** — Outfit save/load22- **C_DyeColor / C_DyeColorInfo** — Armor dye system (new in 12.0.0)23- **C_BarberShop** — Character customization2425---2627## C_Transmogrify — Applying Transmog2829| 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 |4849---5051## C_TransmogCollection — Appearance Sources5253### Source & Appearance Info5455| 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 |6667### Categories6869| 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? |7677### Illusions7879| 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? |8485### Search & Filtering8687| 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 |9697---9899## C_TransmogSets — Transmog Sets100101| 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? |123124---125126## C_TransmogOutfits — Outfits127128| 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 |139140---141142## C_DyeColor / C_DyeColorInfo — Armor Dyes (12.0.0)143144New system for applying dye colors to armor appearances.145146| 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 |153154---155156## C_BarberShop — Character Customization157158| 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 |175176---177178## Key Events179180| 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 |198199---200201## Gotchas & Restrictions2022031. **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.211212---213> Converted and distributed by [TomeVault](https://tomevault.io/claim/jburlison) — claim your Tome and manage your conversions.214<!-- tomevault:4.0:skill_md:2026-04-13 -->