AgentSkillsCN

wow-api-group-lfg

WoW Retail派对、副本、地下城寻找者、预制队伍(LFG列表)、社交队列、大厅匹配器,以及副本标记API的完整参考。涵盖C_PartyInfo(派对管理、邀请、转换、就绪检查、倒计时)、C_LFGInfo(地下城寻找者队列、角色选择)、C_LFGList(预制队伍列表、搜索、申请、创建)、C_SocialQueue(好友队列追踪)、C_LobbyMatchmakerInfo、副本标记,以及与队伍相关的各类事件。当您需要处理派对/副本管理、队伍寻找、预制队伍列表、地下城队列、角色选择、就绪检查,或副本标记时,此参考手册将为您提供全面支持。

SKILL.md
--- frontmatter
name: wow-api-group-lfg
description: "Complete reference for WoW Retail Party, Raid, Dungeon Finder, Premade Groups (LFG List), Social Queue, Lobby Matchmaker, and Raid Marker APIs. Covers C_PartyInfo (party management, invites, conversion, ready check, countdown), C_LFGInfo (dungeon finder queue, role selection), C_LFGList (premade groups listing, search, application, creation), C_SocialQueue (friend queue tracking), C_LobbyMatchmakerInfo, raid markers, and group-related events. Use when working with party/raid management, group finder, premade group listing, dungeon queue, role selection, ready checks, or raid markers."

Group & LFG API (Retail — Patch 12.0.0)

Comprehensive reference for party/raid management, dungeon finder, premade groups, and related 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_PartyInfo — Party management, invites, conversion
  • C_LFGInfo — Dungeon Finder queue system
  • C_LFGList — Premade Groups (Group Finder)
  • C_SocialQueue — Social queue tracking
  • C_LobbyMatchmakerInfo — Lobby matchmaker
  • Raid Markers — World and target markers
  • Group utility — Ready check, countdown, roles

C_PartyInfo — Party Management

Core Functions

FunctionReturnsDescription
C_PartyInfo.InviteUnit(name)Invite player to group
C_PartyInfo.UninviteUnit(name [, reason])Kick player from group
C_PartyInfo.LeaveParty([category])Leave group
C_PartyInfo.ConvertToParty()Convert raid to party
C_PartyInfo.ConvertToRaid()Convert party to raid
C_PartyInfo.CanInvite()canInviteCan invite to group?
C_PartyInfo.IsPartyFull([category])isFullIs group full?
C_PartyInfo.IsPartyInJailersTower()isInTorghastIn Torghast?
C_PartyInfo.GetActiveCategories()categoriesActive party categories
C_PartyInfo.GetMinLevel([category])minLevelMinimum level requirement
C_PartyInfo.GetInviteReferralInfo(inviteGUID)referredByGUID, referredByName, ...Invite referral info
C_PartyInfo.GetInviteConfirmationInvalidQueues(inviteGUID)queuesInvalid queues for invite
C_PartyInfo.ConfirmInviteUnit(name)Confirm pending invite
C_PartyInfo.DoCountdown(seconds)Start raid countdown
C_PartyInfo.DoReadyCheck()Initiate ready check
C_PartyInfo.GetRestrictPingsTo()restrictToPing restriction setting
C_PartyInfo.SetRestrictPingsTo(restrictTo)Set ping restriction
C_PartyInfo.AllowIncomingDelves(allow)Allow incoming Delve invites
C_PartyInfo.IsCrossFactionParty([category])isCrossFactionIs cross-faction group?

Group Query Functions (Global)

FunctionReturnsDescription
IsInGroup([category])inGroupIn any group?
IsInRaid([category])inRaidIn a raid?
GetNumGroupMembers([category])numMembersGroup member count
GetNumSubgroupMembers([category])numSubMembersParty-size count
UnitInParty(unit)inPartyIs unit in party?
UnitInRaid(unit)inRaidIs unit in raid?
GetRaidRosterInfo(raidIndex)name, rank, subgroup, level, class, fileName, zone, online, isDead, role, isML, combatRoleRaid roster info
IsPartyLFG()isLFGIn LFG group?
IsInInstance()inInstance, instanceTypeIn instance?
GetInstanceInfo()name, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceID, instanceGroupSize, LfgDungeonIDInstance info
SetRaidSubgroup(memberIndex, subgroup)Move member to subgroup
SwapRaidSubgroup(index1, index2)Swap two members
PromoteToLeader(unit)Promote to leader
DemoteAssistant(unit)Demote assistant
PromoteToAssistant(unit)Promote to assistant
UnitIsGroupLeader(unit [, category])isLeaderIs unit the leader?
UnitIsGroupAssistant(unit)isAssistantIs unit assistant?

Role Functions

FunctionReturnsDescription
UnitGroupRolesAssigned(unit)roleTANK, HEALER, DAMAGER, NONE
UnitSetRole(unit, role)Set unit's role
GetSpecializationRole(specIndex)roleSpec's default role
UnitGetAvailableRoles(unit)canTank, canHeal, canDPSAvailable roles

