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).
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: wow-api-housing3description: Complete reference for WoW Retail Player Housing APIs (new in Patch 12.0.0). Covers HousingUI (core housing system), C_HouseEditorUI (placement/editing modes), C_HousingCatalog (decoration catalog), HousingBasicModeUI, HousingCleanupModeUI, HousingCustomizeModeUI, HousingDecorUI, HousingExpertModeUI, C_HouseExteriorUI (exterior customization), HousingLayoutUI, C_HousingNeighborhood (neighborhoods/visiting), C_NeighborhoodInitiative (community goals), and CatalogShop. Use when working with player housing placement, decoration, editing modes, neighborhoods, housing catalogs, exterior customization, or neighborhood initiatives. Use when this capability is needed.4---56# Housing API (Retail — Patch 12.0.0)78Comprehensive reference for the player housing system, brand new in Patch 12.0.0.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. This entire system is new in 12.0.0.1314---1516## Scope1718- **HousingUI** — Core housing system frame and state19- **C_HouseEditorUI** — Placement and editing (position, rotate, scale)20- **C_HousingCatalog** — Decoration catalog browsing21- **HousingBasicModeUI** — Simplified placement mode22- **HousingCleanupModeUI** — Bulk cleanup/removal mode23- **HousingCustomizeModeUI** — Customization mode24- **HousingDecorUI** — Decoration management25- **HousingExpertModeUI** — Advanced/expert placement26- **C_HouseExteriorUI** — Exterior appearance customization27- **HousingLayoutUI** — Layout save/load28- **C_HousingNeighborhood** — Neighborhoods and visiting29- **C_NeighborhoodInitiative** — Community initiative goals30- **CatalogShop** — Housing shop/catalog purchase system3132---3334## HousingUI — Core Housing System3536| Function | Returns | Description |37|----------|---------|-------------|38| `HousingUI.IsHousingModeActive()` | `isActive` | Is housing editing active? |39| `HousingUI.EnterHousingMode()` | — | Enter housing edit mode |40| `HousingUI.ExitHousingMode()` | — | Exit housing edit mode |41| `HousingUI.GetCurrentHouseInfo()` | `houseInfo` | Current house data |42| `HousingUI.GetHouseOwner()` | `ownerInfo` | House owner info |43| `HousingUI.IsPlayerInOwnHouse()` | `isOwn` | In own house? |44| `HousingUI.IsPlayerInHouse()` | `inHouse` | In any house? |45| `HousingUI.GetHousingPlotInfo()` | `plotInfo` | Plot/lot info |4647---4849## C_HouseEditorUI — Placement & Editing5051The editor is the core system for placing, moving, rotating, and scaling decorations.5253### Object Selection & Manipulation5455| Function | Returns | Description |56|----------|---------|-------------|57| `C_HouseEditorUI.SelectObject(objectID)` | — | Select decoration |58| `C_HouseEditorUI.DeselectObject()` | — | Deselect current |59| `C_HouseEditorUI.GetSelectedObject()` | `objectInfo` | Current selection |60| `C_HouseEditorUI.DeleteSelectedObject()` | — | Delete selection |61| `C_HouseEditorUI.MoveObject(objectID, x, y, z)` | — | Move decoration |62| `C_HouseEditorUI.RotateObject(objectID, yaw, pitch, roll)` | — | Rotate decoration |63| `C_HouseEditorUI.ScaleObject(objectID, scale)` | — | Scale decoration |64| `C_HouseEditorUI.GetObjectPosition(objectID)` | `x, y, z` | Object position |65| `C_HouseEditorUI.GetObjectRotation(objectID)` | `yaw, pitch, roll` | Object rotation |66| `C_HouseEditorUI.GetObjectScale(objectID)` | `scale` | Object scale |6768### Placement6970| Function | Returns | Description |71|----------|---------|-------------|72| `C_HouseEditorUI.PlaceObject(catalogItemID)` | — | Start placing item |73| `C_HouseEditorUI.ConfirmPlacement()` | — | Confirm current placement |74| `C_HouseEditorUI.CancelPlacement()` | — | Cancel placement |75| `C_HouseEditorUI.IsPlacing()` | `isPlacing` | In placement mode? |76| `C_HouseEditorUI.GetPlacedObjects()` | `objects` | All placed objects |77| `C_HouseEditorUI.GetPlacementLimits()` | `current, max` | Decoration limits |7879### Undo/Redo8081| Function | Returns | Description |82|----------|---------|-------------|83| `C_HouseEditorUI.Undo()` | — | Undo last action |84| `C_HouseEditorUI.Redo()` | — | Redo last undo |85| `C_HouseEditorUI.CanUndo()` | `canUndo` | Has undo? |86| `C_HouseEditorUI.CanRedo()` | `canRedo` | Has redo? |8788---8990## C_HousingCatalog — Decoration Catalog9192| Function | Returns | Description |93|----------|---------|-------------|94| `C_HousingCatalog.GetCategories()` | `categories` | All categories |95| `C_HousingCatalog.GetCategoryInfo(categoryID)` | `categoryInfo` | Category details |96| `C_HousingCatalog.GetItemsInCategory(categoryID)` | `items` | Items in category |97| `C_HousingCatalog.GetItemInfo(catalogItemID)` | `itemInfo` | Catalog item info |98| `C_HousingCatalog.GetOwnedItems()` | `ownedItems` | Player's owned items |99| `C_HousingCatalog.IsItemOwned(catalogItemID)` | `isOwned` | Player owns item? |100| `C_HousingCatalog.GetItemCount(catalogItemID)` | `count` | How many owned |101| `C_HousingCatalog.SearchCatalog(searchText)` | `results` | Search items |102| `C_HousingCatalog.GetFilteredItems(filters)` | `items` | Filter items |103104---105106## HousingBasicModeUI — Simplified Mode107108| Function | Returns | Description |109|----------|---------|-------------|110| `HousingBasicModeUI.EnterBasicMode()` | — | Enter basic edit mode |111| `HousingBasicModeUI.ExitBasicMode()` | — | Exit basic mode |112| `HousingBasicModeUI.IsInBasicMode()` | `isBasic` | In basic mode? |113114---115116## HousingCleanupModeUI — Cleanup Mode117118| Function | Returns | Description |119|----------|---------|-------------|120| `HousingCleanupModeUI.EnterCleanupMode()` | — | Enter cleanup mode |121| `HousingCleanupModeUI.ExitCleanupMode()` | — | Exit cleanup mode |122| `HousingCleanupModeUI.SelectForCleanup(objectID)` | — | Tag for cleanup |123| `HousingCleanupModeUI.ConfirmCleanup()` | — | Execute cleanup |124| `HousingCleanupModeUI.GetCleanupCount()` | `count` | Items tagged |125126---127128## HousingCustomizeModeUI — Customization129130| Function | Returns | Description |131|----------|---------|-------------|132| `HousingCustomizeModeUI.EnterCustomizeMode()` | — | Enter customize mode |133| `HousingCustomizeModeUI.ExitCustomizeMode()` | — | Exit customize mode |134| `HousingCustomizeModeUI.GetCustomizationOptions(objectID)` | `options` | Object options |135| `HousingCustomizeModeUI.ApplyCustomization(objectID, optionID)` | — | Apply option |136137---138139## HousingDecorUI — Decoration Management140141| Function | Returns | Description |142|----------|---------|-------------|143| `HousingDecorUI.GetDecorInventory()` | `inventory` | Stored decorations |144| `HousingDecorUI.GetDecorInfo(decorID)` | `decorInfo` | Decoration details |145| `HousingDecorUI.StoreDecoration(objectID)` | — | Store placed item |146| `HousingDecorUI.GetDecorCategories()` | `categories` | Inventory categories |147148---149150## HousingExpertModeUI — Expert Placement151152| Function | Returns | Description |153|----------|---------|-------------|154| `HousingExpertModeUI.EnterExpertMode()` | — | Enter expert mode |155| `HousingExpertModeUI.ExitExpertMode()` | — | Exit expert mode |156| `HousingExpertModeUI.IsInExpertMode()` | `isExpert` | In expert mode? |157| `HousingExpertModeUI.SetSnapping(enabled)` | — | Toggle grid snap |158| `HousingExpertModeUI.GetSnapping()` | `enabled` | Snap enabled? |159| `HousingExpertModeUI.SetPrecisionMode(enabled)` | — | Toggle precision |160| `HousingExpertModeUI.GetPrecisionMode()` | `enabled` | Precision on? |161162---163164## C_HouseExteriorUI — Exterior Customization165166| Function | Returns | Description |167|----------|---------|-------------|168| `C_HouseExteriorUI.GetExteriorOptions()` | `options` | Available exteriors |169| `C_HouseExteriorUI.GetCurrentExterior()` | `exteriorInfo` | Current exterior |170| `C_HouseExteriorUI.SetExterior(exteriorID)` | — | Change exterior |171| `C_HouseExteriorUI.PreviewExterior(exteriorID)` | — | Preview exterior |172| `C_HouseExteriorUI.GetExteriorCategories()` | `categories` | Exterior categories |173174---175176## HousingLayoutUI — Layout Save/Load177178| Function | Returns | Description |179|----------|---------|-------------|180| `HousingLayoutUI.GetSavedLayouts()` | `layouts` | Saved layouts |181| `HousingLayoutUI.SaveLayout(name)` | — | Save current layout |182| `HousingLayoutUI.LoadLayout(layoutID)` | — | Load layout |183| `HousingLayoutUI.DeleteLayout(layoutID)` | — | Delete layout |184| `HousingLayoutUI.RenameLayout(layoutID, name)` | — | Rename layout |185| `HousingLayoutUI.GetLayoutInfo(layoutID)` | `layoutInfo` | Layout details |186187---188189## C_HousingNeighborhood — Neighborhoods190191| Function | Returns | Description |192|----------|---------|-------------|193| `C_HousingNeighborhood.GetNeighborhoodInfo()` | `neighborhoodInfo` | Current neighborhood |194| `C_HousingNeighborhood.GetNeighbors()` | `neighbors` | Neighbor list |195| `C_HousingNeighborhood.GetNeighborInfo(neighborID)` | `neighborInfo` | Neighbor details |196| `C_HousingNeighborhood.VisitNeighbor(neighborID)` | — | Visit a neighbor |197| `C_HousingNeighborhood.GetVisitableHouses()` | `houses` | Visitable houses |198| `C_HousingNeighborhood.InviteToNeighborhood(playerName)` | — | Invite player |199| `C_HousingNeighborhood.LeaveNeighborhood()` | — | Leave neighborhood |200| `C_HousingNeighborhood.GetNeighborhoodMembers()` | `members` | All members |201202---203204## C_NeighborhoodInitiative — Community Goals205206| Function | Returns | Description |207|----------|---------|-------------|208| `C_NeighborhoodInitiative.GetCurrentInitiative()` | `initiativeInfo` | Active initiative |209| `C_NeighborhoodInitiative.GetInitiativeProgress()` | `progress` | Current progress |210| `C_NeighborhoodInitiative.GetInitiativeRewards()` | `rewards` | Initiative rewards |211| `C_NeighborhoodInitiative.GetPlayerContribution()` | `contribution` | Player's contribution |212| `C_NeighborhoodInitiative.GetInitiativeHistory()` | `history` | Past initiatives |213214---215216## CatalogShop — Housing Store217218| Function | Returns | Description |219|----------|---------|-------------|220| `CatalogShop.GetShopCategories()` | `categories` | Shop categories |221| `CatalogShop.GetShopItems(categoryID)` | `items` | Items for sale |222| `CatalogShop.GetShopItemInfo(shopItemID)` | `itemInfo` | Item details |223| `CatalogShop.PurchaseItem(shopItemID)` | — | Purchase item |224| `CatalogShop.CanPurchase(shopItemID)` | `canBuy, reason` | Can purchase? |225| `CatalogShop.GetBundleInfo(bundleID)` | `bundleInfo` | Bundle details |226227---228229## Common Patterns230231### Check If Player Is Home232233```lua234local function CheckHousingState()235 if HousingUI.IsPlayerInOwnHouse() then236 print("Welcome home!")237 local houseInfo = HousingUI.GetCurrentHouseInfo()238 if houseInfo then239 print("House:", houseInfo.name)240 end241 elseif HousingUI.IsPlayerInHouse() then242 local owner = HousingUI.GetHouseOwner()243 if owner then244 print("Visiting", owner.name, "'s house")245 end246 end247end248```249250### Place a Decoration251252```lua253-- Enter housing edit mode and place an item254local function PlaceDecoration(catalogItemID)255 if not HousingUI.IsHousingModeActive() then256 HousingUI.EnterHousingMode()257 end258 259 local current, max = C_HouseEditorUI.GetPlacementLimits()260 if current >= max then261 print("Decoration limit reached:", current, "/", max)262 return263 end264 265 C_HouseEditorUI.PlaceObject(catalogItemID)266end267```268269### Browse Catalog270271```lua272local function BrowseCatalog()273 local categories = C_HousingCatalog.GetCategories()274 for _, cat in ipairs(categories) do275 local catInfo = C_HousingCatalog.GetCategoryInfo(cat)276 if catInfo then277 print("Category:", catInfo.name)278 local items = C_HousingCatalog.GetItemsInCategory(cat)279 for _, item in ipairs(items) do280 local info = C_HousingCatalog.GetItemInfo(item)281 if info then282 local owned = C_HousingCatalog.IsItemOwned(item)283 print(" -", info.name, owned and "(Owned)" or "")284 end285 end286 end287 end288end289```290291### Save and Load Layouts292293```lua294-- Save current decoration layout295HousingLayoutUI.SaveLayout("My Living Room v2")296297-- List saved layouts298local layouts = HousingLayoutUI.GetSavedLayouts()299for _, layout in ipairs(layouts) do300 local info = HousingLayoutUI.GetLayoutInfo(layout)301 if info then302 print(info.name, "-", info.objectCount, "objects")303 end304end305```306307---308309## Key Events310311| Event | Payload | Description |312|-------|---------|-------------|313| `HOUSING_MODE_ENTERED` | — | Entered housing edit mode |314| `HOUSING_MODE_EXITED` | — | Exited housing edit mode |315| `HOUSING_OBJECT_PLACED` | objectID | Decoration placed |316| `HOUSING_OBJECT_REMOVED` | objectID | Decoration removed |317| `HOUSING_OBJECT_MOVED` | objectID | Decoration moved |318| `HOUSING_OBJECT_SELECTED` | objectID | Object selected |319| `HOUSING_OBJECT_DESELECTED` | — | Object deselected |320| `HOUSING_PLACEMENT_STARTED` | catalogItemID | Placement mode started |321| `HOUSING_PLACEMENT_CONFIRMED` | objectID | Placement confirmed |322| `HOUSING_PLACEMENT_CANCELED` | — | Placement canceled |323| `HOUSING_CATALOG_UPDATED` | — | Catalog data changed |324| `HOUSING_LAYOUT_SAVED` | layoutID | Layout saved |325| `HOUSING_LAYOUT_LOADED` | layoutID | Layout loaded |326| `HOUSING_EXTERIOR_CHANGED` | exteriorID | Exterior changed |327| `HOUSING_LIMIT_UPDATED` | current, max | Limit changed |328| `HOUSING_ENTERED_HOUSE` | houseInfo | Entered a house |329| `HOUSING_LEFT_HOUSE` | — | Left a house |330| `NEIGHBORHOOD_INITIATIVE_UPDATE` | — | Initiative progress changed |331| `NEIGHBORHOOD_MEMBER_JOINED` | memberInfo | New neighbor |332333---334335## Gotchas & Restrictions3363371. **12.0.0 only** — The entire housing system is new in Patch 12.0.0. APIs may evolve in subsequent patches.3382. **Mode requirements** — Must call `HousingUI.EnterHousingMode()` before using editor functions.3393. **Placement limits** — Each house has a decoration cap. Check with `GetPlacementLimits()`.3404. **Expert vs Basic mode** — Expert mode allows full 3D positioning; basic mode uses simplified snapping.3415. **Own house only for editing** — Cannot edit decorations in someone else's house.3426. **Layout compatibility** — Layouts may not load correctly if decorations have been removed from the game.3437. **Neighborhood initiatives** — Shared community goals; progress is collective, not individual.3448. **Hardware events** — Purchasing catalog items requires user interaction (hardware clicks).345346---347> Converted and distributed by [TomeVault](https://tomevault.io/claim/jburlison) — claim your Tome and manage your conversions.348<!-- tomevault:4.0:skill_md:2026-04-13 -->