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
Function Returns Description
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()
canInvite
Can invite to group?
C_PartyInfo.IsPartyFull([category])
isFull
Is group full?
C_PartyInfo.IsPartyInJailersTower()
isInTorghast
In Torghast?
C_PartyInfo.GetActiveCategories()
categories
Active party categories
C_PartyInfo.GetMinLevel([category])
minLevel
Minimum level requirement
C_PartyInfo.GetInviteReferralInfo(inviteGUID)
referredByGUID, referredByName, ...
Invite referral info
C_PartyInfo.GetInviteConfirmationInvalidQueues(inviteGUID)
queues
Invalid 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()
restrictTo
Ping restriction setting
C_PartyInfo.SetRestrictPingsTo(restrictTo)
— Set ping restriction
C_PartyInfo.AllowIncomingDelves(allow)
— Allow incoming Delve invites
C_PartyInfo.IsCrossFactionParty([category])
isCrossFaction
Is cross-faction group?
Group Query Functions (Global)
Function Returns Description
IsInGroup([category])
inGroup
In any group?
IsInRaid([category])
inRaid
In a raid?
GetNumGroupMembers([category])
numMembers
Group member count
GetNumSubgroupMembers([category])
numSubMembers
Party-size count
UnitInParty(unit)
inParty
Is unit in party?
UnitInRaid(unit)
inRaid
Is unit in raid?
GetRaidRosterInfo(raidIndex)
name, rank, subgroup, level, class, fileName, zone, online, isDead, role, isML, combatRole
Raid roster info
IsPartyLFG()
isLFG
In LFG group?
IsInInstance()
inInstance, instanceType
In instance?
GetInstanceInfo()
name, instanceType, difficultyID, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, instanceID, instanceGroupSize, LfgDungeonID
Instance 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])
isLeader
Is unit the leader?
UnitIsGroupAssistant(unit)
isAssistant
Is unit assistant?
Role Functions
Function Returns Description
UnitGroupRolesAssigned(unit)
role
TANK, HEALER, DAMAGER, NONE
UnitSetRole(unit, role)
— Set unit's role
GetSpecializationRole(specIndex)
role
Spec's default role
UnitGetAvailableRoles(unit)
canTank, canHeal, canDPS
Available roles
Ready Check Functions
Function Returns Description
GetReadyCheckStatus(unit)
status
ready, notready, waiting
GetReadyCheckTimeLeft()
timeLeft
Seconds remaining
ConfirmReadyCheck(isReady)
— Respond to ready check
C_LFGInfo — Dungeon Finder
Function Returns Description
C_LFGInfo.GetAllEntriesForCategory(category)
entries
All LFG entries
C_LFGInfo.GetLFGDungeonInfo(dungeonID)
info
Dungeon info
C_LFGInfo.GetRoleCheckDifficultyDetails()
difficultyID, isBlocked
Role check details
C_LFGInfo.CanPlayerUseLFD()
canUse
Can use dungeon finder?
C_LFGInfo.CanPlayerUseScenarioFinder()
canUse
Can use scenario finder?
C_LFGInfo.CanPlayerUsePremadeGroup()
canUse
Can use premade groups?
C_LFGInfo.GetQueuedDungeons(category)
dungeons
Currently queued dungeons
C_LFGInfo.HideNameFromUI(dungeonID)
hidden
Is name hidden?
LFG Global Functions
Function Returns Description
GetLFGMode(category)
mode, subMode
Current LFG mode
GetLFGRoles()
isLeader, isTank, isHealer, isDPS
Selected 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, queuedTime
Queue statistics
JoinLFG(category)
— Join LFG queue
LeaveLFG(category)
— Leave LFG queue
CompleteLFGReadyCheck(isReady)
— Complete LFG ready check
GetLFGDeserterExpiration()
expiration
Deserter debuff time
CompleteLFGRoleCheck(isAccepted)
— Complete role check
C_LFGList — Premade Groups (Group Finder)
Search & Browse
Function Returns Description
C_LFGList.Search(categoryID, filter [, preferredFilters [, languages [, ...] ] ])
— Search for groups
C_LFGList.GetSearchResults()
totalResultsFound, results
Get search results
C_LFGList.GetSearchResultInfo(searchResultID)
resultInfo
Single result info
C_LFGList.GetSearchResultMemberInfo(searchResultID, memberIndex)
memberInfo
Result member info
C_LFGList.GetSearchResultMemberCounts(searchResultID)
numMembers, numTanks, numHealers, numDPS
Member count per role
C_LFGList.HasSearchResultInfo(searchResultID)
hasInfo
Has result info?
C_LFGList.GetFilteredSearchResults()
totalResults, filteredResults
Filtered results
C_LFGList.GetAvailableCategories()
categoryIDs
Available categories
C_LFGList.GetCategoryInfo(categoryID)
name, ...
Category info
C_LFGList.GetAvailableActivities(categoryID [, groupID [, filter]])
activityIDs
Available activities
C_LFGList.GetActivityInfoTable(activityID)
info
Activity info
C_LFGList.GetActivityFullName(activityID [, questID [, isWarModeDesired]])
fullName
Full activity name
C_LFGList.GetAvailableLanguageSearchFilter()
languages
Available languages
Create & Manage Listing
Function Returns Description
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()
entryInfo
Your listing info
C_LFGList.HasActiveEntryInfo()
hasInfo
Have active listing?
Applications
Function Returns Description
C_LFGList.ApplyToGroup(searchResultID, comment, tankRole, healerRole, dpsRole)
— Apply to group
C_LFGList.CancelApplication(searchResultID)
— Cancel application
C_LFGList.GetApplications()
applications
Your applications
C_LFGList.GetApplicationInfo(searchResultID)
appStatus, pendingStatus, appDuration, ...
Application status
C_LFGList.GetApplicants()
applicantIDs
Applicants to your group
C_LFGList.GetApplicantInfo(applicantID)
info
Applicant info
C_LFGList.GetApplicantMemberInfo(applicantID, memberIndex)
memberInfo
Applicant member info
C_LFGList.InviteApplicant(applicantID)
— Invite applicant
C_LFGList.DeclineApplicant(applicantID)
— Decline applicant
Raid Markers
Function Returns Description
SetRaidTarget(unit, markerIndex)
— Set raid target marker
GetRaidTargetIndex(unit)
markerIndex
Get target marker
SetRaidTargetIcon(unit, icon)
— Set raid icon (same as above)
IsRaidMarkerActive(markerIndex)
isActive
Is 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
Index Marker
1 Star (Yellow)
2 Circle (Orange)
3 Diamond (Purple)
4 Triangle (Green)
5 Moon (Silver)
6 Square (Blue)
7 Cross/X (Red)
8 Skull (White)
0 Clear
Common Patterns
Check Group Type and Size
local function GetGroupInfo() if IsInRaid() then return "raid", GetNumGroupMembers() elseif IsInGroup() then return "party", GetNumGroupMembers() else return "solo", 1 end end
Iterate Group Members
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
-- 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
Event Payload Description
GROUP_ROSTER_UPDATE
— Group composition changed
GROUP_FORMED
category Group formed
GROUP_LEFT
category Left group
GROUP_JOINED
category Joined group
PARTY_INVITE_REQUEST
name, ... Received party invite
PARTY_INVITE_CANCEL
— Invite cancelled
PARTY_LEADER_CHANGED
— Leader changed
PARTY_MEMBER_ENABLE
unitToken Member came online
PARTY_MEMBER_DISABLE
unitToken Member went offline
ROLE_CHANGED_INFORM
changedName, sourceName, oldRole, newRole Role changed
READY_CHECK
initiatorName, readyCheckTimeLeft Ready check started
READY_CHECK_CONFIRM
unit, isReady Member responded
READY_CHECK_FINISHED
preempted Ready check done
START_TIMER
timerType, timeRemaining, totalTime Countdown timer
LFG_LIST_SEARCH_RESULTS_RECEIVED
— Premade search done
LFG_LIST_SEARCH_RESULT_UPDATED
searchResultID Result updated
LFG_LIST_ACTIVE_ENTRY_UPDATE
— Your listing updated
LFG_LIST_APPLICANT_UPDATED
applicantID Applicant updated
LFG_LIST_APPLICANT_LIST_UPDATED
— Applicant list changed
LFG_LIST_ENTRY_CREATION_FAILED
— Listing creation failed
LFG_PROPOSAL_SHOW
— Dungeon proposal shown
LFG_PROPOSAL_SUCCEEDED
— Proposal accepted
LFG_PROPOSAL_FAILED
— Proposal failed
LFG_QUEUE_STATUS_UPDATE
— Queue status changed
LFG_UPDATE
— LFG system updated
LFG_ROLE_CHECK_SHOW
isRequeue Role check shown
RAID_TARGET_UPDATE
— Raid marker changed
INSTANCE_GROUP_SIZE_CHANGED
— Instance group size changed
Gotchas & Restrictions
-
InviteUnit requires hardware event — Must be called from a user click/key handler.
-
Party vs raid iteration — Use different unit tokens: "party1"-"party4" vs "raid1"-"raid40" . Player is NOT in party tokens.
-
Category matters — IsInGroup() defaults to LE_PARTY_CATEGORY_HOME . Use LE_PARTY_CATEGORY_INSTANCE for LFG groups.
-
GROUP_ROSTER_UPDATE fires often — Debounce processing. Fires for role changes, joins, leaves, subgroup changes.
-
LFG search is async — C_LFGList.Search() is async. Wait for LFG_LIST_SEARCH_RESULTS_RECEIVED .
-
SendAddonMessage in instances — Blocked in 12.0.0. Group addons cannot communicate via addon messages in instances.
-
Cross-faction groups — Check C_PartyInfo.IsCrossFactionParty() to handle cross-faction UI properly.
-
Raid markers require assist — SetRaidTarget() requires leader or assistant in raids.