Ready Check Functions

FunctionReturnsDescription
GetReadyCheckStatus(unit)statusready, notready, waiting
GetReadyCheckTimeLeft()timeLeftSeconds remaining
ConfirmReadyCheck(isReady)Respond to ready check

C_LFGInfo — Dungeon Finder

FunctionReturnsDescription
C_LFGInfo.GetAllEntriesForCategory(category)entriesAll LFG entries
C_LFGInfo.GetLFGDungeonInfo(dungeonID)infoDungeon info
C_LFGInfo.GetRoleCheckDifficultyDetails()difficultyID, isBlockedRole check details
C_LFGInfo.CanPlayerUseLFD()canUseCan use dungeon finder?
C_LFGInfo.CanPlayerUseScenarioFinder()canUseCan use scenario finder?
C_LFGInfo.CanPlayerUsePremadeGroup()canUseCan use premade groups?
C_LFGInfo.GetQueuedDungeons(category)dungeonsCurrently queued dungeons
C_LFGInfo.HideNameFromUI(dungeonID)hiddenIs name hidden?

LFG Global Functions

FunctionReturnsDescription
GetLFGMode(category)mode, subModeCurrent LFG mode
GetLFGRoles()isLeader, isTank, isHealer, isDPSSelected roles
SetLFGRoles(isLeader, isTank, isHealer, isDPS)Set roles
GetLFGProposal()leaderName, category, dungeonID, ...Current proposal
AcceptProposal()Accept dungeon proposal
RejectProposal()Reject dungeon proposal
GetLFGQueueStats(category)hasData, leaderNeeds, tankNeeds, healerNeeds, dpsNeeds, instanceType, instanceSubType, instanceName, averageWait, tankWait, healerWait, damageWait, myWait, queuedTimeQueue statistics
JoinLFG(category)Join LFG queue
LeaveLFG(category)Leave LFG queue
CompleteLFGReadyCheck(isReady)Complete LFG ready check
GetLFGDeserterExpiration()expirationDeserter debuff time
CompleteLFGRoleCheck(isAccepted)Complete role check

C_LFGList — Premade Groups (Group Finder)

Search & Browse

FunctionReturnsDescription
C_LFGList.Search(categoryID, filter [, preferredFilters [, languages [, ...] ] ])Search for groups
C_LFGList.GetSearchResults()totalResultsFound, resultsGet search results
C_LFGList.GetSearchResultInfo(searchResultID)resultInfoSingle result info
C_LFGList.GetSearchResultMemberInfo(searchResultID, memberIndex)memberInfoResult member info
C_LFGList.GetSearchResultMemberCounts(searchResultID)numMembers, numTanks, numHealers, numDPSMember count per role
C_LFGList.HasSearchResultInfo(searchResultID)hasInfoHas result info?
C_LFGList.GetFilteredSearchResults()totalResults, filteredResultsFiltered results
C_LFGList.GetAvailableCategories()categoryIDsAvailable categories
C_LFGList.GetCategoryInfo(categoryID)name, ...Category info
C_LFGList.GetAvailableActivities(categoryID [, groupID [, filter]])activityIDsAvailable activities
C_LFGList.GetActivityInfoTable(activityID)infoActivity info
C_LFGList.GetActivityFullName(activityID [, questID [, isWarModeDesired]])fullNameFull activity name
C_LFGList.GetAvailableLanguageSearchFilter()languagesAvailable languages

Create & Manage Listing

FunctionReturnsDescription
C_LFGList.CreateListing(activityID, itemLevel, autoAccept, privateGroup, questID, ...)Create group listing
C_LFGList.UpdateListing(activityID, itemLevel, autoAccept, privateGroup, questID, ...)Update listing
C_LFGList.RemoveListing()Remove your listing
C_LFGList.GetActiveEntryInfo()entryInfoYour listing info
C_LFGList.HasActiveEntryInfo()hasInfoHave active listing?

Applications

FunctionReturnsDescription
C_LFGList.ApplyToGroup(searchResultID, comment, tankRole, healerRole, dpsRole)Apply to group
C_LFGList.CancelApplication(searchResultID)Cancel application
C_LFGList.GetApplications()applicationsYour applications
C_LFGList.GetApplicationInfo(searchResultID)appStatus, pendingStatus, appDuration, ...Application status
C_LFGList.GetApplicants()applicantIDsApplicants to your group
C_LFGList.GetApplicantInfo(applicantID)infoApplicant info
C_LFGList.GetApplicantMemberInfo(applicantID, memberIndex)memberInfoApplicant member info
C_LFGList.InviteApplicant(applicantID)Invite applicant
C_LFGList.DeclineApplicant(applicantID)Decline applicant

Raid Markers

