Guild API (Retail — Patch 12.0.0)
Comprehensive reference for guild management, guild bank, and guild info 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
-
Guild Management — Invite, promote, demote, kick, disband, MOTD
-
Guild Roster — Member list, info, sorting
-
Guild Bank — Item management, tabs, permissions
-
C_GuildInfo — Guild info utilities
-
Club Integration — Guilds as C_Club entities
Guild Management
Core Functions
Function Returns Description
IsInGuild()
inGuild
Is player in a guild?
GetGuildInfo(unit)
guildName, guildRankName, guildRankIndex, realm
Guild info for unit
GetGuildFactionGroup()
factionGroup
Guild faction (0=Horde, 1=Alliance)
GuildInvite(name)
— Invite player to guild
GuildUninvite(name)
— Remove from guild
GuildPromote(name)
— Promote one rank
GuildDemote(name)
— Demote one rank
GuildSetLeader(name)
— Transfer leadership
GuildDisband()
— Disband guild
GuildLeave()
— Leave guild
GuildSetMOTD(motd)
— Set message of the day
GetGuildRosterMOTD()
motd
Get MOTD
GuildRosterSetPublicNote(index, note)
— Set public note
GuildRosterSetOfficerNote(index, note)
— Set officer note
GuildControlSetRank(rankIndex)
— Select rank for editing
GuildControlSetRankFlag(flagIndex, enabled)
— Set rank permission
GuildControlGetRankFlags()
flags
Get rank permissions
GuildControlGetNumRanks()
numRanks
Number of ranks
GuildControlGetRankName(rankIndex)
name
Rank name
GuildControlAddRank(name)
— Add new rank
GuildControlDelRank(rankIndex)
— Delete rank
GuildControlSaveRank(name)
— Save rank changes
Guild Roster
Function Returns Description
GetNumGuildMembers()
totalMembers, numOnline, numOnlineAndMobile
Member counts
GetGuildRosterInfo(index)
name, rankName, rankIndex, level, classDisplayName, zone, publicNote, officerNote, isOnline, status, class, achievementPoints, achievementRank, isMobile, isSoREligible, standingID
Member info
GetGuildRosterLastOnline(index)
years, months, days, hours
Last online time
GuildRoster()
— Request roster refresh
SortGuildRoster(sortType)
— Sort roster
SetGuildRosterShowOffline(showOffline)
— Toggle offline display
GetGuildRosterShowOffline()
showOffline
Showing offline?
SetGuildRosterSelection(index)
— Select member
GetGuildRosterSelection()
index
Selected member
C_GuildInfo
Function Returns Description
C_GuildInfo.GetGuildNewsInfo(index)
newsInfo
Guild news item
C_GuildInfo.GetGuildTabardInfo(unit)
tabardInfo
Guild tabard details
C_GuildInfo.GuildRoster()
— Request roster update
C_GuildInfo.QueryGuildMemberRecipes(guildMemberGUID, skillLineID)
— Query member recipes
C_GuildInfo.QueryGuildMembersForRecipe(skillLineID, spellID [, recipeLevel])
— Query who knows recipe
C_GuildInfo.RemoveFromGuild(guid)
— Remove by GUID
C_GuildInfo.IsGuildOfficer()
isOfficer
Is player officer?
C_GuildInfo.IsGuildRankAssignmentAllowed(guid, rankOrder)
isAllowed
Can assign rank?
C_GuildInfo.SetGuildRankOrder(guid, rankOrder)
— Set member rank
C_GuildInfo.SetNote(guid, note, isPublic)
— Set public/officer note
C_GuildInfo.CanEditOfficerNote()
canEdit
Can edit officer notes?
C_GuildInfo.CanSpeakInGuildChat()
canSpeak
Can talk in guild chat?
C_GuildInfo.CanViewOfficerNote()
canView
Can view officer notes?
C_GuildInfo.GetGuildRankOrder(guid)
rankOrder
Member rank order
C_GuildInfo.MemberExistsByName(name)
exists
Member in guild?
Guild Bank
Guild Bank Items
Function Returns Description
GetGuildBankNumSlots(tab)
numSlots
Slots in bank tab
GetGuildBankItemInfo(tab, slot)
texture, itemCount, locked, isFiltered, quality
Item info
GetGuildBankItemLink(tab, slot)
link
Item link
GetGuildBankItemValue(tab, slot)
value
Item vendor value
AutoStoreGuildBankItem(tab, slot)
— Move to bags
SplitGuildBankItem(tab, slot, amount)
— Split stack
PickupGuildBankItem(tab, slot)
— Pick up item
QueryGuildBankTab(tab)
— Request tab data
QueryGuildBankLog(tab)
— Request tab log
QueryGuildBankText(tab)
— Request tab info text
Guild Bank Tabs
Function Returns Description
GetNumGuildBankTabs()
numTabs
Number of bank tabs
GetGuildBankTabInfo(tab)
name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals
Tab info
SetGuildBankTabInfo(tab, name, icon)
— Edit tab name/icon
BuyGuildBankTab()
— Purchase new tab
GetGuildBankTabCost()
cost
Next tab cost
GetGuildBankText(tab)
text
Tab info text
SetGuildBankText(tab, text)
— Set tab info text
CanGuildBankRepair()
canRepair
Can repair from guild bank?
GetGuildBankWithdrawMoney()
amount
Withdrawal allowance
GetGuildBankMoney()
money
Guild bank gold
DepositGuildBankMoney(amount)
— Deposit gold
WithdrawGuildBankMoney(amount)
— Withdraw gold
CanWithdrawGuildBankMoney()
canWithdraw
Can withdraw gold?
GetGuildBankMoneyTransaction(index)
type, name, amount, years, months, days, hours
Money log entry
GetNumGuildBankMoneyTransactions()
numTransactions
Money log count
Guild Bank Log
Function Returns Description
GetNumGuildBankTransactions(tab)
numTransactions
Tab transaction count
GetGuildBankTransaction(tab, index)
type, name, itemLink, count, tab1, tab2, year, month, day, hour
Transaction entry
Guild + Club Integration
Guilds are represented as clubs with Enum.ClubType.Guild in the C_Club system:
-- Get guild as a club local clubs = C_Club.GetSubscribedClubs() for _, club in ipairs(clubs) do if club.clubType == Enum.ClubType.Guild then local guildClubId = club.clubId -- Use C_Club functions for guild chat streams local streams = C_Club.GetStreams(guildClubId) break end end
Common Patterns
Iterate Guild Roster
local function PrintGuildMembers() local numMembers = GetNumGuildMembers() for i = 1, numMembers do local name, rankName, rankIndex, level, classDisplayName, zone, publicNote, officerNote, isOnline = GetGuildRosterInfo(i) if isOnline then print(name, level, classDisplayName, zone) end end end
-- Must request roster first C_GuildInfo.GuildRoster()
Guild Bank Interaction
-- List items in guild bank tab 1 local function ListGuildBankTab(tab) local numSlots = GetGuildBankNumSlots(tab) for slot = 1, numSlots do local texture, itemCount, locked, isFiltered, quality = GetGuildBankItemInfo(tab, slot) if texture then local link = GetGuildBankItemLink(tab, slot) print(link, "x" .. (itemCount or 1)) end end end
Key Events
Event Payload Description
GUILD_ROSTER_UPDATE
canRequestRosterUpdate Roster data refreshed
GUILD_RANKS_UPDATE
— Rank structure changed
GUILD_MOTD
motdText MOTD received
GUILD_NEWS_UPDATE
— Guild news updated
GUILD_INVITE_REQUEST
inviter, guildName, guildAchievementPoints, oldGuildName, isNewGuild, ... Guild invite received
GUILD_INVITE_CANCEL
— Invite cancelled
PLAYER_GUILD_UPDATE
unitTarget Guild status changed
GUILD_TRADESKILL_UPDATE
— Guild tradeskill updated
GUILD_RECIPE_KNOWN_BY_MEMBERS
— Recipe query result
GUILDBANK_ITEM_LOCK_CHANGED
— Bank item lock changed
GUILDBANK_UPDATE_TABS
— Bank tabs updated
GUILDBANK_UPDATE_MONEY
— Bank money changed
GUILDBANK_UPDATE_TEXT
tab Bank info text updated
GUILDBANKBAGSLOTS_CHANGED
— Bank slots changed
GUILDBANKFRAME_OPENED
— Bank frame opened
GUILDBANKFRAME_CLOSED
— Bank frame closed
GUILDBANKLOG_UPDATE
— Bank log updated
Gotchas & Restrictions
-
Roster request required — Call C_GuildInfo.GuildRoster() before reading roster. Data isn't always current.
-
Guild bank requires NPC — Guild bank functions only work when at a guild bank NPC.
-
Permissions vary by rank — Check permissions before attempting operations. CanGuildBankRepair() , CanWithdrawGuildBankMoney() , etc.
-
QueryGuildBankTab is async — Must query each tab and wait for GUILDBANK_UPDATE_TABS before reading items.
-
Guild = Club — Guild chat uses C_Club with Enum.ClubType.Guild . Use C_Club.SendMessage() for guild chat.
-
Rank indices — Rank 0 = Guild Master. Higher indices = lower ranks.
-
GetGuildRosterInfo index — 1-based index into the roster. Not related to rank or any other ordering.
-
MOTD event timing — GUILD_MOTD fires during login. Register early to catch it.