1---2name: wow-api-currency-economy3description: Complete reference for WoW Retail Currency, Auction House, Token, Store, Trading Post, Black Market, Mail, and Player Trading APIs. Covers C_CurrencyInfo (currency data, tracking, backpack), Auction House (full listing/bidding/buying/selling/search/commodity), C_WowTokenPublic (WoW Token market), AccountStore (in-game shop), CatalogShop, C_PerksProgram (Trading Post — Trader's Tender), BlackMarket (BMAH), TradeInfo (player trading), MailInfo (mailbox), and related events. Use when working with currencies, auction house UI, WoW Tokens, the in-game store, Trading Post, black market, mail, or player-to-player trading.4---5
6# Currency & Economy API (Retail — Patch 12.0.0)
7
8Comprehensive reference for currency, auction house, store, token, trading post, mail, and trade 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_CurrencyInfo** — Currency data, tracking, backpack display
19- **Auction House** — Listing, bidding, buying, selling, commodities
20- **C_WowTokenPublic / C_WowTokenUI** — WoW Token market
21- **AccountStore / StorePublic** — In-game shop
22- **CatalogShop** — Catalog shop system
23- **C_PerksProgram** — Trading Post (Trader's Tender)
24- **BlackMarket** — Black Market Auction House
25- **TradeInfo** — Player-to-player trading
26- **MailInfo** — Mailbox system
27
28---
29
30## C_CurrencyInfo — Currency System
31
32### Currency Data
33
34| Function | Returns | Description |
35|----------|---------|-------------|
36| `C_CurrencyInfo.GetCurrencyInfo(currencyType)` | `currencyInfo` | Currency info by type |
37| `C_CurrencyInfo.GetCurrencyInfoFromLink(link)` | `currencyInfo` | From hyperlink |
38| `C_CurrencyInfo.GetCurrencyIDFromLink(link)` | `currencyID` | ID from hyperlink |
39| `C_CurrencyInfo.GetCurrencyLink(currencyType, amount)` | `link` | Currency hyperlink |
40| `C_CurrencyInfo.GetCurrencyListSize()` | `size` | Number of entries |
41| `C_CurrencyInfo.GetCurrencyListInfo(index)` | `info` | Entry at index |
42| `C_CurrencyInfo.GetCurrencyListLink(index)` | `link` | Link at index |
43
44### Currency Info Fields
45
46- `name` — Currency name
47- `description` — Description text
48- `currencyID` — Unique ID
49- `iconFileID` — Icon texture
50- `quantity` — Current amount
51- `maxQuantity` — Max cap (0 = none)
52- `canEarnPerWeek` — Has weekly cap?
53- `quantityEarnedThisWeek` — Earned this week
54- `maxWeeklyQuantity` — Weekly max
55- `totalEarned` — Total ever earned
56- `isTradeable` — Can be traded?
57- `quality` — Item quality
58- `isDiscovered` — Has been discovered?
59- `isShowInBackpack` — Shown in Backpack?
60
61### Backpack & Tracking
62
63| Function | Returns | Description |
64|----------|---------|-------------|
65| `C_CurrencyInfo.GetBackpackCurrencyInfo(index)` | `currencyData` | Backpack slot |
66| `C_CurrencyInfo.GetNumBackpackCurrencies()` | `numSlots` | Num backpack slots |
67| `C_CurrencyInfo.SetCurrencyBackpack(index, backpack)` | — | Toggle backpack |
68| `C_CurrencyInfo.IsCurrencyTracked(currencyID)` | `isTracked` | Is tracked? |
69| `C_CurrencyInfo.SetCurrencyTracked(currencyID, tracked)` | — | Set tracked |
70
71### Currency List Management
72
73| Function | Returns | Description |
74|----------|---------|-------------|
75| `C_CurrencyInfo.ExpandCurrencyList(index, expand)` | — | Expand/collapse header |
76| `C_CurrencyInfo.IsCurrencyHeader(index)` | `isHeader` | Is header? |
77| `C_CurrencyInfo.GetFactionGrantedByCurrency(currencyID)` | `factionID` | Associated faction |
78| `C_CurrencyInfo.DoesCurrentFilterPassFilter(currencyID)` | `passes` | Passes filter? |
79
80### Gold Functions (Global)
81
82| Function | Returns | Description |
83|----------|---------|-------------|
84| `GetMoney()` | `copper` | Player's money in copper |
85| `GetCoinTextureString(copper)` | `text` | Gold/silver/copper string |
86| `GetMoneyString(copper, ...)` | `text` | Formatted money string |
87
88---
89
90## Auction House
91
92### Browse & Search
93
94| Function | Returns | Description |
95|----------|---------|-------------|
96| `C_AuctionHouse.SearchForItemKeys(itemKeys, sorts)` | — | Search by item keys |
97| `C_AuctionHouse.SendBrowseQuery(query)` | — | Browse query |
98| `C_AuctionHouse.SendSearchQuery(itemKey, sorts, separateOwnerItems)` | — | Item search |
99| `C_AuctionHouse.GetBrowseResults()` | `browseResults` | Browse results |
100| `C_AuctionHouse.GetNumItemSearchResults(itemKey)` | `numResults` | Num search results |
101| `C_AuctionHouse.GetItemSearchResultInfo(itemKey, index)` | `resultInfo` | Search result info |
102| `C_AuctionHouse.RefreshItemSearchResults(itemKey)` | — | Refresh search |
103| `C_AuctionHouse.GetFilterGroups()` | `filterGroups` | Available filters |
104
105### Commodities
106
107| Function | Returns | Description |
108|----------|---------|-------------|
109| `C_AuctionHouse.SendSellSearchQuery(itemKey, sorts, separateOwnerItems)` | — | Commodity search |
110| `C_AuctionHouse.GetCommoditySearchResultInfo(itemID, index)` | `resultInfo` | Commodity result |
111| `C_AuctionHouse.GetNumCommoditySearchResults(itemID)` | `numResults` | Num commodity results |
112| `C_AuctionHouse.StartCommoditiesPurchase(itemID, quantity)` | — | Start commodity buy |
113| `C_AuctionHouse.ConfirmCommoditiesPurchase()` | — | Confirm commodity buy |
114| `C_AuctionHouse.CancelCommoditiesPurchase()` | — | Cancel commodity buy |
115| `C_AuctionHouse.GetCommodityQuote(itemID)` | `quote` | Price quote |
116
117### Listing & Selling
118
119| Function | Returns | Description |
120|----------|---------|-------------|
121| `C_AuctionHouse.PostItem(itemLocation, duration, quantity, bid, buyout)` | — | List item |
122| `C_AuctionHouse.PostCommodity(itemLocation, duration, quantity, unitPrice)` | — | List commodity |
123| `C_AuctionHouse.GetItemKeyInfo(itemKey)` | `keyInfo` | Item key info |
124| `C_AuctionHouse.MakeItemKey(itemID, itemLevel, itemSuffix, battlePetSpeciesID)` | `itemKey` | Create item key |
125| `C_AuctionHouse.GetAvailablePostCount(itemLocation)` | `count` | How many to list |
126| `C_AuctionHouse.CalculateItemDeposit(itemLocation, duration, quantity)` | `deposit` | Deposit cost |
127| `C_AuctionHouse.GetQuoteDurationRemaining()` | `seconds` | Quote time remaining |
128
129### Bidding & Buying
130
131| Function | Returns | Description |
132|----------|---------|-------------|
133| `C_AuctionHouse.PlaceBid(auctionID, bidAmount)` | — | Place bid |
134| `C_AuctionHouse.GetBidInfo(index)` | `bidInfo` | Bid info |
135| `C_AuctionHouse.GetNumBids()` | `numBids` | Active bids |
136| `C_AuctionHouse.HasFavorite(itemKey)` | `isFavorite` | Is favorited? |
137| `C_AuctionHouse.SetFavoriteItem(itemKey, isFavorite)` | — | Set favorite |
138| `C_AuctionHouse.GetFavoriteItems()` | `itemKeys` | All favorites |
139
140### Own Auctions
141
142| Function | Returns | Description |
143|----------|---------|-------------|
144| `C_AuctionHouse.GetNumOwnedAuctions()` | `numAuctions` | Own auctions |
145| `C_AuctionHouse.GetOwnedAuctionInfo(index)` | `auctionInfo` | Own auction info |
146| `C_AuctionHouse.CancelAuction(auctionID)` | — | Cancel auction |
147| `C_AuctionHouse.QueryOwnedAuctions(sorts)` | — | Query own auctions |
148
149### Auction House State
150
151| Function | Returns | Description |
152|----------|---------|-------------|
153| `C_AuctionHouse.IsAuctionHouseAvailable()` | `isAvailable` | AH available? |
154| `C_AuctionHouse.CloseAuctionHouse()` | — | Close AH |
155| `C_AuctionHouse.GetAuctionHouseTimeLeftBand(timeLeftEnum)` | `seconds` | Time left |
156| `C_AuctionHouse.ReplicateItems()` | — | Full AH scan |
157| `C_AuctionHouse.GetNumReplicateItems()` | `count` | Replicate count |
158| `C_AuctionHouse.GetReplicateItemInfo(index)` | `info` | Replicate item |
159
160---
161
162## C_WowTokenPublic — WoW Token
163
164| Function | Returns | Description |
165|----------|---------|-------------|
166| `C_WowTokenPublic.GetCurrentMarketPrice()` | `price` | Gold price |
167| `C_WowTokenPublic.GetGuaranteedPrice()` | `price` | Guaranteed price |
168| `C_WowTokenPublic.UpdateMarketPrice()` | — | Request update |
169| `C_WowTokenPublic.GetCommerceSystemStatus()` | `status` | System status |
170| `C_WowTokenPublic.BuyToken()` | — | Buy token (gold) |
171| `C_WowTokenPublic.SellToken(auctionID)` | — | Sell token |
172
173---
174
175## AccountStore / StorePublic — In-Game Shop
176
177| Function | Returns | Description |
178|----------|---------|-------------|
179| `C_StorePublic.IsEnabled()` | `enabled` | Shop enabled? |
180| `C_StorePublic.IsDisabledByParentalControls()` | `disabled` | Parental block? |
181| `C_StorePublic.DoesGroupHavePurchaseableProducts(group)` | `hasPurchaseable` | Has products? |
182
183---
184
185## C_PerksProgram — Trading Post
186
187| Function | Returns | Description |
188|----------|---------|-------------|
189| `C_PerksProgram.GetAvailableActivities()` | `activities` | Current activities |
190| `C_PerksProgram.GetPendingChestRewards()` | `rewards` | Pending rewards |
191| `C_PerksProgram.GetTimeRemaining()` | `seconds` | Rotation time left |
192| `C_PerksProgram.GetCurrencyAmount()` | `amount` | Trader's Tender |
193| `C_PerksProgram.GetVendorItemInfo(perksVendorItemID)` | `itemInfo` | Vendor item |
194| `C_PerksProgram.GetAvailableVendorItemIDs()` | `itemIDs` | Current rotation |
195| `C_PerksProgram.GetFrozenPerksVendorItemInfo()` | `info` | Frozen item |
196| `C_PerksProgram.RequestPurchase(perksVendorItemID)` | — | Purchase item |
197| `C_PerksProgram.RequestRefund(perksVendorItemID)` | — | Refund item |
198| `C_PerksProgram.GetDraggedPerksVendorItemInfo()` | `itemInfo` | Dragged item |
199| `C_PerksProgram.IsFrozenItem(perksVendorItemID)` | `isFrozen` | Is frozen? |
200| `C_PerksProgram.SetFrozenPerksVendorItem(perksVendorItemID)` | — | Freeze item |
201| `C_PerksProgram.ClearFrozenPerksVendorItem()` | — | Unfreeze |
202| `C_PerksProgram.GetPerksVendorCategoryIDs()` | `categoryIDs` | Category IDs |
203| `C_PerksProgram.GetPerksVendorCategoryInfo(categoryID)` | `categoryInfo` | Category info |
204
205---
206
207## Black Market
208
209| Function | Returns | Description |
210|----------|---------|-------------|
211| `C_BlackMarket.GetNumItems()` | `numItems` | Current BMAH items |
212| `C_BlackMarket.GetItemInfoByIndex(index)` | `info` | BMAH item info |
213| `C_BlackMarket.GetHotItem()` | `info` | Hot item of the day |
214| `C_BlackMarket.ItemPlaceBid(index, amount)` | — | Place BMAH bid |
215| `C_BlackMarket.RequestItems()` | — | Request item list |
216| `C_BlackMarket.IsViewOnly()` | `isViewOnly` | View-only mode? |
217
218---
219
220## Trade (Player-to-Player)
221
222| Function | Returns | Description |
223|----------|---------|-------------|
224| `InitiateTrade(unit)` | — | Start trade |
225| `AcceptTrade()` | — | Accept trade |
226| `CancelTrade()` | — | Cancel trade |
227| `AddTradeMoney()` | — | Add gold offer |
228| `SetTradeMoney(copper)` | — | Set gold amount |
229| `GetTargetTradeMoney()` | `copper` | Their gold offer |
230| `GetPlayerTradeMoney()` | `copper` | Your gold offer |
231| `GetTradeTargetItemInfo(slotIndex)` | `name, texture, quantity, quality, isUsable, enchant` | Their item |
232| `GetTradePlayerItemInfo(slotIndex)` | `name, texture, quantity, quality, isUsable, enchant` | Your item |
233| `ClickTradeButton(slotIndex)` | — | Click trade slot |
234| `GetNumTradeItems()` | `numPlayerItems, numTargetItems` | Item counts |
235
236---
237
238## Mail System
239
240| Function | Returns | Description |
241|----------|---------|-------------|
242| `GetInboxNumItems()` | `numItems, totalItems` | Inbox count |
243| `GetInboxHeaderInfo(index)` | `packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, hasItem, wasRead, wasReturned, textCreated, canReply, isGM` | Mail header |
244| `GetInboxText(index)` | `bodyText, stationeryBG, stationeryBGR, stationeryBGG, stationeryBGB, color` | Mail body |
245| `GetInboxItem(index, itemIndex)` | `name, itemID, texture, count, quality, canUse` | Attachment |
246| `GetInboxItemLink(index, itemIndex)` | `link` | Attachment link |
247| `TakeInboxItem(index, itemIndex)` | — | Take attachment |
248| `TakeInboxMoney(index)` | — | Take gold |
249| `TakeInboxTextItem(index)` | — | Take text item |
250| `DeleteInboxItem(index)` | — | Delete mail |
251| `ReturnInboxItem(index)` | — | Return mail |
252| `AutoLootMailItem(index)` | — | Auto-loot all |
253| `InboxItemCanDelete(index)` | `canDelete` | Can delete? |
254| `SendMail(recipient, subject, body)` | — | Send mail |
255| `SetSendMailMoney(copper)` | — | Set gold to send |
256| `SetSendMailCOD(copper)` | — | Set COD amount |
257| `GetSendMailPrice()` | `cost` | Sending cost |
258| `GetSendMailItem(index)` | `name, texture, count, quality` | Attached item |
259| `GetSendMailItemLink(index)` | `link` | Attached link |
260| `ClickSendMailItemButton(itemIndex, clearItem)` | — | Add/remove attachment |
261| `SendMailCanSend()` | `canSend` | Can send? |
262
263---
264
265## Common Patterns
266
267### Display Currency with Cap
268
269```lua
270local function ShowCurrency(currencyID)
271 local info = C_CurrencyInfo.GetCurrencyInfo(currencyID)
272 if info then
273 local text = info.name .. ": " .. info.quantity
274 if info.maxQuantity > 0 then
275 text = text .. " / " .. info.maxQuantity
276 end
277 if info.canEarnPerWeek and info.maxWeeklyQuantity > 0 then
278 text = text .. " (Weekly: " .. info.quantityEarnedThisWeek .. "/" .. info.maxWeeklyQuantity .. ")"
279 end
280 print(text)
281 end
282end
283```
284
285### Auction House Search
286
287```lua
288-- Register for results
289local f = CreateFrame("Frame")
290f:RegisterEvent("ITEM_SEARCH_RESULTS_UPDATED")
291f:SetScript("OnEvent", function(self, event, itemKey, ...)
292 local numResults = C_AuctionHouse.GetNumItemSearchResults(itemKey)
293 for i = 1, numResults do
294 local result = C_AuctionHouse.GetItemSearchResultInfo(itemKey, i)
295 if result then
296 print(result.buyoutAmount, "copper -", result.quantity, "available")
297 end
298 end
299end)
300
301-- Initiate search
302local itemKey = C_AuctionHouse.MakeItemKey(12345) -- itemID
303C_AuctionHouse.SendSearchQuery(itemKey, {}, false)
304```
305
306### Check WoW Token Price
307
308```lua
309C_WowTokenPublic.UpdateMarketPrice()
310
311local f = CreateFrame("Frame")
312f:RegisterEvent("TOKEN_MARKET_PRICE_UPDATED")
313f:SetScript("OnEvent", function()
314 local price = C_WowTokenPublic.GetCurrentMarketPrice()
315 if price then
316 print("WoW Token: " .. GetCoinTextureString(price))
317 end
318end)
319```
320
321---
322
323## Key Events
324
325| Event | Payload | Description |
326|-------|---------|-------------|
327| `CURRENCY_DISPLAY_UPDATE` | currencyType, quantity, quantityChange, quantityGainSource, quantityLostSource | Currency changed |
328| `AUCTION_HOUSE_SHOW` | — | AH opened |
329| `AUCTION_HOUSE_CLOSED` | — | AH closed |
330| `AUCTION_HOUSE_BROWSE_RESULTS_UPDATED` | — | Browse results ready |
331| `ITEM_SEARCH_RESULTS_UPDATED` | itemKey | Item search ready |
332| `COMMODITY_SEARCH_RESULTS_UPDATED` | itemID | Commodity search ready |
333| `AUCTION_HOUSE_NEW_RESULTS_RECEIVED` | itemKey | New results |
334| `ITEM_SEARCH_RESULTS_ADDED` | itemKey | Result added |
335| `AUCTION_HOUSE_AUCTION_CREATED` | auctionID | Auction posted |
336| `AUCTION_CANCELED` | auctionID | Auction canceled |
337| `TOKEN_MARKET_PRICE_UPDATED` | result | Token price updated |
338| `TOKEN_STATUS_CHANGED` | — | Token status changed |
339| `PERKS_PROGRAM_CURRENCY_REFRESH` | — | Trader's Tender updated |
340| `PERKS_PROGRAM_PURCHASE_SUCCESS` | — | Trading Post purchase |
341| `PERKS_PROGRAM_SET_FROZEN_ITEM` | — | Item frozen |
342| `MAIL_INBOX_UPDATE` | — | Inbox updated |
343| `MAIL_SEND_SUCCESS` | — | Mail sent |
344| `MAIL_SHOW` | — | Mailbox opened |
345| `MAIL_CLOSED` | — | Mailbox closed |
346| `TRADE_SHOW` | — | Trade window opened |
347| `TRADE_CLOSED` | — | Trade ended |
348| `TRADE_ACCEPT_UPDATE` | playerAccept, targetAccept | Accept state |
349| `TRADE_MONEY_CHANGED` | — | Gold offer changed |
350| `TRADE_PLAYER_ITEM_CHANGED` | slotIndex | Player item changed |
351| `TRADE_TARGET_ITEM_CHANGED` | slotIndex | Target item changed |
352| `BLACK_MARKET_ITEM_UPDATE` | — | BMAH items updated |
353| `BLACK_MARKET_OUTBID` | — | Outbid on BMAH |
354
355---
356
357## Gotchas & Restrictions
358
3591. **Auction House hardware event** — Posting, buying, and bidding require hardware events (user clicks).
3602. **Commodity vs. item** — Commodities (stackable) use a different API path than equipment/unique items.
3613. **AH throttling** — Searches are rate-limited. Rapid queries get throttled by the server.
3624. **Mail COD** — COD mail auto-deducts gold when attachment is taken. Test with `InboxItemCanDelete()`.
3635. **GetMoney() returns copper** — Divide by 100 for silver, 10000 for gold.
3646. **Currency caps** — Always check `maxQuantity` and `maxWeeklyQuantity` before displaying progress.
3657. **WoW Token price is async** — Call `UpdateMarketPrice()` then wait for `TOKEN_MARKET_PRICE_UPDATED`.
3668. **ReplicateItems() is slow** — Full AH scan is expensive. Use sparingly and handle results incrementally.