AgentSkillsCN

wow-api-quests

WoW Retail任务、任务日志、任务信息、任务委托、任务会话、任务目标、战役、内容追踪、任务中心,以及任务链API的完整参考。涵盖C_QuestLog(70多项用于任务状态、目标、追踪、完成度的功能)、C_QuestInfoSystem(任务类型/标签信息)、C_QuestOffer(任务接受/拒绝)、C_QuestSession(派对同步任务)、C_QuestTaskInfo(额外目标/世界任务)、C_ContentTracking、C_CampaignInfo、C_QuestHubUI、C_QuestLineUI、C_QuestItemUse、C_WarCampaign(旧版)、任务POI功能,以及任务闲聊模式。当您需要处理任务追踪、任务日志展示、任务目标、任务接受/完成流程、世界任务、战役进展、额外目标,或内容追踪系统时,此功能将为您提供全面支持。

SKILL.md
--- frontmatter
name: wow-api-quests
description: "Complete reference for WoW Retail Quest, Quest Log, Quest Info, Quest Offer, Quest Session, Quest Task, Campaign, Content Tracking, Quest Hub, and Quest Line APIs. Covers C_QuestLog (70+ functions for quest state, objectives, tracking, completion), C_QuestInfoSystem (quest type/tag info), C_QuestOffer (quest accept/decline), C_QuestSession (party sync quests), C_QuestTaskInfo (bonus objectives/world quests), C_ContentTracking, C_CampaignInfo, C_QuestHubUI, C_QuestLineUI, C_QuestItemUse, C_WarCampaign (legacy), quest POI functions, and quest gossip patterns. Use when working with quest tracking, quest log display, quest objectives, quest accept/complete flows, world quests, campaign progress, bonus objectives, or content tracking systems."

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

FunctionReturnsDescription
C_QuestLog.GetNumQuestLogEntries()numEntries, numQuestsNumber of quest log entries
C_QuestLog.GetInfo(questLogIndex)infoQuest info at log index
C_QuestLog.GetQuestIDForLogIndex(questLogIndex)questIDQuest ID at index
C_QuestLog.GetLogIndexForQuestID(questID)questLogIndexLog index for quest
C_QuestLog.GetTitleForQuestID(questID)titleQuest title
C_QuestLog.GetQuestTagInfo(questID)tagInfoQuality, frequency, tag
C_QuestLog.GetQuestType(questID)questTypeQuest type enum
C_QuestLog.GetQuestDifficultyLevel(questID)levelSuggested level
C_QuestLog.GetRequiredMoney(questID)moneyMoney required
C_QuestLog.GetSuggestedGroupSize(questID)groupSizeSuggested group size
C_QuestLog.GetTimeAllowed(questID)totalTime, elapsedTimeTimed quest info
C_QuestLog.GetZoneStoryInfo(uiMapID)storyInfoZone story progress
C_QuestLog.GetMapForQuestPOIs()uiMapIDMap with quest POIs
C_QuestLog.GetQuestAdditionalHighlights(questID)highlightsAdditional highlight info

Quest Completion & Tracking

FunctionReturnsDescription
C_QuestLog.IsComplete(questID)isCompleteIs quest complete?
C_QuestLog.IsFailed(questID)isFailedHas quest failed?
C_QuestLog.IsOnQuest(questID)isOnQuestIs quest in log?
C_QuestLog.IsQuestCalling(questID)isCallingIs it a calling?
C_QuestLog.IsQuestDisabledForSession(questID)isDisabledDisabled for session?
C_QuestLog.IsQuestFlaggedCompleted(questID)isCompletedFlagged completed (ever)?
C_QuestLog.IsQuestReplayable(questID)isReplayableCan be replayed?
C_QuestLog.IsQuestReplayedRecently(questID)isRecentReplayed recently?
C_QuestLog.IsQuestTrivial(questID)isTrivialBelow player level?
C_QuestLog.IsRepeatableQuest(questID)isRepeatableIs repeatable?
C_QuestLog.IsWorldQuest(questID)isWorldQuestIs a world quest?
C_QuestLog.IsQuestBounty(questID)isBountyIs an emissary/bounty?
C_QuestLog.IsImportantQuest(questID)isImportantIs important (landmark)?
C_QuestLog.IsLegendaryQuest(questID)isLegendaryIs legendary?
C_QuestLog.ReadyForTurnIn(questID)readyReady to turn in?

Quest Tracking

FunctionReturnsDescription
C_QuestLog.GetNumQuestWatches()numWatchesNumber of tracked quests
C_QuestLog.GetQuestWatchType(questID)watchTypeHow quest is tracked
C_QuestLog.AddQuestWatch(questID [, watchType])wasWatchedTrack a quest
C_QuestLog.RemoveQuestWatch(questID)wasRemovedUntrack a quest
C_QuestLog.IsQuestWatched(questID)isWatchedIs quest tracked?
C_QuestLog.GetQuestIDForQuestWatchIndex(watchIndex)questIDQuest at watch index

