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).