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. Use when this capability is needed.4---56# Currency & Economy API (Retail — Patch 12.0.0)78Comprehensive reference for currency, auction house, store, token, trading post, mail, and trade 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_CurrencyInfo** — Currency data, tracking, backpack display19- **Auction House** — Listing, bidding, buying, selling, commodities20- **C_WowTokenPublic / C_WowTokenUI** — WoW Token market21- **AccountStore / StorePublic** — In-game shop22- **CatalogShop** — Catalog shop system23- **C_PerksProgram** — Trading Post (Trader's Tender)24- **BlackMarket** — Black Market Auction House25- **TradeInfo** — Player-to-player trading26- **MailInfo** — Mailbox system2728---2930## C_CurrencyInfo — Currency System3132### Currency Data3334| 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 |4344### Currency Info Fields4546- `name` — Currency name47- `description` — Description text48- `currencyID` — Unique ID49- `iconFileID` — Icon texture50- `quantity` — Current amount51- `maxQuantity` — Max cap (0 = none)52- `canEarnPerWeek` — Has weekly cap?53- `quantityEarnedThisWeek` — Earned this week54- `maxWeeklyQuantity` — Weekly max55- `totalEarned` — Total ever earned56- `isTradeable` — Can be traded?57- `quality` — Item quality58- `isDiscovered` — Has been discovered?59- `isShowInBackpack` — Shown in Backpack?6061### Backpack & Tracking6263| 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 |7071### Currency List Management7273| 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? |7980### Gold Functions (Global)8182| 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 |8788---8990## Auction House9192### Browse & Search9394| 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 |104105### Commodities106107| 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 |116117### Listing & Selling118119| 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 |128129### Bidding & Buying130131| 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 |139140### Own Auctions141142| 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 |148149### Auction House State150151| 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 |159160---161162## C_WowTokenPublic — WoW Token163164| 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 |172173---174175## AccountStore / StorePublic — In-Game Shop176177| 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? |182183---184185## C_PerksProgram — Trading Post186187| 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 |204205---206207## Black Market208209| 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? |217218---219220## Trade (Player-to-Player)221222| 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 |235236---237238## Mail System239240| 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? |262263---264265## Common Patterns266267### Display Currency with Cap268269```lua270local function ShowCurrency(currencyID)271 local info = C_CurrencyInfo.GetCurrencyInfo(currencyID)272 if info then273 local text = info.name .. ": " .. info.quantity274 if info.maxQuantity > 0 then275 text = text .. " / " .. info.maxQuantity276 end277 if info.canEarnPerWeek and info.maxWeeklyQuantity > 0 then278 text = text .. " (Weekly: " .. info.quantityEarnedThisWeek .. "/" .. info.maxWeeklyQuantity .. ")"279 end280 print(text)281 end282end283```284285### Auction House Search286287```lua288-- Register for results289local 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 do294 local result = C_AuctionHouse.GetItemSearchResultInfo(itemKey, i)295 if result then296 print(result.buyoutAmount, "copper -", result.quantity, "available")297 end298 end299end)300301-- Initiate search302local itemKey = C_AuctionHouse.MakeItemKey(12345) -- itemID303C_AuctionHouse.SendSearchQuery(itemKey, {}, false)304```305306### Check WoW Token Price307308```lua309C_WowTokenPublic.UpdateMarketPrice()310311local f = CreateFrame("Frame")312f:RegisterEvent("TOKEN_MARKET_PRICE_UPDATED")313f:SetScript("OnEvent", function()314 local price = C_WowTokenPublic.GetCurrentMarketPrice()315 if price then316 print("WoW Token: " .. GetCoinTextureString(price))317 end318end)319```320321---322323## Key Events324325| 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 |354355---356357## Gotchas & Restrictions3583591. **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.367368---369> Converted and distributed by [TomeVault](https://tomevault.io/claim/jburlison) — claim your Tome and manage your conversions.370<!-- tomevault:4.0:skill_md:2026-04-13 -->