Quest Objectives

FunctionReturnsDescription
C_QuestLog.GetNumQuestObjectives(questID)numObjectivesNumber of objectives
C_QuestLog.GetQuestObjectives(questID)objectivesAll objectives data
C_QuestLog.GetQuestProgressBarPercent(questID)percentProgress bar %

Quest Actions

FunctionReturnsDescription
C_QuestLog.AbandonQuest()Abandon selected quest
C_QuestLog.SetSelectedQuest(questID)Select quest in log
C_QuestLog.GetSelectedQuest()questIDCurrently selected quest
C_QuestLog.SetAbandonQuest(questID)Prepare to abandon
C_QuestLog.RequestLoadQuestByID(questID)Request quest data load
C_QuestLog.ShouldShowQuestRewards(questID)shouldShowShow rewards?
C_QuestLog.GetNextWaypoint(questID)mapID, x, yNext waypoint
C_QuestLog.GetNextWaypointForMap(questID, uiMapID)x, yWaypoint on map
C_QuestLog.GetNextWaypointText(questID)waypointTextWaypoint text

Quest Rewards (from quest log)

FunctionReturnsDescription
GetNumQuestLogRewards(questID)numRewardsNumber of item rewards
GetQuestLogRewardInfo(rewardIndex, questID)name, texture, count, quality, isUsable, itemID, itemLevelReward item info
GetQuestLogRewardMoney(questID)moneyMoney reward
GetQuestLogRewardXP(questID)xpXP reward
GetQuestLogRewardCurrencies(questID)currenciesCurrency rewards
GetQuestLogRewardSpell(rewardIndex, questID)texture, name, isTradeskillSpell, isSpellLearned, hideSpellLearnText, isBoostSpell, garrFollowerID, genericUnlock, spellIDSpell reward
GetNumQuestLogRewardSpells(questID)numSpellsNumber of spell rewards

C_QuestInfoSystem

FunctionReturnsDescription
C_QuestInfoSystem.GetQuestRewardCurrencies(questID)currenciesQuest reward currencies
C_QuestInfoSystem.GetQuestRewardSpells(questID)spellRewardsQuest reward spells
C_QuestInfoSystem.GetQuestShouldToastCompletion(questID)shouldToastShow completion toast?
C_QuestInfoSystem.HasQuestRewardCurrencies(questID)hasCurrenciesHas currency rewards?
C_QuestInfoSystem.HasQuestRewardSpells(questID)hasSpellsHas spell rewards?

C_QuestOffer — Quest Accept/Decline

FunctionReturnsDescription
AcceptQuest()Accept the offered quest
DeclineQuest()Decline the offered quest
CompleteQuest()Complete quest at NPC
GetQuestReward(rewardIndex)Choose reward item
GetGreetingText()textNPC greeting text
GetObjectiveText()textQuest objective text
GetQuestText()textQuest description text
GetRewardText()textReward text
GetProgressText()textTurn-in progress text
GetTitleText()titleQuest title
GetNumQuestChoices()numChoicesReward choices count
GetNumQuestRewards()numRewardsFixed rewards count
GetQuestItemInfo(itemType, index)name, texture, count, quality, isUsable, itemIDQuest item info
GetQuestItemLink(itemType, index)linkItem link
GetNumQuestItems()numItemsRequired items count
IsQuestCompletable()isCompletableCan turn in?
QuestGetAutoAccept()isAutoAcceptAuto-accepted quest?

C_QuestSession — Party Sync

FunctionReturnsDescription
C_QuestSession.Exists()existsIn a quest session?
C_QuestSession.GetAvailableSessionCommand()commandAvailable session command
C_QuestSession.GetSessionBeginDetails()detailsSession begin details
C_QuestSession.GetSuperTrackedQuest()questIDSuper tracked quest
C_QuestSession.HasJoined()hasJoinedHas 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

FunctionReturnsDescription
C_TaskQuest.GetQuestsForPlayerByMapID(uiMapID)questsWorld quests on map
C_TaskQuest.GetQuestInfoByQuestID(questID)title, factionID, capped, displayAsObjectiveTask quest info
C_TaskQuest.GetQuestProgressBarInfo(questID)progressProgress bar data
C_TaskQuest.GetQuestTimeLeftMinutes(questID)minutesLeftTime remaining
C_TaskQuest.GetQuestTimeLeftSeconds(questID)secondsLeftTime remaining (seconds)
C_TaskQuest.GetQuestZoneID(questID)zoneIDZone for task quest
C_TaskQuest.IsActive(questID)isActiveIs task quest active?
C_TaskQuest.DoesMapShowTaskQuestObjectives(uiMapID)showsObjectivesDoes map show objectives?