FunctionReturnsDescription
SetRaidTarget(unit, markerIndex)Set raid target marker
GetRaidTargetIndex(unit)markerIndexGet target marker
SetRaidTargetIcon(unit, icon)Set raid icon (same as above)
IsRaidMarkerActive(markerIndex)isActiveIs world marker active?
PlaceRaidMarker(markerIndex)Place world marker at cursor
ClearRaidMarker(markerIndex)Clear world marker
UnitPopupSetRaidTargetButton_OnClick(frame, unit, icon)Set from unit popup

Marker Index Values

IndexMarker
1Star (Yellow)
2Circle (Orange)
3Diamond (Purple)
4Triangle (Green)
5Moon (Silver)
6Square (Blue)
7Cross/X (Red)
8Skull (White)
0Clear

Common Patterns

Check Group Type and Size

lua
local function GetGroupInfo()
    if IsInRaid() then
        return "raid", GetNumGroupMembers()
    elseif IsInGroup() then
        return "party", GetNumGroupMembers()
    else
        return "solo", 1
    end
end

Iterate Group Members

lua
local function ForEachGroupMember(callback)
    local prefix = IsInRaid() and "raid" or "party"
    local numMembers = GetNumGroupMembers()
    
    if IsInRaid() then
        for i = 1, numMembers do
            callback(prefix .. i)
        end
    else
        callback("player")
        for i = 1, numMembers - 1 do
            callback(prefix .. i)
        end
    end
end

ForEachGroupMember(function(unit)
    print(UnitName(unit), UnitGroupRolesAssigned(unit))
end)

Search Premade Groups

lua
-- Search for M+ groups
local CATEGORY_DUNGEON = 2
C_LFGList.Search(CATEGORY_DUNGEON, "")

local frame = CreateFrame("Frame")
frame:RegisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED")
frame:SetScript("OnEvent", function()
    local totalResults, results = C_LFGList.GetSearchResults()
    for _, resultID in ipairs(results) do
        local info = C_LFGList.GetSearchResultInfo(resultID)
        if info then
            print(info.name, info.comment, info.numMembers)
        end
    end
end)

Key Events

EventPayloadDescription
GROUP_ROSTER_UPDATEGroup composition changed
GROUP_FORMEDcategoryGroup formed
GROUP_LEFTcategoryLeft group
GROUP_JOINEDcategoryJoined group
PARTY_INVITE_REQUESTname, ...Received party invite
PARTY_INVITE_CANCELInvite cancelled
PARTY_LEADER_CHANGEDLeader changed
PARTY_MEMBER_ENABLEunitTokenMember came online
PARTY_MEMBER_DISABLEunitTokenMember went offline
ROLE_CHANGED_INFORMchangedName, sourceName, oldRole, newRoleRole changed
READY_CHECKinitiatorName, readyCheckTimeLeftReady check started
READY_CHECK_CONFIRMunit, isReadyMember responded
READY_CHECK_FINISHEDpreemptedReady check done
START_TIMERtimerType, timeRemaining, totalTimeCountdown timer
LFG_LIST_SEARCH_RESULTS_RECEIVEDPremade search done
LFG_LIST_SEARCH_RESULT_UPDATEDsearchResultIDResult updated
LFG_LIST_ACTIVE_ENTRY_UPDATEYour listing updated
LFG_LIST_APPLICANT_UPDATEDapplicantIDApplicant updated
LFG_LIST_APPLICANT_LIST_UPDATEDApplicant list changed
LFG_LIST_ENTRY_CREATION_FAILEDListing creation failed
LFG_PROPOSAL_SHOWDungeon proposal shown
LFG_PROPOSAL_SUCCEEDEDProposal accepted
LFG_PROPOSAL_FAILEDProposal failed
LFG_QUEUE_STATUS_UPDATEQueue status changed
LFG_UPDATELFG system updated
LFG_ROLE_CHECK_SHOWisRequeueRole check shown
RAID_TARGET_UPDATERaid marker changed
INSTANCE_GROUP_SIZE_CHANGEDInstance group size changed

Gotchas & Restrictions

  1. InviteUnit requires hardware event — Must be called from a user click/key handler.
  2. Party vs raid iteration — Use different unit tokens: "party1"-"party4" vs "raid1"-"raid40". Player is NOT in party tokens.
  3. Category mattersIsInGroup() defaults to LE_PARTY_CATEGORY_HOME. Use LE_PARTY_CATEGORY_INSTANCE for LFG groups.
  4. GROUP_ROSTER_UPDATE fires often — Debounce processing. Fires for role changes, joins, leaves, subgroup changes.
  5. LFG search is asyncC_LFGList.Search() is async. Wait for LFG_LIST_SEARCH_RESULTS_RECEIVED.
  6. SendAddonMessage in instances — Blocked in 12.0.0. Group addons cannot communicate via addon messages in instances.
  7. Cross-faction groups — Check C_PartyInfo.IsCrossFactionParty() to handle cross-faction UI properly.
  8. Raid markers require assistSetRaidTarget() requires leader or assistant in raids.