Housing API (Retail — Patch 12.0.0)
Comprehensive reference for the player housing system, brand new in Patch 12.0.0.
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. This entire system is new in 12.0.0.
Scope
-
HousingUI — Core housing system frame and state
-
C_HouseEditorUI — Placement and editing (position, rotate, scale)
-
C_HousingCatalog — Decoration catalog browsing
-
HousingBasicModeUI — Simplified placement mode
-
HousingCleanupModeUI — Bulk cleanup/removal mode
-
HousingCustomizeModeUI — Customization mode
-
HousingDecorUI — Decoration management
-
HousingExpertModeUI — Advanced/expert placement
-
C_HouseExteriorUI — Exterior appearance customization
-
HousingLayoutUI — Layout save/load
-
C_HousingNeighborhood — Neighborhoods and visiting
-
C_NeighborhoodInitiative — Community initiative goals
-
CatalogShop — Housing shop/catalog purchase system
HousingUI — Core Housing System
Function Returns Description
HousingUI.IsHousingModeActive()
isActive
Is housing editing active?
HousingUI.EnterHousingMode()
— Enter housing edit mode
HousingUI.ExitHousingMode()
— Exit housing edit mode
HousingUI.GetCurrentHouseInfo()
houseInfo
Current house data
HousingUI.GetHouseOwner()
ownerInfo
House owner info
HousingUI.IsPlayerInOwnHouse()
isOwn
In own house?
HousingUI.IsPlayerInHouse()
inHouse
In any house?
HousingUI.GetHousingPlotInfo()
plotInfo
Plot/lot info
C_HouseEditorUI — Placement & Editing
The editor is the core system for placing, moving, rotating, and scaling decorations.
Object Selection & Manipulation
Function Returns Description
C_HouseEditorUI.SelectObject(objectID)
— Select decoration
C_HouseEditorUI.DeselectObject()
— Deselect current
C_HouseEditorUI.GetSelectedObject()
objectInfo
Current selection
C_HouseEditorUI.DeleteSelectedObject()
— Delete selection
C_HouseEditorUI.MoveObject(objectID, x, y, z)
— Move decoration
C_HouseEditorUI.RotateObject(objectID, yaw, pitch, roll)
— Rotate decoration
C_HouseEditorUI.ScaleObject(objectID, scale)
— Scale decoration
C_HouseEditorUI.GetObjectPosition(objectID)
x, y, z
Object position
C_HouseEditorUI.GetObjectRotation(objectID)
yaw, pitch, roll
Object rotation
C_HouseEditorUI.GetObjectScale(objectID)
scale
Object scale
Placement
Function Returns Description
C_HouseEditorUI.PlaceObject(catalogItemID)
— Start placing item
C_HouseEditorUI.ConfirmPlacement()
— Confirm current placement
C_HouseEditorUI.CancelPlacement()
— Cancel placement
C_HouseEditorUI.IsPlacing()
isPlacing
In placement mode?
C_HouseEditorUI.GetPlacedObjects()
objects
All placed objects
C_HouseEditorUI.GetPlacementLimits()
current, max
Decoration limits
Undo/Redo
Function Returns Description
C_HouseEditorUI.Undo()
— Undo last action
C_HouseEditorUI.Redo()
— Redo last undo
C_HouseEditorUI.CanUndo()
canUndo
Has undo?
C_HouseEditorUI.CanRedo()
canRedo
Has redo?
C_HousingCatalog — Decoration Catalog
Function Returns Description
C_HousingCatalog.GetCategories()
categories
All categories
C_HousingCatalog.GetCategoryInfo(categoryID)
categoryInfo
Category details
C_HousingCatalog.GetItemsInCategory(categoryID)
items
Items in category
C_HousingCatalog.GetItemInfo(catalogItemID)
itemInfo
Catalog item info
C_HousingCatalog.GetOwnedItems()
ownedItems
Player's owned items
C_HousingCatalog.IsItemOwned(catalogItemID)
isOwned
Player owns item?
C_HousingCatalog.GetItemCount(catalogItemID)
count
How many owned
C_HousingCatalog.SearchCatalog(searchText)
results
Search items
C_HousingCatalog.GetFilteredItems(filters)
items
Filter items
HousingBasicModeUI — Simplified Mode
Function Returns Description
HousingBasicModeUI.EnterBasicMode()
— Enter basic edit mode
HousingBasicModeUI.ExitBasicMode()
— Exit basic mode
HousingBasicModeUI.IsInBasicMode()
isBasic
In basic mode?
HousingCleanupModeUI — Cleanup Mode
Function Returns Description
HousingCleanupModeUI.EnterCleanupMode()
— Enter cleanup mode
HousingCleanupModeUI.ExitCleanupMode()
— Exit cleanup mode
HousingCleanupModeUI.SelectForCleanup(objectID)
— Tag for cleanup
HousingCleanupModeUI.ConfirmCleanup()
— Execute cleanup
HousingCleanupModeUI.GetCleanupCount()
count
Items tagged
HousingCustomizeModeUI — Customization
Function Returns Description
HousingCustomizeModeUI.EnterCustomizeMode()
— Enter customize mode
HousingCustomizeModeUI.ExitCustomizeMode()
— Exit customize mode
HousingCustomizeModeUI.GetCustomizationOptions(objectID)
options
Object options
HousingCustomizeModeUI.ApplyCustomization(objectID, optionID)
— Apply option
HousingDecorUI — Decoration Management
Function Returns Description
HousingDecorUI.GetDecorInventory()
inventory
Stored decorations
HousingDecorUI.GetDecorInfo(decorID)
decorInfo
Decoration details
HousingDecorUI.StoreDecoration(objectID)
— Store placed item
HousingDecorUI.GetDecorCategories()
categories
Inventory categories
HousingExpertModeUI — Expert Placement
Function Returns Description
HousingExpertModeUI.EnterExpertMode()
— Enter expert mode
HousingExpertModeUI.ExitExpertMode()
— Exit expert mode
HousingExpertModeUI.IsInExpertMode()
isExpert
In expert mode?
HousingExpertModeUI.SetSnapping(enabled)
— Toggle grid snap
HousingExpertModeUI.GetSnapping()
enabled
Snap enabled?
HousingExpertModeUI.SetPrecisionMode(enabled)
— Toggle precision
HousingExpertModeUI.GetPrecisionMode()
enabled
Precision on?
C_HouseExteriorUI — Exterior Customization
Function Returns Description
C_HouseExteriorUI.GetExteriorOptions()
options
Available exteriors
C_HouseExteriorUI.GetCurrentExterior()
exteriorInfo
Current exterior
C_HouseExteriorUI.SetExterior(exteriorID)
— Change exterior
C_HouseExteriorUI.PreviewExterior(exteriorID)
— Preview exterior
C_HouseExteriorUI.GetExteriorCategories()
categories
Exterior categories
HousingLayoutUI — Layout Save/Load
Function Returns Description
HousingLayoutUI.GetSavedLayouts()
layouts
Saved layouts
HousingLayoutUI.SaveLayout(name)
— Save current layout
HousingLayoutUI.LoadLayout(layoutID)
— Load layout
HousingLayoutUI.DeleteLayout(layoutID)
— Delete layout
HousingLayoutUI.RenameLayout(layoutID, name)
— Rename layout
HousingLayoutUI.GetLayoutInfo(layoutID)
layoutInfo
Layout details
C_HousingNeighborhood — Neighborhoods
Function Returns Description
C_HousingNeighborhood.GetNeighborhoodInfo()
neighborhoodInfo
Current neighborhood
C_HousingNeighborhood.GetNeighbors()
neighbors
Neighbor list
C_HousingNeighborhood.GetNeighborInfo(neighborID)
neighborInfo
Neighbor details
C_HousingNeighborhood.VisitNeighbor(neighborID)
— Visit a neighbor
C_HousingNeighborhood.GetVisitableHouses()
houses
Visitable houses
C_HousingNeighborhood.InviteToNeighborhood(playerName)
— Invite player
C_HousingNeighborhood.LeaveNeighborhood()
— Leave neighborhood
C_HousingNeighborhood.GetNeighborhoodMembers()
members
All members
C_NeighborhoodInitiative — Community Goals
Function Returns Description
C_NeighborhoodInitiative.GetCurrentInitiative()
initiativeInfo
Active initiative
C_NeighborhoodInitiative.GetInitiativeProgress()
progress
Current progress
C_NeighborhoodInitiative.GetInitiativeRewards()
rewards
Initiative rewards
C_NeighborhoodInitiative.GetPlayerContribution()
contribution
Player's contribution
C_NeighborhoodInitiative.GetInitiativeHistory()
history
Past initiatives
CatalogShop — Housing Store
Function Returns Description
CatalogShop.GetShopCategories()
categories
Shop categories
CatalogShop.GetShopItems(categoryID)
items
Items for sale
CatalogShop.GetShopItemInfo(shopItemID)
itemInfo
Item details
CatalogShop.PurchaseItem(shopItemID)
— Purchase item
CatalogShop.CanPurchase(shopItemID)
canBuy, reason
Can purchase?
CatalogShop.GetBundleInfo(bundleID)
bundleInfo
Bundle details
Common Patterns
Check If Player Is Home
local function CheckHousingState() if HousingUI.IsPlayerInOwnHouse() then print("Welcome home!") local houseInfo = HousingUI.GetCurrentHouseInfo() if houseInfo then print("House:", houseInfo.name) end elseif HousingUI.IsPlayerInHouse() then local owner = HousingUI.GetHouseOwner() if owner then print("Visiting", owner.name, "'s house") end end end
Place a Decoration
-- Enter housing edit mode and place an item local function PlaceDecoration(catalogItemID) if not HousingUI.IsHousingModeActive() then HousingUI.EnterHousingMode() end
local current, max = C_HouseEditorUI.GetPlacementLimits()
if current >= max then
print("Decoration limit reached:", current, "/", max)
return
end
C_HouseEditorUI.PlaceObject(catalogItemID)
end
Browse Catalog
local function BrowseCatalog() local categories = C_HousingCatalog.GetCategories() for _, cat in ipairs(categories) do local catInfo = C_HousingCatalog.GetCategoryInfo(cat) if catInfo then print("Category:", catInfo.name) local items = C_HousingCatalog.GetItemsInCategory(cat) for _, item in ipairs(items) do local info = C_HousingCatalog.GetItemInfo(item) if info then local owned = C_HousingCatalog.IsItemOwned(item) print(" -", info.name, owned and "(Owned)" or "") end end end end end
Save and Load Layouts
-- Save current decoration layout HousingLayoutUI.SaveLayout("My Living Room v2")
-- List saved layouts local layouts = HousingLayoutUI.GetSavedLayouts() for _, layout in ipairs(layouts) do local info = HousingLayoutUI.GetLayoutInfo(layout) if info then print(info.name, "-", info.objectCount, "objects") end end
Key Events
Event Payload Description
HOUSING_MODE_ENTERED
— Entered housing edit mode
HOUSING_MODE_EXITED
— Exited housing edit mode
HOUSING_OBJECT_PLACED
objectID Decoration placed
HOUSING_OBJECT_REMOVED
objectID Decoration removed
HOUSING_OBJECT_MOVED
objectID Decoration moved
HOUSING_OBJECT_SELECTED
objectID Object selected
HOUSING_OBJECT_DESELECTED
— Object deselected
HOUSING_PLACEMENT_STARTED
catalogItemID Placement mode started
HOUSING_PLACEMENT_CONFIRMED
objectID Placement confirmed
HOUSING_PLACEMENT_CANCELED
— Placement canceled
HOUSING_CATALOG_UPDATED
— Catalog data changed
HOUSING_LAYOUT_SAVED
layoutID Layout saved
HOUSING_LAYOUT_LOADED
layoutID Layout loaded
HOUSING_EXTERIOR_CHANGED
exteriorID Exterior changed
HOUSING_LIMIT_UPDATED
current, max Limit changed
HOUSING_ENTERED_HOUSE
houseInfo Entered a house
HOUSING_LEFT_HOUSE
— Left a house
NEIGHBORHOOD_INITIATIVE_UPDATE
— Initiative progress changed
NEIGHBORHOOD_MEMBER_JOINED
memberInfo New neighbor
Gotchas & Restrictions
-
12.0.0 only — The entire housing system is new in Patch 12.0.0. APIs may evolve in subsequent patches.
-
Mode requirements — Must call HousingUI.EnterHousingMode() before using editor functions.
-
Placement limits — Each house has a decoration cap. Check with GetPlacementLimits() .
-
Expert vs Basic mode — Expert mode allows full 3D positioning; basic mode uses simplified snapping.
-
Own house only for editing — Cannot edit decorations in someone else's house.
-
Layout compatibility — Layouts may not load correctly if decorations have been removed from the game.
-
Neighborhood initiatives — Shared community goals; progress is collective, not individual.
-
Hardware events — Purchasing catalog items requires user interaction (hardware clicks).