C_CampaignInfo — Campaigns

FunctionReturnsDescription
C_CampaignInfo.GetAvailableCampaigns()campaignIDsAvailable campaigns
C_CampaignInfo.GetCampaignID(questID)campaignIDCampaign for quest
C_CampaignInfo.GetCampaignInfo(campaignID)infoCampaign info
C_CampaignInfo.GetChapterIDs(campaignID)chapterIDsCampaign chapters
C_CampaignInfo.GetChapterInfo(chapterID)infoChapter info
C_CampaignInfo.GetCurrentChapterID(campaignID)chapterIDCurrent chapter
C_CampaignInfo.GetState(campaignID)stateCampaign state
C_CampaignInfo.IsCampaignQuest(questID)isCampaignIs quest a campaign quest?
C_CampaignInfo.UsesNormalQuestIcons(campaignID)usesNormalUses normal icons?

C_QuestLineUI — Quest Lines

FunctionReturnsDescription
C_QuestLineUI.GetAvailableQuestLineQuests(textFilter, uiMapID)questsAvailable quest line quests
C_QuestLineUI.GetQuestLineInfo(questID, uiMapID)questLineInfoQuest line info
C_QuestLineUI.GetQuestLineQuests(questLineID)questIDsAll quests in line
C_QuestLineUI.IsComplete(questLineID)isCompleteIs quest line done?
C_QuestLineUI.RequestQuestLinesForMap(uiMapID)Request quest line data

C_ContentTracking

FunctionReturnsDescription
C_ContentTracking.GetCurrentTrackingTarget(trackableType)targetType, targetIDCurrent tracked target
C_ContentTracking.GetObjectiveText(trackableType, trackableID)textObjective text
C_ContentTracking.GetTitle(trackableType, trackableID)titleTracking title
C_ContentTracking.GetTrackedIDs(trackableType)trackableIDsAll tracked IDs
C_ContentTracking.IsTracking(trackableType, trackableID)isTrackingIs it tracked?
C_ContentTracking.SetTracked(trackableType, trackableID, tracked)Set tracking
C_ContentTracking.StopTracking(trackableType, trackableID)Stop tracking

Quest POI Functions

FunctionReturnsDescription
C_QuestLog.GetQuestPOIs()Request quest POI data
QuestPOIGetIconInfo(questID)completed, posX, posY, objectivePOI icon position
QuestPOI_FindButton(parent, questID)buttonFind POI button

Common Patterns

Iterate Quest Log

lua
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

lua
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

lua
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

lua
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

EventPayloadDescription
QUEST_ACCEPTEDquestIDQuest accepted
QUEST_TURNED_INquestID, xpReward, moneyRewardQuest turned in
QUEST_REMOVEDquestID, wasReplayQuestQuest removed from log
QUEST_LOG_UPDATEQuest log changed
QUEST_WATCH_LIST_CHANGEDquestID, addedTracking changed
QUEST_AUTOCOMPLETEquestIDQuest auto-completed
QUEST_COMPLETEAt NPC to complete quest
QUEST_DETAILquestStartItemIDQuest detail shown
QUEST_FINISHEDQuest dialog closed
QUEST_GREETINGNPC greeting with quests
QUEST_PROGRESSQuest turn-in progress
QUEST_SESSION_CREATEDQuest session created
QUEST_SESSION_DESTROYEDQuest session ended
QUEST_SESSION_JOINEDJoined quest session
QUEST_SESSION_LEFTLeft quest session
QUEST_SESSION_MEMBER_CONFIRMMember confirmed session
QUEST_POI_UPDATEQuest POI data changed
TASK_PROGRESS_UPDATEBonus objective/WQ progress
WORLD_QUEST_COMPLETED_BY_SPELLquestIDWQ completed by spell
QUEST_DATA_LOAD_RESULTquestID, successRequestLoadQuestByID result

Gotchas & Restrictions

  1. 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.
  2. GetInfo returns headers — Quest log entries include headers (zones). Check info.isHeader to filter.
  3. Quest watch limit — There's a maximum number of tracked quests. AddQuestWatch() returns false if at limit.
  4. Auto-accept quests — Some quests auto-accept. Check QuestGetAutoAccept() to handle gracefully.
  5. World quest vs regular — World quests use C_TaskQuest functions, not C_QuestLog for map display.
  6. Quest gossip flow — Quest accept flow: QUEST_GREETINGQUEST_DETAILAcceptQuest()QUEST_ACCEPTED.
  7. Campaign quests — Use C_CampaignInfo.IsCampaignQuest() to identify story quests.
  8. Objective dataGetQuestObjectives() returns a table with text, type, finished, numFulfilled, numRequired per objective.