Social & Chat API (Retail — Patch 12.0.0)
Comprehensive reference for chat, social, clubs/communities, friends, voice, BattleNet, 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.
CRITICAL: 12.0.0 Instance Restrictions
-
SendAddonMessage() is BLOCKED inside instances (dungeons, raids, BGs, arenas)
-
Chat messages in instances may be secret values (KStrings)
-
Addon communication must use alternative patterns outside instances
-
C_ChatInfo.SendAddonMessage() and C_ChatInfo.SendAddonMessageLogged() throw errors in instances
Scope
-
C_ChatInfo — Chat system, channels, addon messages
-
Chat Frame Functions — SendChatMessage, chat filters, chat bubbles
-
C_Club — Communities / clubs system
-
C_ClubFinder — Club finder / recruitment
-
C_FriendList — Friends list management
-
C_BattleNet — BattleNet friends, presence, game accounts
-
C_VoiceChat — Voice chat system
-
C_SocialRestrictions — Social restriction checks
-
C_SocialQueue — Social queue system
-
C_RecentAllies — Recent allies tracking
-
C_PingManager — In-world ping system
-
C_TTSSettings — Text-to-speech settings
C_ChatInfo — Chat System
Key Functions
Function Returns Description
C_ChatInfo.SendAddonMessage(prefix, message, chatType [, target])
success
Send addon message (BLOCKED in instances)
C_ChatInfo.SendAddonMessageLogged(prefix, message, chatType [, target])
success
Send logged addon message (BLOCKED in instances)
C_ChatInfo.RegisterAddonMessagePrefix(prefix)
success
Register prefix for CHAT_MSG_ADDON
C_ChatInfo.IsAddonMessagePrefixRegistered(prefix)
isRegistered
Check if prefix registered
C_ChatInfo.GetRegisteredAddonMessagePrefixes()
prefixes
All registered prefixes
C_ChatInfo.GetChannelInfoFromIdentifier(identifier)
info
Channel info by identifier
C_ChatInfo.GetChannelRuleset(channelIndex)
rulesetID
Channel ruleset
C_ChatInfo.GetChannelRulesetForChannelID(channelID)
rulesetID
Ruleset by channel ID
C_ChatInfo.GetChannelShortcut(channelIndex)
shortcut
Channel shortcut
C_ChatInfo.GetChannelShortcutForChannelID(channelID)
shortcut
Shortcut by channel ID
C_ChatInfo.GetChatLineSenderGUID(lineID)
guid
GUID of message sender
C_ChatInfo.GetChatLineSenderName(lineID)
name
Name of message sender
C_ChatInfo.GetChatLineText(lineID)
text
Message text
C_ChatInfo.GetChatTypeByID(chatTypeID)
chatType
Chat type string from ID
C_ChatInfo.GetColorForChatType(chatType)
r, g, b
Default color for chat type
C_ChatInfo.GetNumActiveChannels()
numChannels
Number of active channels
C_ChatInfo.GetActiveChannelList()
channels
Active channel list
C_ChatInfo.IsChannelRegional(chatType)
isRegional
Is channel regional?
C_ChatInfo.IsChatLineCensored(lineID)
isCensored
Is message censored?
C_ChatInfo.IsPartyPositionCategory(category)
isPartyPosition
Is party position category?
C_ChatInfo.IsRegionalServiceAvailable()
isAvailable
Regional service available?
C_ChatInfo.IsValidChatLine(lineID)
isValid
Is line valid?
C_ChatInfo.ReplaceIconAndGroupExpressions(message)
text
Expand {rt1}, {skull}, etc.
C_ChatInfo.ResetDefaultZoneChannels()
— Reset zone channels
C_ChatInfo.SwapChatChannelsByChannelIndex(i1, i2)
— Swap channel order
Global Chat Functions
Function Returns Description
SendChatMessage(msg [, chatType [, languageID [, target]]])
— Send chat message
GetNumDisplayChannels()
numChannels
Number of displayed channels
GetChannelDisplayInfo(index)
name, header, collapsed, channelNumber, count, active, category, voiceEnabled, voiceActive
Channel display info
GetChannelName(idOrName)
id, name, instanceID, isCommChannel
Channel name/ID lookup
JoinChannelByName(name [, password [, frameID]])
type, name
Join a channel
LeaveChannelByName(name)
— Leave a channel
ListChannelByName(name)
— List channel members
GetChatWindowInfo(frameIndex)
name, fontSize, r, g, b, alpha, shown, locked, docked, uninteractable
Chat window info
SetChatWindowName(frameIndex, name)
— Set chat window name
LoggingChat(enable)
— Toggle chat logging
LoggingCombat(enable)
— Toggle combat logging
C_Club — Communities / Clubs
Club Management
Function Returns Description
C_Club.GetSubscribedClubs()
clubs
All joined clubs
C_Club.GetClubInfo(clubId)
info
Club info
C_Club.GetClubMembers(clubId [, streamId])
members
Club member list
C_Club.GetMemberInfo(clubId, memberId)
info
Member info
C_Club.GetClubStreamNotificationSettings(clubId)
settings
Stream notification settings
C_Club.CreateClub(name, shortName, description, clubType, avatarId)
— Create new club
C_Club.DestroyClub(clubId)
— Destroy a club
C_Club.EditClub(clubId, name, shortName, description, avatarId, bgColorIndex)
— Edit club
C_Club.LeaveClub(clubId)
— Leave a club
C_Club.AcceptInvitation(clubId)
— Accept club invitation
C_Club.DeclineInvitation(clubId)
— Decline club invitation
C_Club.GetInvitationsForSelf()
invitations
Pending invitations
C_Club.SendInvitation(clubId, memberId)
— Invite to club
Club Streams (Chat Channels within Clubs)
Function Returns Description
C_Club.GetStreams(clubId)
streams
All streams for club
C_Club.GetStreamInfo(clubId, streamId)
info
Stream info
C_Club.CreateStream(clubId, name, subject, leadersAndModeratorsOnly)
— Create stream
C_Club.DestroyStream(clubId, streamId)
— Remove stream
C_Club.EditStream(clubId, streamId, name, subject, leadersAndModeratorsOnly)
— Edit stream
C_Club.GetMessagesBefore(clubId, streamId, messageId, count)
messages
Fetch messages before ID
C_Club.GetMessagesAfter(clubId, streamId, messageId, count)
messages
Fetch messages after ID
C_Club.GetMessagesInRange(clubId, streamId, oldest, newest)
messages
Messages in range
C_Club.SendMessage(clubId, streamId, message)
— Send message to stream
C_Club.FocusStream(clubId, streamId)
— Focus a stream
C_Club.UnfocusStream(clubId, streamId)
— Unfocus a stream
C_Club.SetAutoAdvanceStreamViewMarker(clubId, streamId)
— Auto-advance view marker
Club Types
Enum Value Description
Enum.ClubType.BattleNet
0 BattleNet community
Enum.ClubType.Character
1 Character community
Enum.ClubType.Guild
2 Guild (treated as club)
Enum.ClubType.Other
3 Other
C_ClubFinder — Club Finder / Recruitment
Function Returns Description
C_ClubFinder.RequestClubsList(type, isLinkedSearch, searchText, specIDs)
— Search for clubs
C_ClubFinder.GetRecruitingClubInfoFromClubID(clubId)
recruitInfo
Recruitment info for club
C_ClubFinder.GetTotalMatchingCommunityListSize()
size
Total matching communities
C_ClubFinder.GetTotalMatchingGuildListSize()
size
Total matching guilds
C_ClubFinder.RequestPostingInformationFromClubId(clubId)
— Request posting info
C_ClubFinder.PostClub(clubId, minIlvl, minLevel, ...)
— Post club listing
C_ClubFinder.RequestApplicantList(type)
— Request applicant list
C_ClubFinder.GetApplicantInfoList()
applicants
Get applicants
C_ClubFinder.RespondToApplicant(clubFinderGUID, playerGUID, accepted, ...)
— Respond to applicant
C_FriendList — Friends
Function Returns Description
C_FriendList.GetNumFriends()
numFriends
Character friends count
C_FriendList.GetNumOnlineFriends()
numOnline
Online friends count
C_FriendList.GetFriendInfoByIndex(index)
info
Friend info by index
C_FriendList.GetFriendInfoByName(name)
info
Friend info by name
C_FriendList.GetFriendInfoByGUID(guid)
info
Friend info by GUID
C_FriendList.AddFriend(name [, notes])
— Add friend
C_FriendList.RemoveFriend(name)
— Remove friend
C_FriendList.SetFriendNotes(name, notes)
— Set friend notes
C_FriendList.AddOrRemoveFriend(name, notes)
— Toggle friend
C_FriendList.IsFriend(guid)
isFriend
Is GUID a friend?
C_FriendList.AddIgnore(name)
— Add to ignore list
C_FriendList.DelIgnore(name)
— Remove from ignore list
C_FriendList.GetNumIgnores()
numIgnores
Ignore list count
C_FriendList.GetIgnoreName(index)
name
Ignored player name
C_FriendList.IsIgnored(name)
isIgnored
Is player ignored?
C_FriendList.IsIgnoredByGUID(guid)
isIgnored
Is GUID ignored?
C_FriendList.ShowFriends()
— Refresh friends list
C_FriendList.GetSelectedFriend()
index
Selected friend index
C_FriendList.SetSelectedFriend(index)
— Select friend
C_BattleNet — BattleNet Friends
Function Returns Description
C_BattleNet.GetFriendAccountInfo(index)
accountInfo
BNet friend account info
C_BattleNet.GetFriendGameAccountInfo(index, gameAccountIndex)
gameAccountInfo
Game account info
C_BattleNet.GetFriendNumGameAccounts(index)
numGameAccounts
Game accounts for friend
C_BattleNet.GetAccountInfoByID(bnetAccountID)
accountInfo
Account info by ID
C_BattleNet.GetAccountInfoByGUID(guid)
accountInfo
Account info by GUID
C_BattleNet.GetGameAccountInfoByID(gameAccountID)
gameAccountInfo
Game account info
C_BattleNet.GetGameAccountInfoByGUID(guid)
gameAccountInfo
Game account by GUID
BNGetNumFriends()
numFriends, numOnline
BNet friend count
BNGetNumFriendInvites()
numInvites
Pending BNet invites
BNSendWhisper(bnetAccountID, message)
— Send BNet whisper
BNInviteFriend(bnetAccountID)
— Invite to group
BNRequestInviteFriend(presenceID)
— Request BNet friend add
BNRemoveFriend(bnetAccountID)
— Remove BNet friend
BNSetFriendNote(bnetAccountID, note)
— Set friend note
BNSetCustomMessage(message)
— Set BNet status message
BNConnected()
isConnected
Connected to BNet?
C_VoiceChat — Voice Chat
Function Returns Description
C_VoiceChat.GetActiveChannelID()
channelID
Active voice channel
C_VoiceChat.GetChannel(channelID)
channel
Channel info
C_VoiceChat.GetChannelForChannelType(channelType)
channel
Channel by type
C_VoiceChat.GetChannelForCommunityStream(clubId, streamId)
channel
Club voice channel
C_VoiceChat.GetMasterVolumeScale()
scale
Master volume
C_VoiceChat.SetMasterVolumeScale(scale)
— Set master volume
C_VoiceChat.GetInputVolume()
volume
Mic volume
C_VoiceChat.SetInputVolume(volume)
— Set mic volume
C_VoiceChat.GetOutputVolume()
volume
Speaker volume
C_VoiceChat.SetOutputVolume(volume)
— Set speaker volume
C_VoiceChat.IsMuted()
isMuted
Is muted?
C_VoiceChat.SetMuted(muted)
— Set mute
C_VoiceChat.IsDeafened()
isDeafened
Is deafened?
C_VoiceChat.SetDeafened(deafened)
— Set deafen
C_VoiceChat.IsSilenced()
isSilenced
Is silenced (by Blizzard)?
C_VoiceChat.ActivateChannel(channelID)
— Activate voice channel
C_VoiceChat.DeactivateChannel(channelID)
— Deactivate voice channel
C_VoiceChat.IsLoggedIn()
isLoggedIn
Voice chat logged in?
C_VoiceChat.Login()
— Log in to voice chat
C_VoiceChat.Logout()
— Log out of voice chat
C_VoiceChat.GetMemberName(memberID, channelID)
name
Voice member name
C_VoiceChat.GetMemberVolume(memberID, channelID)
volume
Member volume
C_VoiceChat.SetMemberVolume(memberID, channelID, volume)
— Set member volume
C_VoiceChat.IsMemberMuted(memberID, channelID)
isMuted
Is member muted?
C_VoiceChat.SetMemberMuted(memberID, channelID, muted)
— Mute member
C_SocialRestrictions
Function Returns Description
C_SocialRestrictions.IsChatDisabled()
isDisabled
Is chat restricted?
C_SocialRestrictions.IsMuted()
isMuted
Is player muted?
C_SocialRestrictions.IsSilenced()
isSilenced
Is player silenced?
C_SocialRestrictions.IsSquelched()
isSquelched
Is player squelched?
C_SocialQueue — Social Queue
Function Returns Description
C_SocialQueue.GetAllGroups()
groups
All social queue groups
C_SocialQueue.GetGroupInfo(guid)
info
Group queue info
C_SocialQueue.GetGroupMembers(guid)
members
Group member list
C_SocialQueue.GetGroupQueues(guid)
queues
Group queues
C_RecentAllies
Function Returns Description
C_RecentAllies.GetRecentAllies()
allies
Recent group allies
C_PingManager — Ping System
Function Returns Description
C_PingManager.GetPingTypeFromUIMouseButton(button)
pingType
Ping type from mouse button
C_PingManager.TogglePingListener(enabled)
— Toggle ping listening
C_TTSSettings — Text-to-Speech
Function Returns Description
C_TTSSettings.GetChatTypeEnabled(chatType)
enabled
Is TTS enabled for chat type?
C_TTSSettings.SetChatTypeEnabled(chatType, enabled)
— Toggle TTS for chat type
C_TTSSettings.GetSetting(setting)
value
Get TTS setting
C_TTSSettings.SetSetting(setting, value)
— Set TTS setting
C_TTSSettings.GetVoiceOptionID(voiceType)
optionID
Get voice option
Common Patterns
Register and Handle Addon Messages
local ADDON_PREFIX = "MyAddon" C_ChatInfo.RegisterAddonMessagePrefix(ADDON_PREFIX)
local frame = CreateFrame("Frame") frame:RegisterEvent("CHAT_MSG_ADDON") frame:SetScript("OnEvent", function(self, event, prefix, message, channel, sender) if prefix == ADDON_PREFIX then -- Process addon message print("Got message from", sender, ":", message) end end)
-- Send message (FAILS in instances in 12.0.0!) local function SendMessage(msg, target) if not IsInInstance() then C_ChatInfo.SendAddonMessage(ADDON_PREFIX, msg, "PARTY") else -- In-instance: cannot send addon messages -- Consider using encounter events or built-in APIs instead end end
Chat Message Filter
-- Filter chat messages to modify or suppress them ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", function(self, event, msg, author, ...) if msg:find("badword") then return true -- suppress the message end -- Modify the message local newMsg = msg:gsub("hello", "|cff00ff00hello|r") return false, newMsg, author, ... end)
Enumerate Friends
local function GetOnlineFriends() local friends = {} local numFriends = C_FriendList.GetNumFriends() for i = 1, numFriends do local info = C_FriendList.GetFriendInfoByIndex(i) if info and info.connected then table.insert(friends, info) end end -- Also check BNet friends local numBNet, numOnlineBNet = BNGetNumFriends() for i = 1, numBNet do local acctInfo = C_BattleNet.GetFriendAccountInfo(i) if acctInfo and acctInfo.gameAccountInfo and acctInfo.gameAccountInfo.isOnline then table.insert(friends, acctInfo) end end return friends end
Key Events
Event Payload Description
CHAT_MSG_SAY
msg, author, language, channelString, target, flags, ... /say message
CHAT_MSG_YELL
msg, author, ... /yell message
CHAT_MSG_PARTY
msg, author, ... Party message
CHAT_MSG_PARTY_LEADER
msg, author, ... Party leader message
CHAT_MSG_RAID
msg, author, ... Raid message
CHAT_MSG_RAID_LEADER
msg, author, ... Raid leader message
CHAT_MSG_GUILD
msg, author, ... Guild message
CHAT_MSG_OFFICER
msg, author, ... Guild officer message
CHAT_MSG_WHISPER
msg, author, ... Incoming whisper
CHAT_MSG_WHISPER_INFORM
msg, target, ... Outgoing whisper
CHAT_MSG_BN_WHISPER
msg, author, ... BNet whisper received
CHAT_MSG_BN_WHISPER_INFORM
msg, target, ... BNet whisper sent
CHAT_MSG_CHANNEL
msg, author, language, channelString, target, flags, zoneChannelID, channelIndex, channelBaseName, ... Channel message
CHAT_MSG_ADDON
prefix, message, channel, sender Addon message received
CHAT_MSG_ADDON_LOGGED
prefix, message, channel, sender Logged addon message
CHAT_MSG_SYSTEM
msg System message
CHAT_MSG_EMOTE
msg, author, ... Emote message
CHAT_MSG_TEXT_EMOTE
msg, author, ... /emote text
FRIENDLIST_UPDATE
— Friends list changed
BN_FRIEND_LIST_SIZE_CHANGED
— BNet list changed
BN_FRIEND_INFO_CHANGED
bnetAccountID BNet friend updated
BN_CONNECTED
— Connected to BNet
BN_DISCONNECTED
— Disconnected from BNet
CLUB_ADDED
clubId Joined a club
CLUB_REMOVED
clubId Left a club
CLUB_UPDATED
clubId Club info updated
CLUB_MESSAGE_ADDED
clubId, streamId, messageId New club message
CLUB_MEMBER_ADDED
clubId, memberId Member joined club
CLUB_MEMBER_REMOVED
clubId, memberId Member left club
CLUB_MEMBER_UPDATED
clubId, memberId Member info updated
VOICE_CHAT_CHANNEL_ACTIVATED
channelID Voice channel activated
VOICE_CHAT_CHANNEL_DEACTIVATED
channelID Voice channel deactivated
VOICE_CHAT_CHANNEL_MEMBER_ADDED
memberID, channelID Member joined voice
VOICE_CHAT_CHANNEL_MEMBER_REMOVED
memberID, channelID Left voice channel
Gotchas & Restrictions
-
SendAddonMessage BLOCKED in instances — C_ChatInfo.SendAddonMessage() and SendAddonMessageLogged() throw errors inside dungeons, raids, BGs, and arenas in 12.0.0.
-
Chat messages may be secret — In instances, chat message content from other players may be KStrings / secret values.
-
Addon prefix limit — Maximum 16 characters for addon message prefixes.
-
Addon message size limit — Maximum 255 characters per addon message.
-
Chat throttle — SendChatMessage() is throttled. Sending too fast will disconnect you.
-
Hardware event required — Some chat functions require a hardware event (mouse click/key press) to execute.
-
BNet friend list — BNGetFriendInfo() is deprecated. Use C_BattleNet.GetFriendAccountInfo() .
-
Club type Guild — Guilds are treated as clubs with Enum.ClubType.Guild . Use C_Club to interact with guild chat streams.
-
Voice chat login — Voice chat requires explicit login. Check C_VoiceChat.IsLoggedIn() before operations.
-
Chat filters — ChatFrame_AddMessageEventFilter filters operate on ALL instances of the event across all chat frames.