1---2name: wow-api-guild3description: Complete reference for WoW Retail Guild Management, Guild Bank, Guild Info, and Guild Event APIs. Covers guild management functions (invite, promote, demote, kick, disband, MOTD, info), guild roster (GetGuildRosterInfo, GuildRoster, sorting), guild bank functions (GetGuildBankItemInfo, deposit, withdraw, tab management, permissions), guild perks/reputation, C_GuildInfo, and the Club API guild integration (guilds are ClubType.Guild in the Club system). Use when working with guild management, guild roster, guild bank, guild chat, guild events, or guild achievements.4---5
6# Guild API (Retail — Patch 12.0.0)
7
8Comprehensive reference for guild management, guild bank, and guild info APIs.
9
10> **Source:** https://warcraft.wiki.gg/wiki/World_of_Warcraft_API
11> **Current as of:** Patch 12.0.0 (Build 65655) — January 28, 2026
12> **Scope:** Retail only.
13
14---
15
16## Scope
17
18- **Guild Management** — Invite, promote, demote, kick, disband, MOTD
19- **Guild Roster** — Member list, info, sorting
20- **Guild Bank** — Item management, tabs, permissions
21- **C_GuildInfo** — Guild info utilities
22- **Club Integration** — Guilds as C_Club entities
23
24---
25
26## Guild Management
27
28### Core Functions
29
30| Function | Returns | Description |
31|----------|---------|-------------|
32| `IsInGuild()` | `inGuild` | Is player in a guild? |
33| `GetGuildInfo(unit)` | `guildName, guildRankName, guildRankIndex, realm` | Guild info for unit |
34| `GetGuildFactionGroup()` | `factionGroup` | Guild faction (0=Horde, 1=Alliance) |
35| `GuildInvite(name)` | — | Invite player to guild |
36| `GuildUninvite(name)` | — | Remove from guild |
37| `GuildPromote(name)` | — | Promote one rank |
38| `GuildDemote(name)` | — | Demote one rank |
39| `GuildSetLeader(name)` | — | Transfer leadership |
40| `GuildDisband()` | — | Disband guild |
41| `GuildLeave()` | — | Leave guild |
42| `GuildSetMOTD(motd)` | — | Set message of the day |
43| `GetGuildRosterMOTD()` | `motd` | Get MOTD |
44| `GuildRosterSetPublicNote(index, note)` | — | Set public note |
45| `GuildRosterSetOfficerNote(index, note)` | — | Set officer note |
46| `GuildControlSetRank(rankIndex)` | — | Select rank for editing |
47| `GuildControlSetRankFlag(flagIndex, enabled)` | — | Set rank permission |
48| `GuildControlGetRankFlags()` | `flags` | Get rank permissions |
49| `GuildControlGetNumRanks()` | `numRanks` | Number of ranks |
50| `GuildControlGetRankName(rankIndex)` | `name` | Rank name |
51| `GuildControlAddRank(name)` | — | Add new rank |
52| `GuildControlDelRank(rankIndex)` | — | Delete rank |
53| `GuildControlSaveRank(name)` | — | Save rank changes |
54
55### Guild Roster
56
57| Function | Returns | Description |
58|----------|---------|-------------|
59| `GetNumGuildMembers()` | `totalMembers, numOnline, numOnlineAndMobile` | Member counts |
60| `GetGuildRosterInfo(index)` | `name, rankName, rankIndex, level, classDisplayName, zone, publicNote, officerNote, isOnline, status, class, achievementPoints, achievementRank, isMobile, isSoREligible, standingID` | Member info |
61| `GetGuildRosterLastOnline(index)` | `years, months, days, hours` | Last online time |
62| `GuildRoster()` | — | Request roster refresh |
63| `SortGuildRoster(sortType)` | — | Sort roster |
64| `SetGuildRosterShowOffline(showOffline)` | — | Toggle offline display |
65| `GetGuildRosterShowOffline()` | `showOffline` | Showing offline? |
66| `SetGuildRosterSelection(index)` | — | Select member |
67| `GetGuildRosterSelection()` | `index` | Selected member |
68
69---
70
71## C_GuildInfo
72
73| Function | Returns | Description |
74|----------|---------|-------------|
75| `C_GuildInfo.GetGuildNewsInfo(index)` | `newsInfo` | Guild news item |
76| `C_GuildInfo.GetGuildTabardInfo(unit)` | `tabardInfo` | Guild tabard details |
77| `C_GuildInfo.GuildRoster()` | — | Request roster update |
78| `C_GuildInfo.QueryGuildMemberRecipes(guildMemberGUID, skillLineID)` | — | Query member recipes |
79| `C_GuildInfo.QueryGuildMembersForRecipe(skillLineID, spellID [, recipeLevel])` | — | Query who knows recipe |
80| `C_GuildInfo.RemoveFromGuild(guid)` | — | Remove by GUID |
81| `C_GuildInfo.IsGuildOfficer()` | `isOfficer` | Is player officer? |
82| `C_GuildInfo.IsGuildRankAssignmentAllowed(guid, rankOrder)` | `isAllowed` | Can assign rank? |
83| `C_GuildInfo.SetGuildRankOrder(guid, rankOrder)` | — | Set member rank |
84| `C_GuildInfo.SetNote(guid, note, isPublic)` | — | Set public/officer note |
85| `C_GuildInfo.CanEditOfficerNote()` | `canEdit` | Can edit officer notes? |
86| `C_GuildInfo.CanSpeakInGuildChat()` | `canSpeak` | Can talk in guild chat? |
87| `C_GuildInfo.CanViewOfficerNote()` | `canView` | Can view officer notes? |
88| `C_GuildInfo.GetGuildRankOrder(guid)` | `rankOrder` | Member rank order |
89| `C_GuildInfo.MemberExistsByName(name)` | `exists` | Member in guild? |
90
91---
92
93## Guild Bank
94
95### Guild Bank Items
96
97| Function | Returns | Description |
98|----------|---------|-------------|
99| `GetGuildBankNumSlots(tab)` | `numSlots` | Slots in bank tab |
100| `GetGuildBankItemInfo(tab, slot)` | `texture, itemCount, locked, isFiltered, quality` | Item info |
101| `GetGuildBankItemLink(tab, slot)` | `link` | Item link |
102| `GetGuildBankItemValue(tab, slot)` | `value` | Item vendor value |
103| `AutoStoreGuildBankItem(tab, slot)` | — | Move to bags |
104| `SplitGuildBankItem(tab, slot, amount)` | — | Split stack |
105| `PickupGuildBankItem(tab, slot)` | — | Pick up item |
106| `QueryGuildBankTab(tab)` | — | Request tab data |
107| `QueryGuildBankLog(tab)` | — | Request tab log |
108| `QueryGuildBankText(tab)` | — | Request tab info text |
109
110### Guild Bank Tabs
111
112| Function | Returns | Description |
113|----------|---------|-------------|
114| `GetNumGuildBankTabs()` | `numTabs` | Number of bank tabs |
115| `GetGuildBankTabInfo(tab)` | `name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals` | Tab info |
116| `SetGuildBankTabInfo(tab, name, icon)` | — | Edit tab name/icon |
117| `BuyGuildBankTab()` | — | Purchase new tab |
118| `GetGuildBankTabCost()` | `cost` | Next tab cost |
119| `GetGuildBankText(tab)` | `text` | Tab info text |
120| `SetGuildBankText(tab, text)` | — | Set tab info text |
121| `CanGuildBankRepair()` | `canRepair` | Can repair from guild bank? |
122| `GetGuildBankWithdrawMoney()` | `amount` | Withdrawal allowance |
123| `GetGuildBankMoney()` | `money` | Guild bank gold |
124| `DepositGuildBankMoney(amount)` | — | Deposit gold |
125| `WithdrawGuildBankMoney(amount)` | — | Withdraw gold |
126| `CanWithdrawGuildBankMoney()` | `canWithdraw` | Can withdraw gold? |
127| `GetGuildBankMoneyTransaction(index)` | `type, name, amount, years, months, days, hours` | Money log entry |
128| `GetNumGuildBankMoneyTransactions()` | `numTransactions` | Money log count |
129
130### Guild Bank Log
131
132| Function | Returns | Description |
133|----------|---------|-------------|
134| `GetNumGuildBankTransactions(tab)` | `numTransactions` | Tab transaction count |
135| `GetGuildBankTransaction(tab, index)` | `type, name, itemLink, count, tab1, tab2, year, month, day, hour` | Transaction entry |
136
137---
138
139## Guild + Club Integration
140
141Guilds are represented as clubs with `Enum.ClubType.Guild` in the C_Club system:
142
143```lua
144-- Get guild as a club
145local clubs = C_Club.GetSubscribedClubs()
146for _, club in ipairs(clubs) do
147 if club.clubType == Enum.ClubType.Guild then
148 local guildClubId = club.clubId
149 -- Use C_Club functions for guild chat streams
150 local streams = C_Club.GetStreams(guildClubId)
151 break
152 end
153end
154```
155
156---
157
158## Common Patterns
159
160### Iterate Guild Roster
161
162```lua
163local function PrintGuildMembers()
164 local numMembers = GetNumGuildMembers()
165 for i = 1, numMembers do
166 local name, rankName, rankIndex, level, classDisplayName, zone,
167 publicNote, officerNote, isOnline = GetGuildRosterInfo(i)
168 if isOnline then
169 print(name, level, classDisplayName, zone)
170 end
171 end
172end
173
174-- Must request roster first
175C_GuildInfo.GuildRoster()
176```
177
178### Guild Bank Interaction
179
180```lua
181-- List items in guild bank tab 1
182local function ListGuildBankTab(tab)
183 local numSlots = GetGuildBankNumSlots(tab)
184 for slot = 1, numSlots do
185 local texture, itemCount, locked, isFiltered, quality = GetGuildBankItemInfo(tab, slot)
186 if texture then
187 local link = GetGuildBankItemLink(tab, slot)
188 print(link, "x" .. (itemCount or 1))
189 end
190 end
191end
192```
193
194---
195
196## Key Events
197
198| Event | Payload | Description |
199|-------|---------|-------------|
200| `GUILD_ROSTER_UPDATE` | canRequestRosterUpdate | Roster data refreshed |
201| `GUILD_RANKS_UPDATE` | — | Rank structure changed |
202| `GUILD_MOTD` | motdText | MOTD received |
203| `GUILD_NEWS_UPDATE` | — | Guild news updated |
204| `GUILD_INVITE_REQUEST` | inviter, guildName, guildAchievementPoints, oldGuildName, isNewGuild, ... | Guild invite received |
205| `GUILD_INVITE_CANCEL` | — | Invite cancelled |
206| `PLAYER_GUILD_UPDATE` | unitTarget | Guild status changed |
207| `GUILD_TRADESKILL_UPDATE` | — | Guild tradeskill updated |
208| `GUILD_RECIPE_KNOWN_BY_MEMBERS` | — | Recipe query result |
209| `GUILDBANK_ITEM_LOCK_CHANGED` | — | Bank item lock changed |
210| `GUILDBANK_UPDATE_TABS` | — | Bank tabs updated |
211| `GUILDBANK_UPDATE_MONEY` | — | Bank money changed |
212| `GUILDBANK_UPDATE_TEXT` | tab | Bank info text updated |
213| `GUILDBANKBAGSLOTS_CHANGED` | — | Bank slots changed |
214| `GUILDBANKFRAME_OPENED` | — | Bank frame opened |
215| `GUILDBANKFRAME_CLOSED` | — | Bank frame closed |
216| `GUILDBANKLOG_UPDATE` | — | Bank log updated |
217
218---
219
220## Gotchas & Restrictions
221
2221. **Roster request required** — Call `C_GuildInfo.GuildRoster()` before reading roster. Data isn't always current.
2232. **Guild bank requires NPC** — Guild bank functions only work when at a guild bank NPC.
2243. **Permissions vary by rank** — Check permissions before attempting operations. `CanGuildBankRepair()`, `CanWithdrawGuildBankMoney()`, etc.
2254. **QueryGuildBankTab is async** — Must query each tab and wait for `GUILDBANK_UPDATE_TABS` before reading items.
2265. **Guild = Club** — Guild chat uses `C_Club` with `Enum.ClubType.Guild`. Use `C_Club.SendMessage()` for guild chat.
2276. **Rank indices** — Rank 0 = Guild Master. Higher indices = lower ranks.
2287. **GetGuildRosterInfo index** — 1-based index into the roster. Not related to rank or any other ordering.
2298. **MOTD event timing** — `GUILD_MOTD` fires during login. Register early to catch it.