Professions API (Retail — Patch 12.0.0)
Comprehensive reference for professions, crafting, and crafting order APIs.
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.
Scope
-
C_TradeSkillUI — Recipe browsing, crafting, reagents, skill info
-
C_CraftingOrders — Crafting order system (customer & crafter)
-
C_ProfessionSpecUI — Profession specialization trees
-
Global TradeSKill — Legacy/global tradeskill functions
C_TradeSkillUI — Tradeskill System
Opening & State
Function Returns Description
C_TradeSkillUI.OpenTradeSkill(tradeSkillID)
success
Open tradeskill UI
C_TradeSkillUI.CloseTradeSkill()
— Close tradeskill UI
C_TradeSkillUI.IsTradeSkillReady()
isReady
Is tradeskill data ready?
C_TradeSkillUI.IsTradeSkillGuild()
isGuild
Viewing guild crafters?
C_TradeSkillUI.IsTradeSkillLinked()
isLinked
Viewing linked tradeskill?
C_TradeSkillUI.IsNPCCrafting()
isNPC
Crafting at NPC?
C_TradeSkillUI.IsRecraftReady()
isReady
Recraft system ready?
C_TradeSkillUI.GetTradeSkillDisplayName(tradeSkillID)
name
Profession name
Profession Info
Function Returns Description
C_TradeSkillUI.GetProfessionInfoBySkillLineID(skillLineID)
professionInfo
Profession info
C_TradeSkillUI.GetChildProfessionInfos()
infos
Child profession tiers
C_TradeSkillUI.GetProfessionInfoByRecipeID(recipeID)
professionInfo
Profession for recipe
C_TradeSkillUI.GetBaseProfessionInfo()
professionInfo
Base profession info
C_TradeSkillUI.GetProfessionSlots(profession)
slots
Profession slots
C_TradeSkillUI.GetProfessionChararacterSlotInfo(slot)
info
Character slot info
Recipe List & Info
Function Returns Description
C_TradeSkillUI.GetAllRecipeIDs()
recipeIDs
All available recipes
C_TradeSkillUI.GetFilteredRecipeIDs()
recipeIDs
Filtered recipe list
C_TradeSkillUI.GetRecipeInfo(recipeID)
recipeInfo
Recipe details
C_TradeSkillUI.GetRecipeSchematic(recipeID, isRecraft [, recraftItemGUID])
schematic
Recipe schematic
C_TradeSkillUI.GetRecipeDescription(recipeID)
description
Recipe description text
C_TradeSkillUI.GetRecipeNumItemsProduced(recipeID)
min, max
Items produced
C_TradeSkillUI.GetRecipeOutputItemData(recipeID [, reagents [, allocationItemGUID]])
outputInfo
Output item data
C_TradeSkillUI.GetRecipeQualityItemIDs(recipeID)
itemIDs
Quality-tier item IDs
C_TradeSkillUI.GetRecipeQualityReagentItemLink(recipeSpellID, reagentIndex, qualityIndex)
itemLink
Quality reagent link
C_TradeSkillUI.GetRecipeRepeatCount()
repeatCount
Queue repeat count
C_TradeSkillUI.SetRecipeRepeatCount(count)
— Set repeat count
Reagents
Function Returns Description
C_TradeSkillUI.GetRecipeReagentSlotInfo(recipeID, reagentIndex)
slotInfo
Reagent slot info
C_TradeSkillUI.GetRecipeRequirements(recipeID)
requirements
Recipe requirements
C_TradeSkillUI.GetOptionalReagentInfo(recipeID)
optionalReagents
Optional reagent slots
C_TradeSkillUI.GetRecipeFixedReagentItemLink(recipeID, dataSlotIndex)
itemLink
Fixed reagent link
Crafting
Function Returns Description
C_TradeSkillUI.CraftRecipe(recipeID [, count [, craftingReagents [, recipeLevel [, orderID]]]])
— Craft items
C_TradeSkillUI.RecraftRecipe(itemGUID, craftingReagents)
— Recraft an item
C_TradeSkillUI.CraftSalvage(recipeID, count, itemTarget)
— Salvage crafting
C_TradeSkillUI.CraftEnchant(recipeID [, count [, craftingReagents]])
— Craft enchant
C_TradeSkillUI.IsRecipeInBaseSkillLine(recipeID)
inBase
Is recipe in base skill?
Categories & Filters
Function Returns Description
C_TradeSkillUI.GetCategories()
categoryIDs
All categories
C_TradeSkillUI.GetCategoryInfo(categoryID)
categoryInfo
Category details
C_TradeSkillUI.GetSubCategories(categoryID)
subCategoryIDs
Sub-categories
C_TradeSkillUI.SetRecipeItemNameFilter(text)
— Filter by name
C_TradeSkillUI.GetRecipeItemNameFilter()
text
Current name filter
C_TradeSkillUI.SetOnlyShowMakeableRecipes(onlyMakeable)
— Filter to makeable
C_TradeSkillUI.GetOnlyShowMakeableRecipes()
onlyMakeable
Showing only makeable?
C_TradeSkillUI.SetOnlyShowSkillUpRecipes(onlySkillUp)
— Filter to skill-up
C_TradeSkillUI.GetOnlyShowSkillUpRecipes()
onlySkillUp
Only skill-up?
C_CraftingOrders — Crafting Orders
Customer (Placing Orders)
Function Returns Description
C_CraftingOrders.PlaceNewOrder(orderInfo)
— Place a crafting order
C_CraftingOrders.GetMyOrders(orderType)
orders
Your placed orders
C_CraftingOrders.GetOrderClaimInfo(orderType, orderID)
claimInfo
Order claim info
C_CraftingOrders.CancelOrder(orderID)
— Cancel your order
C_CraftingOrders.GetCustomerOptions(skillLineAbilityID, orderType)
options
Customer options
C_CraftingOrders.GetCraftingOrderCost(recipeID, reagents, orderType)
cost
Order commission cost
C_CraftingOrders.GetDefaultOrdersSkillLine()
skillLineID
Default skill line
C_CraftingOrders.GetPersonalOrdersInfo()
info
Personal orders info
C_CraftingOrders.HasFavoriteCustomerOptions(skillLineAbilityID)
hasFavorite
Has favorited crafter?
C_CraftingOrders.ShouldShowCraftingOrderTab()
shouldShow
Show orders tab?
Crafter (Fulfilling Orders)
Function Returns Description
C_CraftingOrders.GetCrafterOrders(request)
— Query available orders
C_CraftingOrders.GetCrafterBucketTable(request)
— Get order grouped view
C_CraftingOrders.GetClaimedOrder()
order
Currently claimed order
C_CraftingOrders.ClaimOrder(orderID, professionID)
— Claim an order
C_CraftingOrders.ReleaseOrder(orderID, professionID)
— Release claimed order
C_CraftingOrders.FulfillOrder(orderID, crafterNote, professionID)
— Complete the order
C_CraftingOrders.RejectOrder(orderID, rejectionNote, professionID)
— Reject the order
C_CraftingOrders.GetNumFavoriteCustomerOptions()
numFavorites
Favorite customers count
C_CraftingOrders.GetCrafterOrderRemainingTime(orderID)
timeRemaining
Time left to fulfill
C_CraftingOrders.OpenCrafterCraftingOrders()
— Open crafter orders UI
C_CraftingOrders.CloseCrafterCraftingOrders()
— Close crafter orders UI
Order Types
Enum Description
Enum.CraftingOrderType.Public
Anyone can fulfill
Enum.CraftingOrderType.Guild
Guild members only
Enum.CraftingOrderType.Personal
Specific crafter
Enum.CraftingOrderType.Npc
NPC order
C_ProfessionSpecUI — Profession Specialization
Function Returns Description
C_ProfessionSpecUI.GetSpecTabInfo()
tabInfo
Spec tab info
C_ProfessionSpecUI.GetSpecTabIDsForSkillLineID(skillLineID)
specTabIDs
Spec tabs for profession
C_ProfessionSpecUI.ShouldShowSpecTab()
shouldShow
Show spec tab?
C_ProfessionSpecUI.GetRootPathForTab(specTabID)
rootPath
Root path for spec tab
C_ProfessionSpecUI.GetStateForPath(specTabID, pathID)
state
Path state (locked, etc.)
C_ProfessionSpecUI.GetStateForPerk(specTabID, perkID)
state
Perk state
C_ProfessionSpecUI.GetDescriptionForPath(pathID)
description
Path description
C_ProfessionSpecUI.GetDescriptionForPerk(perkID)
description
Perk description
C_ProfessionSpecUI.GetPerksForPath(pathID)
perkIDs
Perks in path
C_ProfessionSpecUI.GetChildrenForPath(pathID)
childPathIDs
Child paths
C_ProfessionSpecUI.GetSpendCurrencyForPath(pathID)
currencyID, amount
Currency to spend
C_ProfessionSpecUI.GetUnlockInfoForPath(pathID)
unlockInfo
Unlock requirements
C_ProfessionSpecUI.PurchaseSpecTabPerk(specTabID, perkID)
— Purchase a perk
Global Tradeskill Functions
Function Returns Description
GetProfessions()
prof1, prof2, arch, fish, cook
Character professions (indices)
GetProfessionInfo(profIndex)
name, icon, skillLevel, maxSkillLevel, numAbilities, spellOffset, skillLineID, skillModifier, specIndex, specOffset
Profession details
CastSpell(spellID)
— Open profession via spell
Common Patterns
List Player's Professions
local prof1, prof2, archaeology, fishing, cooking = GetProfessions() local function PrintProf(index) if index then local name, icon, skillLevel, maxSkillLevel = GetProfessionInfo(index) print(name, skillLevel .. "/" .. maxSkillLevel) end end PrintProf(prof1) PrintProf(prof2) PrintProf(cooking)
Search Recipes by Name
C_TradeSkillUI.SetRecipeItemNameFilter("Enchant") local recipeIDs = C_TradeSkillUI.GetFilteredRecipeIDs() for _, recipeID in ipairs(recipeIDs) do local info = C_TradeSkillUI.GetRecipeInfo(recipeID) if info then print(info.name, "Skill:", info.relativeDifficulty) end end
Craft an Item
-- Craft 5 of a recipe local recipeID = 12345 C_TradeSkillUI.CraftRecipe(recipeID, 5)
Key Events
Event Payload Description
TRADE_SKILL_SHOW
— Tradeskill UI opened
TRADE_SKILL_CLOSE
— Tradeskill UI closed
TRADE_SKILL_UPDATE
— Tradeskill data updated
TRADE_SKILL_LIST_UPDATE
— Recipe list changed
TRADE_SKILL_DATA_SOURCE_CHANGED
— Data source changed
TRADE_SKILL_DATA_SOURCE_CHANGING
— Data source changing
TRADE_SKILL_CRAFT_BEGIN
— Started crafting
UPDATE_TRADESKILL_CAST_COMPLETE
— Craft cast completed
UPDATE_TRADESKILL_CAST_STOPPED
— Craft cast stopped
TRADE_SKILL_ITEM_CRAFTED_RESULT
resultData Crafted item result
CRAFTINGORDERS_ORDER_PLACEMENT_RESPONSE
result Order placement result
CRAFTINGORDERS_CLAIMED_ORDER_ADDED
— Order claimed
CRAFTINGORDERS_CLAIMED_ORDER_REMOVED
— Order released
CRAFTINGORDERS_CLAIMED_ORDER_UPDATED
— Claimed order updated
CRAFTINGORDERS_FULFILL_ORDER_RESPONSE
result, orderID Order fulfilled result
CRAFTINGORDERS_REJECT_ORDER_RESPONSE
result, orderID Order rejected result
CRAFTINGORDERS_ORDER_CANCEL_RESPONSE
result, orderID Order cancelled result
CRAFTINGORDERS_CUSTOMER_OPTIONS_PARSED
— Customer options loaded
CRAFTINGORDERS_CRAFTER_ORDER_LIST_UPDATED
— Crafter order list refreshed
CRAFTINGORDERS_CAN_REQUEST
— Can request crafter orders
SKILL_LINES_CHANGED
— Skill lines changed
LEARNED_SPELL_IN_SKILL_LINE
spellID, skillLineID, isTrackedAsTradeskill New recipe learned
Gotchas & Restrictions
-
Tradeskill must be open — Most C_TradeSkillUI functions only work when the tradeskill window is open.
-
CraftRecipe requires hardware event — Crafting requires a user-initiated action (click/key).
-
Recipe schematic vs recipe info — GetRecipeSchematic() provides reagent slots and quality data; GetRecipeInfo() provides name/icon/difficulty.
-
Crafting orders are async — GetCrafterOrders() is async. Wait for CRAFTINGORDERS_CRAFTER_ORDER_LIST_UPDATED .
-
Quality tiers — Dragonflight+ recipes have quality tiers (1-5). Use GetRecipeQualityItemIDs() to get items per tier.
-
Recraft — Recrafting uses RecraftRecipe() with the item's GUID, not CraftRecipe() .
-
Profession specs use C_Traits — Under the hood, profession specializations use the same C_Traits system as class talents with a different config type.
-
GetProfessions returns indices — Pass the index to GetProfessionInfo() , not a profession ID.