1---2name: wow-api-social-chat3description: Complete reference for WoW Retail Chat, Social, Club/Community, Friend List, Voice Chat, BattleNet, Ping, Social Queue, and Addon Messaging APIs. Covers C_ChatInfo, C_Club, C_ClubFinder, C_FriendList, C_BattleNet, C_VoiceChat, C_SocialRestrictions, C_SocialQueue, C_RecentAllies, C_PingManager, C_TTSSettings, ChatFrame functions, chat filters, addon message system, and 12.0.0 instance restrictions (SendAddonMessage blocked, chat messages may be secret). Use when working with chat output, chat channels, communities, friend lists, voice chat, BattleNet friends, addon communication, social features, or ping system. Use when this capability is needed.4---56# Social & Chat API (Retail — Patch 12.0.0)78Comprehensive reference for chat, social, clubs/communities, friends, voice, BattleNet, and related APIs.910> **Source:** https://warcraft.wiki.gg/wiki/World_of_Warcraft_API11> **Current as of:** Patch 12.0.0 (Build 65655) — January 28, 202612> **Scope:** Retail only.1314## CRITICAL: 12.0.0 Instance Restrictions1516- **`SendAddonMessage()` is BLOCKED inside instances** (dungeons, raids, BGs, arenas)17- Chat messages in instances may be **secret values** (KStrings)18- Addon communication must use alternative patterns outside instances19- `C_ChatInfo.SendAddonMessage()` and `C_ChatInfo.SendAddonMessageLogged()` throw errors in instances2021---2223## Scope2425- **C_ChatInfo** — Chat system, channels, addon messages26- **Chat Frame Functions** — SendChatMessage, chat filters, chat bubbles27- **C_Club** — Communities / clubs system28- **C_ClubFinder** — Club finder / recruitment29- **C_FriendList** — Friends list management30- **C_BattleNet** — BattleNet friends, presence, game accounts31- **C_VoiceChat** — Voice chat system32- **C_SocialRestrictions** — Social restriction checks33- **C_SocialQueue** — Social queue system34- **C_RecentAllies** — Recent allies tracking35- **C_PingManager** — In-world ping system36- **C_TTSSettings** — Text-to-speech settings3738---3940## C_ChatInfo — Chat System4142### Key Functions4344| Function | Returns | Description |45|----------|---------|-------------|46| `C_ChatInfo.SendAddonMessage(prefix, message, chatType [, target])` | `success` | Send addon message (BLOCKED in instances) |47| `C_ChatInfo.SendAddonMessageLogged(prefix, message, chatType [, target])` | `success` | Send logged addon message (BLOCKED in instances) |48| `C_ChatInfo.RegisterAddonMessagePrefix(prefix)` | `success` | Register prefix for CHAT_MSG_ADDON |49| `C_ChatInfo.IsAddonMessagePrefixRegistered(prefix)` | `isRegistered` | Check if prefix registered |50| `C_ChatInfo.GetRegisteredAddonMessagePrefixes()` | `prefixes` | All registered prefixes |51| `C_ChatInfo.GetChannelInfoFromIdentifier(identifier)` | `info` | Channel info by identifier |52| `C_ChatInfo.GetChannelRuleset(channelIndex)` | `rulesetID` | Channel ruleset |53| `C_ChatInfo.GetChannelRulesetForChannelID(channelID)` | `rulesetID` | Ruleset by channel ID |54| `C_ChatInfo.GetChannelShortcut(channelIndex)` | `shortcut` | Channel shortcut |55| `C_ChatInfo.GetChannelShortcutForChannelID(channelID)` | `shortcut` | Shortcut by channel ID |56| `C_ChatInfo.GetChatLineSenderGUID(lineID)` | `guid` | GUID of message sender |57| `C_ChatInfo.GetChatLineSenderName(lineID)` | `name` | Name of message sender |58| `C_ChatInfo.GetChatLineText(lineID)` | `text` | Message text |59| `C_ChatInfo.GetChatTypeByID(chatTypeID)` | `chatType` | Chat type string from ID |60| `C_ChatInfo.GetColorForChatType(chatType)` | `r, g, b` | Default color for chat type |61| `C_ChatInfo.GetNumActiveChannels()` | `numChannels` | Number of active channels |62| `C_ChatInfo.GetActiveChannelList()` | `channels` | Active channel list |63| `C_ChatInfo.IsChannelRegional(chatType)` | `isRegional` | Is channel regional? |64| `C_ChatInfo.IsChatLineCensored(lineID)` | `isCensored` | Is message censored? |65| `C_ChatInfo.IsPartyPositionCategory(category)` | `isPartyPosition` | Is party position category? |66| `C_ChatInfo.IsRegionalServiceAvailable()` | `isAvailable` | Regional service available? |67| `C_ChatInfo.IsValidChatLine(lineID)` | `isValid` | Is line valid? |68| `C_ChatInfo.ReplaceIconAndGroupExpressions(message)` | `text` | Expand {rt1}, {skull}, etc. |69| `C_ChatInfo.ResetDefaultZoneChannels()` | — | Reset zone channels |70| `C_ChatInfo.SwapChatChannelsByChannelIndex(i1, i2)` | — | Swap channel order |7172### Global Chat Functions7374| Function | Returns | Description |75|----------|---------|-------------|76| `SendChatMessage(msg [, chatType [, languageID [, target]]])` | — | Send chat message |77| `GetNumDisplayChannels()` | `numChannels` | Number of displayed channels |78| `GetChannelDisplayInfo(index)` | `name, header, collapsed, channelNumber, count, active, category, voiceEnabled, voiceActive` | Channel display info |79| `GetChannelName(idOrName)` | `id, name, instanceID, isCommChannel` | Channel name/ID lookup |80| `JoinChannelByName(name [, password [, frameID]])` | `type, name` | Join a channel |81| `LeaveChannelByName(name)` | — | Leave a channel |82| `ListChannelByName(name)` | — | List channel members |83| `GetChatWindowInfo(frameIndex)` | `name, fontSize, r, g, b, alpha, shown, locked, docked, uninteractable` | Chat window info |84| `SetChatWindowName(frameIndex, name)` | — | Set chat window name |85| `LoggingChat(enable)` | — | Toggle chat logging |86| `LoggingCombat(enable)` | — | Toggle combat logging |8788---8990## C_Club — Communities / Clubs9192### Club Management9394| Function | Returns | Description |95|----------|---------|-------------|96| `C_Club.GetSubscribedClubs()` | `clubs` | All joined clubs |97| `C_Club.GetClubInfo(clubId)` | `info` | Club info |98| `C_Club.GetClubMembers(clubId [, streamId])` | `members` | Club member list |99| `C_Club.GetMemberInfo(clubId, memberId)` | `info` | Member info |100| `C_Club.GetClubStreamNotificationSettings(clubId)` | `settings` | Stream notification settings |101| `C_Club.CreateClub(name, shortName, description, clubType, avatarId)` | — | Create new club |102| `C_Club.DestroyClub(clubId)` | — | Destroy a club |103| `C_Club.EditClub(clubId, name, shortName, description, avatarId, bgColorIndex)` | — | Edit club |104| `C_Club.LeaveClub(clubId)` | — | Leave a club |105| `C_Club.AcceptInvitation(clubId)` | — | Accept club invitation |106| `C_Club.DeclineInvitation(clubId)` | — | Decline club invitation |107| `C_Club.GetInvitationsForSelf()` | `invitations` | Pending invitations |108| `C_Club.SendInvitation(clubId, memberId)` | — | Invite to club |109110### Club Streams (Chat Channels within Clubs)111112| Function | Returns | Description |113|----------|---------|-------------|114| `C_Club.GetStreams(clubId)` | `streams` | All streams for club |115| `C_Club.GetStreamInfo(clubId, streamId)` | `info` | Stream info |116| `C_Club.CreateStream(clubId, name, subject, leadersAndModeratorsOnly)` | — | Create stream |117| `C_Club.DestroyStream(clubId, streamId)` | — | Remove stream |118| `C_Club.EditStream(clubId, streamId, name, subject, leadersAndModeratorsOnly)` | — | Edit stream |119| `C_Club.GetMessagesBefore(clubId, streamId, messageId, count)` | `messages` | Fetch messages before ID |120| `C_Club.GetMessagesAfter(clubId, streamId, messageId, count)` | `messages` | Fetch messages after ID |121| `C_Club.GetMessagesInRange(clubId, streamId, oldest, newest)` | `messages` | Messages in range |122| `C_Club.SendMessage(clubId, streamId, message)` | — | Send message to stream |123| `C_Club.FocusStream(clubId, streamId)` | — | Focus a stream |124| `C_Club.UnfocusStream(clubId, streamId)` | — | Unfocus a stream |125| `C_Club.SetAutoAdvanceStreamViewMarker(clubId, streamId)` | — | Auto-advance view marker |126127### Club Types128129| Enum | Value | Description |130|------|-------|-------------|131| `Enum.ClubType.BattleNet` | 0 | BattleNet community |132| `Enum.ClubType.Character` | 1 | Character community |133| `Enum.ClubType.Guild` | 2 | Guild (treated as club) |134| `Enum.ClubType.Other` | 3 | Other |135136---137138## C_ClubFinder — Club Finder / Recruitment139140| Function | Returns | Description |141|----------|---------|-------------|142| `C_ClubFinder.RequestClubsList(type, isLinkedSearch, searchText, specIDs)` | — | Search for clubs |143| `C_ClubFinder.GetRecruitingClubInfoFromClubID(clubId)` | `recruitInfo` | Recruitment info for club |144| `C_ClubFinder.GetTotalMatchingCommunityListSize()` | `size` | Total matching communities |145| `C_ClubFinder.GetTotalMatchingGuildListSize()` | `size` | Total matching guilds |146| `C_ClubFinder.RequestPostingInformationFromClubId(clubId)` | — | Request posting info |147| `C_ClubFinder.PostClub(clubId, minIlvl, minLevel, ...)` | — | Post club listing |148| `C_ClubFinder.RequestApplicantList(type)` | — | Request applicant list |149| `C_ClubFinder.GetApplicantInfoList()` | `applicants` | Get applicants |150| `C_ClubFinder.RespondToApplicant(clubFinderGUID, playerGUID, accepted, ...)` | — | Respond to applicant |151152---153154## C_FriendList — Friends155156| Function | Returns | Description |157|----------|---------|-------------|158| `C_FriendList.GetNumFriends()` | `numFriends` | Character friends count |159| `C_FriendList.GetNumOnlineFriends()` | `numOnline` | Online friends count |160| `C_FriendList.GetFriendInfoByIndex(index)` | `info` | Friend info by index |161| `C_FriendList.GetFriendInfoByName(name)` | `info` | Friend info by name |162| `C_FriendList.GetFriendInfoByGUID(guid)` | `info` | Friend info by GUID |163| `C_FriendList.AddFriend(name [, notes])` | — | Add friend |164| `C_FriendList.RemoveFriend(name)` | — | Remove friend |165| `C_FriendList.SetFriendNotes(name, notes)` | — | Set friend notes |166| `C_FriendList.AddOrRemoveFriend(name, notes)` | — | Toggle friend |167| `C_FriendList.IsFriend(guid)` | `isFriend` | Is GUID a friend? |168| `C_FriendList.AddIgnore(name)` | — | Add to ignore list |169| `C_FriendList.DelIgnore(name)` | — | Remove from ignore list |170| `C_FriendList.GetNumIgnores()` | `numIgnores` | Ignore list count |171| `C_FriendList.GetIgnoreName(index)` | `name` | Ignored player name |172| `C_FriendList.IsIgnored(name)` | `isIgnored` | Is player ignored? |173| `C_FriendList.IsIgnoredByGUID(guid)` | `isIgnored` | Is GUID ignored? |174| `C_FriendList.ShowFriends()` | — | Refresh friends list |175| `C_FriendList.GetSelectedFriend()` | `index` | Selected friend index |176| `C_FriendList.SetSelectedFriend(index)` | — | Select friend |177178---179180## C_BattleNet — BattleNet Friends181182| Function | Returns | Description |183|----------|---------|-------------|184| `C_BattleNet.GetFriendAccountInfo(index)` | `accountInfo` | BNet friend account info |185| `C_BattleNet.GetFriendGameAccountInfo(index, gameAccountIndex)` | `gameAccountInfo` | Game account info |186| `C_BattleNet.GetFriendNumGameAccounts(index)` | `numGameAccounts` | Game accounts for friend |187| `C_BattleNet.GetAccountInfoByID(bnetAccountID)` | `accountInfo` | Account info by ID |188| `C_BattleNet.GetAccountInfoByGUID(guid)` | `accountInfo` | Account info by GUID |189| `C_BattleNet.GetGameAccountInfoByID(gameAccountID)` | `gameAccountInfo` | Game account info |190| `C_BattleNet.GetGameAccountInfoByGUID(guid)` | `gameAccountInfo` | Game account by GUID |191| `BNGetNumFriends()` | `numFriends, numOnline` | BNet friend count |192| `BNGetNumFriendInvites()` | `numInvites` | Pending BNet invites |193| `BNSendWhisper(bnetAccountID, message)` | — | Send BNet whisper |194| `BNInviteFriend(bnetAccountID)` | — | Invite to group |195| `BNRequestInviteFriend(presenceID)` | — | Request BNet friend add |196| `BNRemoveFriend(bnetAccountID)` | — | Remove BNet friend |197| `BNSetFriendNote(bnetAccountID, note)` | — | Set friend note |198| `BNSetCustomMessage(message)` | — | Set BNet status message |199| `BNConnected()` | `isConnected` | Connected to BNet? |200201---202203## C_VoiceChat — Voice Chat204205| Function | Returns | Description |206|----------|---------|-------------|207| `C_VoiceChat.GetActiveChannelID()` | `channelID` | Active voice channel |208| `C_VoiceChat.GetChannel(channelID)` | `channel` | Channel info |209| `C_VoiceChat.GetChannelForChannelType(channelType)` | `channel` | Channel by type |210| `C_VoiceChat.GetChannelForCommunityStream(clubId, streamId)` | `channel` | Club voice channel |211| `C_VoiceChat.GetMasterVolumeScale()` | `scale` | Master volume |212| `C_VoiceChat.SetMasterVolumeScale(scale)` | — | Set master volume |213| `C_VoiceChat.GetInputVolume()` | `volume` | Mic volume |214| `C_VoiceChat.SetInputVolume(volume)` | — | Set mic volume |215| `C_VoiceChat.GetOutputVolume()` | `volume` | Speaker volume |216| `C_VoiceChat.SetOutputVolume(volume)` | — | Set speaker volume |217| `C_VoiceChat.IsMuted()` | `isMuted` | Is muted? |218| `C_VoiceChat.SetMuted(muted)` | — | Set mute |219| `C_VoiceChat.IsDeafened()` | `isDeafened` | Is deafened? |220| `C_VoiceChat.SetDeafened(deafened)` | — | Set deafen |221| `C_VoiceChat.IsSilenced()` | `isSilenced` | Is silenced (by Blizzard)? |222| `C_VoiceChat.ActivateChannel(channelID)` | — | Activate voice channel |223| `C_VoiceChat.DeactivateChannel(channelID)` | — | Deactivate voice channel |224| `C_VoiceChat.IsLoggedIn()` | `isLoggedIn` | Voice chat logged in? |225| `C_VoiceChat.Login()` | — | Log in to voice chat |226| `C_VoiceChat.Logout()` | — | Log out of voice chat |227| `C_VoiceChat.GetMemberName(memberID, channelID)` | `name` | Voice member name |228| `C_VoiceChat.GetMemberVolume(memberID, channelID)` | `volume` | Member volume |229| `C_VoiceChat.SetMemberVolume(memberID, channelID, volume)` | — | Set member volume |230| `C_VoiceChat.IsMemberMuted(memberID, channelID)` | `isMuted` | Is member muted? |231| `C_VoiceChat.SetMemberMuted(memberID, channelID, muted)` | — | Mute member |232233---234235## C_SocialRestrictions236237| Function | Returns | Description |238|----------|---------|-------------|239| `C_SocialRestrictions.IsChatDisabled()` | `isDisabled` | Is chat restricted? |240| `C_SocialRestrictions.IsMuted()` | `isMuted` | Is player muted? |241| `C_SocialRestrictions.IsSilenced()` | `isSilenced` | Is player silenced? |242| `C_SocialRestrictions.IsSquelched()` | `isSquelched` | Is player squelched? |243244---245246## C_SocialQueue — Social Queue247248| Function | Returns | Description |249|----------|---------|-------------|250| `C_SocialQueue.GetAllGroups()` | `groups` | All social queue groups |251| `C_SocialQueue.GetGroupInfo(guid)` | `info` | Group queue info |252| `C_SocialQueue.GetGroupMembers(guid)` | `members` | Group member list |253| `C_SocialQueue.GetGroupQueues(guid)` | `queues` | Group queues |254255---256257## C_RecentAllies258259| Function | Returns | Description |260|----------|---------|-------------|261| `C_RecentAllies.GetRecentAllies()` | `allies` | Recent group allies |262263---264265## C_PingManager — Ping System266267| Function | Returns | Description |268|----------|---------|-------------|269| `C_PingManager.GetPingTypeFromUIMouseButton(button)` | `pingType` | Ping type from mouse button |270| `C_PingManager.TogglePingListener(enabled)` | — | Toggle ping listening |271272---273274## C_TTSSettings — Text-to-Speech275276| Function | Returns | Description |277|----------|---------|-------------|278| `C_TTSSettings.GetChatTypeEnabled(chatType)` | `enabled` | Is TTS enabled for chat type? |279| `C_TTSSettings.SetChatTypeEnabled(chatType, enabled)` | — | Toggle TTS for chat type |280| `C_TTSSettings.GetSetting(setting)` | `value` | Get TTS setting |281| `C_TTSSettings.SetSetting(setting, value)` | — | Set TTS setting |282| `C_TTSSettings.GetVoiceOptionID(voiceType)` | `optionID` | Get voice option |283284---285286## Common Patterns287288### Register and Handle Addon Messages289290```lua291local ADDON_PREFIX = "MyAddon"292C_ChatInfo.RegisterAddonMessagePrefix(ADDON_PREFIX)293294local frame = CreateFrame("Frame")295frame:RegisterEvent("CHAT_MSG_ADDON")296frame:SetScript("OnEvent", function(self, event, prefix, message, channel, sender)297 if prefix == ADDON_PREFIX then298 -- Process addon message299 print("Got message from", sender, ":", message)300 end301end)302303-- Send message (FAILS in instances in 12.0.0!)304local function SendMessage(msg, target)305 if not IsInInstance() then306 C_ChatInfo.SendAddonMessage(ADDON_PREFIX, msg, "PARTY")307 else308 -- In-instance: cannot send addon messages309 -- Consider using encounter events or built-in APIs instead310 end311end312```313314### Chat Message Filter315316```lua317-- Filter chat messages to modify or suppress them318ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", function(self, event, msg, author, ...)319 if msg:find("badword") then320 return true -- suppress the message321 end322 -- Modify the message323 local newMsg = msg:gsub("hello", "|cff00ff00hello|r")324 return false, newMsg, author, ...325end)326```327328### Enumerate Friends329330```lua331local function GetOnlineFriends()332 local friends = {}333 local numFriends = C_FriendList.GetNumFriends()334 for i = 1, numFriends do335 local info = C_FriendList.GetFriendInfoByIndex(i)336 if info and info.connected then337 table.insert(friends, info)338 end339 end340 -- Also check BNet friends341 local numBNet, numOnlineBNet = BNGetNumFriends()342 for i = 1, numBNet do343 local acctInfo = C_BattleNet.GetFriendAccountInfo(i)344 if acctInfo and acctInfo.gameAccountInfo and acctInfo.gameAccountInfo.isOnline then345 table.insert(friends, acctInfo)346 end347 end348 return friends349end350```351352---353354## Key Events355356| Event | Payload | Description |357|-------|---------|-------------|358| `CHAT_MSG_SAY` | msg, author, language, channelString, target, flags, ... | /say message |359| `CHAT_MSG_YELL` | msg, author, ... | /yell message |360| `CHAT_MSG_PARTY` | msg, author, ... | Party message |361| `CHAT_MSG_PARTY_LEADER` | msg, author, ... | Party leader message |362| `CHAT_MSG_RAID` | msg, author, ... | Raid message |363| `CHAT_MSG_RAID_LEADER` | msg, author, ... | Raid leader message |364| `CHAT_MSG_GUILD` | msg, author, ... | Guild message |365| `CHAT_MSG_OFFICER` | msg, author, ... | Guild officer message |366| `CHAT_MSG_WHISPER` | msg, author, ... | Incoming whisper |367| `CHAT_MSG_WHISPER_INFORM` | msg, target, ... | Outgoing whisper |368| `CHAT_MSG_BN_WHISPER` | msg, author, ... | BNet whisper received |369| `CHAT_MSG_BN_WHISPER_INFORM` | msg, target, ... | BNet whisper sent |370| `CHAT_MSG_CHANNEL` | msg, author, language, channelString, target, flags, zoneChannelID, channelIndex, channelBaseName, ... | Channel message |371| `CHAT_MSG_ADDON` | prefix, message, channel, sender | Addon message received |372| `CHAT_MSG_ADDON_LOGGED` | prefix, message, channel, sender | Logged addon message |373| `CHAT_MSG_SYSTEM` | msg | System message |374| `CHAT_MSG_EMOTE` | msg, author, ... | Emote message |375| `CHAT_MSG_TEXT_EMOTE` | msg, author, ... | /emote text |376| `FRIENDLIST_UPDATE` | — | Friends list changed |377| `BN_FRIEND_LIST_SIZE_CHANGED` | — | BNet list changed |378| `BN_FRIEND_INFO_CHANGED` | bnetAccountID | BNet friend updated |379| `BN_CONNECTED` | — | Connected to BNet |380| `BN_DISCONNECTED` | — | Disconnected from BNet |381| `CLUB_ADDED` | clubId | Joined a club |382| `CLUB_REMOVED` | clubId | Left a club |383| `CLUB_UPDATED` | clubId | Club info updated |384| `CLUB_MESSAGE_ADDED` | clubId, streamId, messageId | New club message |385| `CLUB_MEMBER_ADDED` | clubId, memberId | Member joined club |386| `CLUB_MEMBER_REMOVED` | clubId, memberId | Member left club |387| `CLUB_MEMBER_UPDATED` | clubId, memberId | Member info updated |388| `VOICE_CHAT_CHANNEL_ACTIVATED` | channelID | Voice channel activated |389| `VOICE_CHAT_CHANNEL_DEACTIVATED` | channelID | Voice channel deactivated |390| `VOICE_CHAT_CHANNEL_MEMBER_ADDED` | memberID, channelID | Member joined voice |391| `VOICE_CHAT_CHANNEL_MEMBER_REMOVED` | memberID, channelID | Left voice channel |392393---394395## Gotchas & Restrictions3963971. **SendAddonMessage BLOCKED in instances** — `C_ChatInfo.SendAddonMessage()` and `SendAddonMessageLogged()` throw errors inside dungeons, raids, BGs, and arenas in 12.0.0.3982. **Chat messages may be secret** — In instances, chat message content from other players may be KStrings / secret values.3993. **Addon prefix limit** — Maximum 16 characters for addon message prefixes.4004. **Addon message size limit** — Maximum 255 characters per addon message.4015. **Chat throttle** — `SendChatMessage()` is throttled. Sending too fast will disconnect you.4026. **Hardware event required** — Some chat functions require a hardware event (mouse click/key press) to execute.4037. **BNet friend list** — `BNGetFriendInfo()` is deprecated. Use `C_BattleNet.GetFriendAccountInfo()`.4048. **Club type Guild** — Guilds are treated as clubs with `Enum.ClubType.Guild`. Use `C_Club` to interact with guild chat streams.4059. **Voice chat login** — Voice chat requires explicit login. Check `C_VoiceChat.IsLoggedIn()` before operations.40610. **Chat filters** — `ChatFrame_AddMessageEventFilter` filters operate on ALL instances of the event across all chat frames.407408---409> Converted and distributed by [TomeVault](https://tomevault.io/claim/jburlison) — claim your Tome and manage your conversions.410<!-- tomevault:4.0:skill_md:2026-04-13 -->