Quest API (Retail — Patch 12.0.0)
Comprehensive reference for all quest-related APIs in WoW Retail.
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_QuestLog — Quest log management, tracking, completion, objectives
-
C_QuestInfoSystem — Quest type/tag info, quest classification
-
C_QuestOffer — Quest accept/decline/complete flows
-
C_QuestSession — Party sync quest sessions
-
C_QuestTaskInfo — Bonus objectives, world quests
-
C_ContentTracking — Content tracking system
-
C_CampaignInfo — Campaign (story chapter) tracking
-
C_QuestHubUI — Quest hub display
-
C_QuestLineUI — Quest line (chain) info
-
C_QuestItemUse — Quest item use tracking
-
Quest POI — POI data for quest objectives
-
Quest Gossip — NPC gossip quest interaction
C_QuestLog — Quest Log
Quest State & Info
Function Returns Description
C_QuestLog.GetNumQuestLogEntries()
numEntries, numQuests
Number of quest log entries
C_QuestLog.GetInfo(questLogIndex)
info
Quest info at log index
C_QuestLog.GetQuestIDForLogIndex(questLogIndex)
questID
Quest ID at index
C_QuestLog.GetLogIndexForQuestID(questID)
questLogIndex
Log index for quest
C_QuestLog.GetTitleForQuestID(questID)
title
Quest title
C_QuestLog.GetQuestTagInfo(questID)
tagInfo
Quality, frequency, tag
C_QuestLog.GetQuestType(questID)
questType
Quest type enum
C_QuestLog.GetQuestDifficultyLevel(questID)
level
Suggested level
C_QuestLog.GetRequiredMoney(questID)
money
Money required
C_QuestLog.GetSuggestedGroupSize(questID)
groupSize
Suggested group size
C_QuestLog.GetTimeAllowed(questID)
totalTime, elapsedTime
Timed quest info
C_QuestLog.GetZoneStoryInfo(uiMapID)
storyInfo
Zone story progress
C_QuestLog.GetMapForQuestPOIs()
uiMapID
Map with quest POIs
C_QuestLog.GetQuestAdditionalHighlights(questID)
highlights
Additional highlight info
Quest Completion & Tracking
Function Returns Description
C_QuestLog.IsComplete(questID)
isComplete
Is quest complete?
C_QuestLog.IsFailed(questID)
isFailed
Has quest failed?
C_QuestLog.IsOnQuest(questID)
isOnQuest
Is quest in log?
C_QuestLog.IsQuestCalling(questID)
isCalling
Is it a calling?
C_QuestLog.IsQuestDisabledForSession(questID)
isDisabled
Disabled for session?
C_QuestLog.IsQuestFlaggedCompleted(questID)
isCompleted
Flagged completed (ever)?
C_QuestLog.IsQuestReplayable(questID)
isReplayable
Can be replayed?
C_QuestLog.IsQuestReplayedRecently(questID)
isRecent
Replayed recently?
C_QuestLog.IsQuestTrivial(questID)
isTrivial
Below player level?
C_QuestLog.IsRepeatableQuest(questID)
isRepeatable
Is repeatable?
C_QuestLog.IsWorldQuest(questID)
isWorldQuest
Is a world quest?
C_QuestLog.IsQuestBounty(questID)
isBounty
Is an emissary/bounty?
C_QuestLog.IsImportantQuest(questID)
isImportant
Is important (landmark)?
C_QuestLog.IsLegendaryQuest(questID)
isLegendary
Is legendary?
C_QuestLog.ReadyForTurnIn(questID)
ready
Ready to turn in?
Quest Tracking
Function Returns Description
C_QuestLog.GetNumQuestWatches()
numWatches
Number of tracked quests
C_QuestLog.GetQuestWatchType(questID)
watchType
How quest is tracked
C_QuestLog.AddQuestWatch(questID [, watchType])
wasWatched
Track a quest
C_QuestLog.RemoveQuestWatch(questID)
wasRemoved
Untrack a quest
C_QuestLog.IsQuestWatched(questID)
isWatched
Is quest tracked?
C_QuestLog.GetQuestIDForQuestWatchIndex(watchIndex)
questID
Quest at watch index
Quest Objectives
Function Returns Description
C_QuestLog.GetNumQuestObjectives(questID)
numObjectives
Number of objectives
C_QuestLog.GetQuestObjectives(questID)
objectives
All objectives data
C_QuestLog.GetQuestProgressBarPercent(questID)
percent
Progress bar %
Quest Actions
Function Returns Description
C_QuestLog.AbandonQuest()
— Abandon selected quest
C_QuestLog.SetSelectedQuest(questID)
— Select quest in log
C_QuestLog.GetSelectedQuest()
questID
Currently selected quest
C_QuestLog.SetAbandonQuest(questID)
— Prepare to abandon
C_QuestLog.RequestLoadQuestByID(questID)
— Request quest data load
C_QuestLog.ShouldShowQuestRewards(questID)
shouldShow
Show rewards?
C_QuestLog.GetNextWaypoint(questID)
mapID, x, y
Next waypoint
C_QuestLog.GetNextWaypointForMap(questID, uiMapID)
x, y
Waypoint on map
C_QuestLog.GetNextWaypointText(questID)
waypointText
Waypoint text
Quest Rewards (from quest log)
Function Returns Description
GetNumQuestLogRewards(questID)
numRewards
Number of item rewards
GetQuestLogRewardInfo(rewardIndex, questID)
name, texture, count, quality, isUsable, itemID, itemLevel
Reward item info
GetQuestLogRewardMoney(questID)
money
Money reward
GetQuestLogRewardXP(questID)
xp
XP reward
GetQuestLogRewardCurrencies(questID)
currencies
Currency rewards
GetQuestLogRewardSpell(rewardIndex, questID)
texture, name, isTradeskillSpell, isSpellLearned, hideSpellLearnText, isBoostSpell, garrFollowerID, genericUnlock, spellID
Spell reward
GetNumQuestLogRewardSpells(questID)
numSpells
Number of spell rewards
C_QuestInfoSystem
Function Returns Description
C_QuestInfoSystem.GetQuestRewardCurrencies(questID)
currencies
Quest reward currencies
C_QuestInfoSystem.GetQuestRewardSpells(questID)
spellRewards
Quest reward spells
C_QuestInfoSystem.GetQuestShouldToastCompletion(questID)
shouldToast
Show completion toast?
C_QuestInfoSystem.HasQuestRewardCurrencies(questID)
hasCurrencies
Has currency rewards?
C_QuestInfoSystem.HasQuestRewardSpells(questID)
hasSpells
Has spell rewards?
C_QuestOffer — Quest Accept/Decline
Function Returns Description
AcceptQuest()
— Accept the offered quest
DeclineQuest()
— Decline the offered quest
CompleteQuest()
— Complete quest at NPC
GetQuestReward(rewardIndex)
— Choose reward item
GetGreetingText()
text
NPC greeting text
GetObjectiveText()
text
Quest objective text
GetQuestText()
text
Quest description text
GetRewardText()
text
Reward text
GetProgressText()
text
Turn-in progress text
GetTitleText()
title
Quest title
GetNumQuestChoices()
numChoices
Reward choices count
GetNumQuestRewards()
numRewards
Fixed rewards count
GetQuestItemInfo(itemType, index)
name, texture, count, quality, isUsable, itemID
Quest item info
GetQuestItemLink(itemType, index)
link
Item link
GetNumQuestItems()
numItems
Required items count
IsQuestCompletable()
isCompletable
Can turn in?
QuestGetAutoAccept()
isAutoAccept
Auto-accepted quest?
C_QuestSession — Party Sync
Function Returns Description
C_QuestSession.Exists()
exists
In a quest session?
C_QuestSession.GetAvailableSessionCommand()
command
Available session command
C_QuestSession.GetSessionBeginDetails()
details
Session begin details
C_QuestSession.GetSuperTrackedQuest()
questID
Super tracked quest
C_QuestSession.HasJoined()
hasJoined
Has joined session?
C_QuestSession.RequestSessionStart()
— Start quest session
C_QuestSession.RequestSessionStop()
— Stop quest session
C_QuestSession.SendSessionBeginResponse(accept)
— Respond to session invite
C_QuestTaskInfo — Bonus Objectives / World Quests
Function Returns Description
C_TaskQuest.GetQuestsForPlayerByMapID(uiMapID)
quests
World quests on map
C_TaskQuest.GetQuestInfoByQuestID(questID)
title, factionID, capped, displayAsObjective
Task quest info
C_TaskQuest.GetQuestProgressBarInfo(questID)
progress
Progress bar data
C_TaskQuest.GetQuestTimeLeftMinutes(questID)
minutesLeft
Time remaining
C_TaskQuest.GetQuestTimeLeftSeconds(questID)
secondsLeft
Time remaining (seconds)
C_TaskQuest.GetQuestZoneID(questID)
zoneID
Zone for task quest
C_TaskQuest.IsActive(questID)
isActive
Is task quest active?
C_TaskQuest.DoesMapShowTaskQuestObjectives(uiMapID)
showsObjectives
Does map show objectives?
C_CampaignInfo — Campaigns
Function Returns Description
C_CampaignInfo.GetAvailableCampaigns()
campaignIDs
Available campaigns
C_CampaignInfo.GetCampaignID(questID)
campaignID
Campaign for quest
C_CampaignInfo.GetCampaignInfo(campaignID)
info
Campaign info
C_CampaignInfo.GetChapterIDs(campaignID)
chapterIDs
Campaign chapters
C_CampaignInfo.GetChapterInfo(chapterID)
info
Chapter info
C_CampaignInfo.GetCurrentChapterID(campaignID)
chapterID
Current chapter
C_CampaignInfo.GetState(campaignID)
state
Campaign state
C_CampaignInfo.IsCampaignQuest(questID)
isCampaign
Is quest a campaign quest?
C_CampaignInfo.UsesNormalQuestIcons(campaignID)
usesNormal
Uses normal icons?
C_QuestLineUI — Quest Lines
Function Returns Description
C_QuestLineUI.GetAvailableQuestLineQuests(textFilter, uiMapID)
quests
Available quest line quests
C_QuestLineUI.GetQuestLineInfo(questID, uiMapID)
questLineInfo
Quest line info
C_QuestLineUI.GetQuestLineQuests(questLineID)
questIDs
All quests in line
C_QuestLineUI.IsComplete(questLineID)
isComplete
Is quest line done?
C_QuestLineUI.RequestQuestLinesForMap(uiMapID)
— Request quest line data
C_ContentTracking
Function Returns Description
C_ContentTracking.GetCurrentTrackingTarget(trackableType)
targetType, targetID
Current tracked target
C_ContentTracking.GetObjectiveText(trackableType, trackableID)
text
Objective text
C_ContentTracking.GetTitle(trackableType, trackableID)
title
Tracking title
C_ContentTracking.GetTrackedIDs(trackableType)
trackableIDs
All tracked IDs
C_ContentTracking.IsTracking(trackableType, trackableID)
isTracking
Is it tracked?
C_ContentTracking.SetTracked(trackableType, trackableID, tracked)
— Set tracking
C_ContentTracking.StopTracking(trackableType, trackableID)
— Stop tracking
Quest POI Functions
Function Returns Description
C_QuestLog.GetQuestPOIs()
— Request quest POI data
QuestPOIGetIconInfo(questID)
completed, posX, posY, objective
POI icon position
QuestPOI_FindButton(parent, questID)
button
Find POI button
Common Patterns
Iterate Quest Log
local numEntries, numQuests = C_QuestLog.GetNumQuestLogEntries() for i = 1, numEntries do local info = C_QuestLog.GetInfo(i) if info and not info.isHeader then local questID = info.questID local title = info.title local isComplete = C_QuestLog.IsComplete(questID) print(title, isComplete and "(Complete)" or "") end end
Track/Untrack Quest
local function ToggleQuestWatch(questID) if C_QuestLog.IsQuestWatched(questID) then C_QuestLog.RemoveQuestWatch(questID) else C_QuestLog.AddQuestWatch(questID, Enum.QuestWatchType.Automatic) end end
World Quests on Map
local function GetWorldQuestsOnMap(uiMapID) local quests = C_TaskQuest.GetQuestsForPlayerByMapID(uiMapID) if quests then for _, quest in ipairs(quests) do local title = C_TaskQuest.GetQuestInfoByQuestID(quest.questId) local timeLeft = C_TaskQuest.GetQuestTimeLeftMinutes(quest.questId) print(title, timeLeft and (timeLeft .. " min left") or "") end end end
Quest Completion Event Handling
local frame = CreateFrame("Frame") frame:RegisterEvent("QUEST_TURNED_IN") frame:RegisterEvent("QUEST_ACCEPTED") frame:RegisterEvent("QUEST_REMOVED") frame:SetScript("OnEvent", function(self, event, ...) if event == "QUEST_TURNED_IN" then local questID, xpReward, moneyReward = ... print("Completed quest:", C_QuestLog.GetTitleForQuestID(questID)) elseif event == "QUEST_ACCEPTED" then local questID = ... print("Accepted quest:", C_QuestLog.GetTitleForQuestID(questID)) elseif event == "QUEST_REMOVED" then local questID, wasReplayQuest = ... print("Quest removed:", questID) end end)
Key Events
Event Payload Description
QUEST_ACCEPTED
questID Quest accepted
QUEST_TURNED_IN
questID, xpReward, moneyReward Quest turned in
QUEST_REMOVED
questID, wasReplayQuest Quest removed from log
QUEST_LOG_UPDATE
— Quest log changed
QUEST_WATCH_LIST_CHANGED
questID, added Tracking changed
QUEST_AUTOCOMPLETE
questID Quest auto-completed
QUEST_COMPLETE
— At NPC to complete quest
QUEST_DETAIL
questStartItemID Quest detail shown
QUEST_FINISHED
— Quest dialog closed
QUEST_GREETING
— NPC greeting with quests
QUEST_PROGRESS
— Quest turn-in progress
QUEST_SESSION_CREATED
— Quest session created
QUEST_SESSION_DESTROYED
— Quest session ended
QUEST_SESSION_JOINED
— Joined quest session
QUEST_SESSION_LEFT
— Left quest session
QUEST_SESSION_MEMBER_CONFIRM
— Member confirmed session
QUEST_POI_UPDATE
— Quest POI data changed
TASK_PROGRESS_UPDATE
— Bonus objective/WQ progress
WORLD_QUEST_COMPLETED_BY_SPELL
questID WQ completed by spell
QUEST_DATA_LOAD_RESULT
questID, success RequestLoadQuestByID result
Gotchas & Restrictions
-
Quest data may not be loaded — Call C_QuestLog.RequestLoadQuestByID(questID) and wait for QUEST_DATA_LOAD_RESULT before accessing quest info for quests not in the log.
-
GetInfo returns headers — Quest log entries include headers (zones). Check info.isHeader to filter.
-
Quest watch limit — There's a maximum number of tracked quests. AddQuestWatch() returns false if at limit.
-
Auto-accept quests — Some quests auto-accept. Check QuestGetAutoAccept() to handle gracefully.
-
World quest vs regular — World quests use C_TaskQuest functions, not C_QuestLog for map display.
-
Quest gossip flow — Quest accept flow: QUEST_GREETING → QUEST_DETAIL → AcceptQuest() → QUEST_ACCEPTED .
-
Campaign quests — Use C_CampaignInfo.IsCampaignQuest() to identify story quests.
-
Objective data — GetQuestObjectives() returns a table with text , type , finished , numFulfilled , numRequired per objective.