---
title: 'Events'
description: 'Gateway dispatch events sent by the Fluxer gateway.'
---
Dispatch events are sent by the gateway to notify the client of state changes. These events are sent with opcode `0` (DISPATCH) and include an event name and associated data.
## Event scopes
Events are delivered based on their scope:
| Scope | Description |
|-------|-------------|
| `session` | Sent only to the current session |
| `presence` | Sent to all sessions of the current user |
| `guild` | Sent to all users in a guild who have permission to receive it |
| `channel` | Sent based on channel type (guild channels use guild scope, DMs use presence scope) |
## Event reference
| Event | Scope | Description |
|-------|-------|-------------|
| [`READY`](#ready) | `session` | Contains initial state information sent after identifying. This is the first event received after a successful IDENTIFY. |
| [`RESUMED`](#resumed) | `session` | Response to a successful resume request. The client should replay any missed events from the buffer. |
| [`SESSIONS_REPLACE`](#sessions-replace) | `presence` | User sessions have been replaced. Sent when sessions are updated across devices. |
| [`USER_UPDATE`](#user-update) | `presence` | Properties about the current user changed. |
| [`USER_PINNED_DMS_UPDATE`](#user-pinned-dms-update) | `presence` | User pinned DMs have been updated. |
| [`USER_SETTINGS_UPDATE`](#user-settings-update) | `presence` | User settings have been updated. |
| [`USER_GUILD_SETTINGS_UPDATE`](#user-guild-settings-update) | `presence` | User guild settings have been updated. |
| [`USER_NOTE_UPDATE`](#user-note-update) | `presence` | User note for a target user has been updated. |
| [`RECENT_MENTION_DELETE`](#recent-mention-delete) | `presence` | A recent mention was deleted from the user's mentions list. |
| [`SAVED_MESSAGE_CREATE`](#saved-message-create) | `presence` | A message was saved to the user's saved messages. |
| [`SAVED_MESSAGE_DELETE`](#saved-message-delete) | `presence` | A saved message was deleted from the user's saved messages. |
| [`FAVORITE_MEME_CREATE`](#favorite-meme-create) | `presence` | A favourite meme was added to the user's collection. |
| [`FAVORITE_MEME_UPDATE`](#favorite-meme-update) | `presence` | A favourite meme was updated in the user's collection. |
| [`FAVORITE_MEME_DELETE`](#favorite-meme-delete) | `presence` | A favourite meme was deleted from the user's collection. |
| [`AUTH_SESSION_CHANGE`](#auth-session-change) | `presence` | Authentication session has changed. Sent when the user's token is rotated due to a security-sensitive operation like password change. |
| [`PRESENCE_UPDATE`](#presence-update) | `presence` | User presence was updated. Sent when a friend's or group DM member's status changes. |
| [`GUILD_CREATE`](#guild-create) | `guild` | Sent when a guild becomes available, when the user joins a new guild, or for lazy-loading of unavailable guilds. |
| [`GUILD_UPDATE`](#guild-update) | `guild` | Sent when a guild is updated. |
| [`GUILD_DELETE`](#guild-delete) | `guild` | Sent when a guild becomes unavailable or the user is removed from a guild. |
| [`GUILD_MEMBER_ADD`](#guild-member-add) | `guild` | Sent when a new user joins a guild. |
| [`GUILD_MEMBER_UPDATE`](#guild-member-update) | `guild` | Sent when a guild member is updated. |
| [`GUILD_MEMBER_REMOVE`](#guild-member-remove) | `guild` | Sent when a user is removed from a guild (leave, kick, or ban). |
| [`GUILD_ROLE_CREATE`](#guild-role-create) | `guild` | Sent when a guild role is created. |
| [`GUILD_ROLE_UPDATE`](#guild-role-update) | `guild` | Sent when a guild role is updated. |
| [`GUILD_ROLE_UPDATE_BULK`](#guild-role-update-bulk) | `guild` | Sent when multiple guild roles are updated (e.g. reordering or hoist position changes). |
| [`GUILD_ROLE_DELETE`](#guild-role-delete) | `guild` | Sent when a guild role is deleted. |
| [`GUILD_EMOJIS_UPDATE`](#guild-emojis-update) | `guild` | Sent when guild emojis were updated. |
| [`GUILD_STICKERS_UPDATE`](#guild-stickers-update) | `guild` | Sent when guild stickers were updated. |
| [`GUILD_BAN_ADD`](#guild-ban-add) | `guild` | Sent when a user is banned from a guild. |
| [`GUILD_BAN_REMOVE`](#guild-ban-remove) | `guild` | Sent when a user is unbanned from a guild. |
| [`CHANNEL_CREATE`](#channel-create) | `channel` | Sent when a new channel is created or opened for a user. |
| [`CHANNEL_UPDATE`](#channel-update) | `channel` | Sent when a channel is updated. |
| [`CHANNEL_UPDATE_BULK`](#channel-update-bulk) | `guild` | Sent when multiple channels are updated (e.g. reordering). |
| [`CHANNEL_DELETE`](#channel-delete) | `channel` | Sent when a channel is deleted or closed for a user. |
| [`CHANNEL_PINS_UPDATE`](#channel-pins-update) | `channel` | Sent when a message is pinned or unpinned. |
| [`CHANNEL_PINS_ACK`](#channel-pins-ack) | `presence` | Sent when channel pins were acknowledged by the user. |
| [`CHANNEL_RECIPIENT_ADD`](#channel-recipient-add) | `presence` | Sent when a user is added to a group DM. Dispatched to existing members only (the new user receives CHANNEL_CREATE instead). |
| [`CHANNEL_RECIPIENT_REMOVE`](#channel-recipient-remove) | `presence` | Sent when a user is removed from a group DM. |
| [`MESSAGE_CREATE`](#message-create) | `channel` | Sent when a message is created. |
| [`MESSAGE_UPDATE`](#message-update) | `channel` | Sent when a message is edited or updated (e.g., embeds added). |
| [`MESSAGE_DELETE`](#message-delete) | `channel` | Sent when a message is deleted. |
| [`MESSAGE_DELETE_BULK`](#message-delete-bulk) | `channel` | Sent when multiple messages are deleted at once. |
| [`MESSAGE_REACTION_ADD`](#message-reaction-add) | `channel` | Sent when a user adds a reaction to a message. |
| [`MESSAGE_REACTION_REMOVE`](#message-reaction-remove) | `channel` | Sent when a user removes a reaction from a message. |
| [`MESSAGE_REACTION_REMOVE_ALL`](#message-reaction-remove-all) | `channel` | Sent when all reactions are removed from a message. |
| [`MESSAGE_REACTION_REMOVE_EMOJI`](#message-reaction-remove-emoji) | `channel` | Sent when all reactions for a specific emoji are removed from a message. |
| [`MESSAGE_ACK`](#message-ack) | `presence` | Sent when a message is acknowledged (marked as read). |
| [`TYPING_START`](#typing-start) | `channel` | Sent when a user starts typing in a channel. |
| [`WEBHOOKS_UPDATE`](#webhooks-update) | `guild` | Sent when a guild channel webhook is created, updated, or deleted. Indicates that webhooks for the channel should be re-fetched. |
| [`INVITE_CREATE`](#invite-create) | `guild` | Sent when an invite to a channel or pack is created. The payload structure varies based on invite type. |
| [`INVITE_DELETE`](#invite-delete) | `guild` | Sent when an invite to a channel is deleted. |
| [`RELATIONSHIP_ADD`](#relationship-add) | `presence` | Sent when a user relationship is added (friend request sent/received, blocked). |
| [`RELATIONSHIP_UPDATE`](#relationship-update) | `presence` | Sent when a user relationship is updated (friend request accepted, nickname changed). |
| [`RELATIONSHIP_REMOVE`](#relationship-remove) | `presence` | Sent when a user relationship is removed (unfriended, unblocked, request cancelled, or replaced by a block). |
| [`VOICE_STATE_UPDATE`](#voice-state-update) | `guild` | Sent when a user's voice state is updated (join/leave/move voice channel, mute/deafen). |
| [`VOICE_SERVER_UPDATE`](#voice-server-update) | `presence` | Sent when the voice server for a guild or call is updated. |
| [`CALL_CREATE`](#call-create) | `presence` | Sent when a DM or group DM call is started. |
| [`CALL_UPDATE`](#call-update) | `presence` | Sent when a DM or group DM call is updated (participants join/leave, ringing state changes). |
| [`CALL_DELETE`](#call-delete) | `presence` | Sent when a DM or group DM call ends. |
## Gateway types
These types are used in gateway event payloads but are not exposed through the HTTP API.
### VoiceStateResponse
Represents a user's voice connection state.
| Field | Type | Description |
|-------|------|-------------|
| guild_id | ?snowflake | The guild ID this voice state is for, null if in a DM call |
| channel_id | ?snowflake | The channel ID the user is connected to, null if disconnected |
| user_id | snowflake | The user ID this voice state is for |
| connection_id? | ?string | The unique connection identifier |
| session_id? | string | The session ID for this voice state |
| member? | [GuildMemberResponse](/resources/guilds#guildmemberresponse) | The guild member data, if in a guild voice channel |
| mute | boolean | Whether the user is server muted |
| deaf | boolean | Whether the user is server deafened |
| self_mute | boolean | Whether the user has muted themselves |
| self_deaf | boolean | Whether the user has deafened themselves |
| self_video? | boolean | Whether the user has their camera enabled |
| self_stream? | boolean | Whether the user is streaming |
| is_mobile? | boolean | Whether the user is connected from a mobile device |
| viewer_stream_keys? | string[] | An array of stream keys the user is currently viewing |
| version? | integer | The voice state version for ordering updates |
### PresenceResponse
Represents a user's presence (online status and activity).
| Field | Type | Description |
|-------|------|-------------|
| user | [UserPartialResponse](/resources/users#userpartialresponse) | The user this presence is for |
| status | string | The current online status (online, idle, dnd, invisible, offline) |
| mobile | boolean | Whether the user is on a mobile device |
| afk | boolean | Whether the user is marked as AFK |
| custom_status | ?[CustomStatusResponse](#customstatusresponse) | The custom status set by the user |
### CustomStatusResponse
Represents a user's custom status.
| Field | Type | Description |
|-------|------|-------------|
| text | string | The custom status text |
| emoji_id | ?snowflake | The ID of the custom emoji used in the status |
| emoji_name | ?string | The name of the emoji used in the status |
| expires_at | ?string | ISO8601 timestamp when the custom status expires |
### SessionResponse
Represents a user's gateway session.
| Field | Type | Description |
|-------|------|-------------|
| session_id | string | The session identifier, or "all" for the aggregate session |
| status | string | The status for this session (online, idle, dnd, invisible, offline) |
| mobile | boolean | Whether this session is on a mobile device |
| afk | boolean | Whether this session is marked as AFK |
### ReadStateResponse
Represents read state for a channel.
| Field | Type | Description |
|-------|------|-------------|
| id | snowflake | The channel ID for this read state |
| mention_count | integer | Number of unread mentions in the channel |
| last_message_id | ?snowflake | The ID of the last message read |
| last_pin_timestamp | ?string | ISO8601 timestamp of the last pinned message acknowledged |
### GuildReadyResponse
Partial guild data sent in the READY event.
| Field | Type | Description |
|-------|------|-------------|
| id | snowflake | The unique identifier for this guild |
| unavailable? | boolean | Whether the guild is unavailable due to an outage |
| name? | string | The name of the guild |
| icon? | ?string | The hash of the guild icon |
| owner_id? | snowflake | The ID of the guild owner |
| member_count? | integer | Total number of members in the guild |
| lazy? | boolean | Whether this guild uses lazy loading |
| large? | boolean | Whether this guild is considered large |
| joined_at? | string | ISO8601 timestamp of when the user joined |
## Event details
### Session events
### `READY`
Contains initial state information sent after identifying. This is the first event received after a successful IDENTIFY.
**Scope:** `session`
**Dispatched by:** Gateway (internal)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| version | integer | Gateway protocol version |
| session_id | string | Session ID for resuming |
| user | [UserPrivateResponse](/resources/users#userprivateresponse) | The current user |
| guilds | [GuildReadyResponse](#guildreadyresponse)[] | Guilds the user is in (includes full guild data for non-bots, unavailable placeholders for bots) |
| private_channels? | [ChannelResponse](/resources/channels#channelresponse)[] | DM and group DM channels |
| relationships? | object[] | User relationships (friends, blocked, pending) with user objects stripped |
| users? | [UserPartialResponse](/resources/users#userpartialresponse)[] | Users referenced by relationships, channels, and guild members (deduped) |
| presences? | [PresenceResponse](#presenceresponse)[] | Presences of friends and group DM recipients |
| sessions? | object[] | Active gateway sessions for the current user |
| user_settings? | [UserSettingsResponse](/resources/users#usersettingsresponse) | User settings |
| user_guild_settings? | [UserGuildSettingsResponse](/resources/users#userguildsettingsresponse)[] | Per-guild notification settings |
| read_states? | [ReadStateResponse](#readstateresponse)[] | Channel read state (last read message IDs) |
| notes? | object | User notes keyed by user ID |
| country_code? | string | Two-letter country code based on IP geolocation |
| pinned_dms? | string[] | Array of pinned DM channel IDs |
| favorite_memes? | [FavoriteMemeResponse](/resources/saved_media#favoritememeresponse)[] | User's favourite memes |
| auth_session_id_hash? | string | Hash of the authentication session ID |
---
### `RESUMED`
Response to a successful resume request. The client should replay any missed events from the buffer.
**Scope:** `session`
**Dispatched by:** Gateway (internal)
**Payload:**
Null payload; presence of this event indicates successful resume
---
### `SESSIONS_REPLACE`
User sessions have been replaced. Sent when sessions are updated across devices.
**Scope:** `presence`
**Dispatched by:** Gateway (internal)
**Payload:**
Payload is an object[].
---
### User events
### `USER_UPDATE`
Properties about the current user changed.
**Scope:** `presence`
**Dispatched by:**
- [`PATCH /users/@me`](/api-reference/users/update-current-user-profile)
- `PATCH /users/@me/profile`
**Payload:**
See [UserPrivateResponse](/resources/users#userprivateresponse) for payload structure.
---
### `USER_PINNED_DMS_UPDATE`
User pinned DMs have been updated.
**Scope:** `presence`
**Dispatched by:**
- [`PUT /users/@me/channels/:channel_id/pin`](/api-reference/users/pin-direct-message-channel)
- [`DELETE /users/@me/channels/:channel_id/pin`](/api-reference/users/unpin-direct-message-channel)
**Payload:**
Payload is an string[].
---
### `USER_SETTINGS_UPDATE`
User settings have been updated.
**Scope:** `presence`
**Dispatched by:**
- [`PATCH /users/@me/settings`](/api-reference/users/update-current-user-settings)
**Payload:**
See [UserSettingsResponse](/resources/users#usersettingsresponse) for payload structure.
---
### `USER_GUILD_SETTINGS_UPDATE`
User guild settings have been updated.
**Scope:** `presence`
**Dispatched by:**
- [`PATCH /users/@me/guilds/:guild_id/settings`](/api-reference/users/update-guild-settings-for-user)
**Payload:**
See [UserGuildSettingsResponse](/resources/users#userguildsettingsresponse) for payload structure.
---
### `USER_NOTE_UPDATE`
User note for a target user has been updated.
**Scope:** `presence`
**Dispatched by:**
- [`PUT /users/@me/notes/:user_id`](/api-reference/users/set-note-on-user)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| id | string | User ID the note is about |
| note | string | The note content |
---
### User content events
### `RECENT_MENTION_DELETE`
A recent mention was deleted from the user's mentions list.
**Scope:** `presence`
**Dispatched by:**
- [`DELETE /users/@me/mentions/:message_id`](/api-reference/users/delete-mention)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| message_id | string | ID of the deleted mention's message |
---
### `SAVED_MESSAGE_CREATE`
A message was saved to the user's saved messages.
**Scope:** `presence`
**Dispatched by:**
- [`POST /users/@me/saved-messages`](/api-reference/users/save-message)
**Payload:**
See [MessageResponse](/resources/channels#messageresponse) for payload structure.
---
### `SAVED_MESSAGE_DELETE`
A saved message was deleted from the user's saved messages.
**Scope:** `presence`
**Dispatched by:**
- [`DELETE /users/@me/saved-messages/:message_id`](/api-reference/users/unsave-message)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| message_id | string | ID of the deleted saved message |
---
### Favourite memes events
### `FAVORITE_MEME_CREATE`
A favourite meme was added to the user's collection.
**Scope:** `presence`
**Dispatched by:**
- [`POST /users/@me/memes`](/api-reference/saved-media/create-meme-from-url)
- [`POST /channels/:channel_id/messages/:message_id/memes`](/api-reference/saved-media/create-meme-from-message)
**Payload:**
See [FavoriteMemeResponse](/resources/saved_media#favoritememeresponse) for payload structure.
---
### `FAVORITE_MEME_UPDATE`
A favourite meme was updated in the user's collection.
**Scope:** `presence`
**Dispatched by:**
- [`PATCH /users/@me/memes/:meme_id`](/api-reference/saved-media/update-favorite-meme)
**Payload:**
See [FavoriteMemeResponse](/resources/saved_media#favoritememeresponse) for payload structure.
---
### `FAVORITE_MEME_DELETE`
A favourite meme was deleted from the user's collection.
**Scope:** `presence`
**Dispatched by:**
- [`DELETE /users/@me/memes/:meme_id`](/api-reference/saved-media/delete-favorite-meme)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| meme_id | string | ID of the deleted favourite meme |
---
### Authentication events
### `AUTH_SESSION_CHANGE`
Authentication session has changed. Sent when the user's token is rotated due to a security-sensitive operation like password change.
**Scope:** `presence`
**Dispatched by:**
- [`PATCH /users/@me`](/api-reference/users/update-current-user-profile) (when password is changed)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| old_auth_session_id_hash | string | Base64url-encoded hash of the old session ID |
| new_auth_session_id_hash | string | Base64url-encoded hash of the new session ID |
| new_token | string | The new authentication token |
---
### Presence events
### `PRESENCE_UPDATE`
User presence was updated. Sent when a friend's or group DM member's status changes.
**Scope:** `presence`
**Dispatched by:** Gateway (internal)
Dispatched to users who are subscribed to the target user's presence (friends, group DM members)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| user | object | Normalized user object |
| status | string | User's current status |
| mobile | boolean | Whether the user has any mobile session active |
| afk | boolean | Whether the user is marked as AFK |
| custom_status | ?object | User's custom status (null if offline/invisible or not set) |
---
### Guild events
### `GUILD_CREATE`
Sent when a guild becomes available, when the user joins a new guild, or for lazy-loading of unavailable guilds.
**Scope:** `guild`
**Dispatched by:**
- [`POST /guilds`](/api-reference/guilds/create-guild)
- [`POST /invites/:invite_code`](/api-reference/invites/accept-invite)
- Gateway (internal)
**Payload:**
See [GuildResponse](/resources/guilds#guildresponse) for payload structure.
**Additional fields:**
| Field | Type | Description |
|-------|------|-------------|
| channels | [ChannelResponse](/resources/channels#channelresponse)[] | Channels in the guild |
| members | [GuildMemberResponse](/resources/guilds#guildmemberresponse)[] | Members in the guild (user field contains only id for deduplication) |
| presences | [PresenceResponse](#presenceresponse)[] | Presences of online members |
| voice_states | [VoiceStateResponse](#voicestateresponse)[] | Voice states of members in voice channels |
| joined_at | string | When the current user joined the guild |
---
### `GUILD_UPDATE`
Sent when a guild is updated.
**Scope:** `guild`
**Dispatched by:**
- [`PATCH /guilds/:guild_id`](/api-reference/guilds/update-guild-settings)
**Payload:**
See [GuildResponse](/resources/guilds#guildresponse) for payload structure.
---
### `GUILD_DELETE`
Sent when a guild becomes unavailable or the user is removed from a guild.
**Scope:** `guild`
**Dispatched by:**
- `DELETE /guilds/:guild_id`
- [`DELETE /users/@me/guilds/:guild_id`](/api-reference/guilds/leave-guild)
- Gateway (internal)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| id | string | Guild ID |
| unavailable? | boolean | True if the guild is unavailable due to an outage (not a leave/kick) |
---
### Guild members events
### `GUILD_MEMBER_ADD`
Sent when a new user joins a guild.
**Scope:** `guild`
**Dispatched by:**
- [`POST /invites/:invite_code`](/api-reference/invites/accept-invite)
- `PUT /guilds/:guild_id/members/:user_id`
**Payload:**
See [GuildMemberResponse](/resources/guilds#guildmemberresponse) for payload structure.
---
### `GUILD_MEMBER_UPDATE`
Sent when a guild member is updated.
**Scope:** `guild`
**Dispatched by:**
- [`PATCH /guilds/:guild_id/members/:user_id`](/api-reference/guilds/update-guild-member)
- [`PATCH /guilds/:guild_id/members/@me`](/api-reference/guilds/update-current-user-guild-member)
- [`PUT /guilds/:guild_id/members/:user_id/roles/:role_id`](/api-reference/guilds/add-role-to-guild-member)
- [`DELETE /guilds/:guild_id/members/:user_id/roles/:role_id`](/api-reference/guilds/remove-role-from-guild-member)
**Payload:**
See [GuildMemberResponse](/resources/guilds#guildmemberresponse) for payload structure.
---
### `GUILD_MEMBER_REMOVE`
Sent when a user is removed from a guild (leave, kick, or ban).
**Scope:** `guild`
**Dispatched by:**
- [`DELETE /guilds/:guild_id/members/:user_id`](/api-reference/guilds/remove-guild-member)
- [`DELETE /users/@me/guilds/:guild_id`](/api-reference/guilds/leave-guild)
- [`PUT /guilds/:guild_id/bans/:user_id`](/api-reference/guilds/ban-guild-member)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| user | object | Partial user object containing only the user ID |
---
### Guild roles events
### `GUILD_ROLE_CREATE`
Sent when a guild role is created.
**Scope:** `guild`
**Dispatched by:**
- [`POST /guilds/:guild_id/roles`](/api-reference/guilds/create-guild-role)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| role | [GuildRoleResponse](/resources/guilds#guildroleresponse) | The created role |
---
### `GUILD_ROLE_UPDATE`
Sent when a guild role is updated.
**Scope:** `guild`
**Dispatched by:**
- [`PATCH /guilds/:guild_id/roles/:role_id`](/api-reference/guilds/update-guild-role)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| role | [GuildRoleResponse](/resources/guilds#guildroleresponse) | The updated role |
---
### `GUILD_ROLE_UPDATE_BULK`
Sent when multiple guild roles are updated (e.g. reordering or hoist position changes).
**Scope:** `guild`
**Dispatched by:**
- [`PATCH /guilds/:guild_id/roles`](/api-reference/guilds/update-role-positions)
- [`PATCH /guilds/:guild_id/roles/hoist-positions`](/api-reference/guilds/update-role-hoist-positions)
- [`DELETE /guilds/:guild_id/roles/hoist-positions`](/api-reference/guilds/reset-role-hoist-positions)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| roles | [GuildRoleResponse](/resources/guilds#guildroleresponse)[] | The updated roles |
---
### `GUILD_ROLE_DELETE`
Sent when a guild role is deleted.
**Scope:** `guild`
**Dispatched by:**
- [`DELETE /guilds/:guild_id/roles/:role_id`](/api-reference/guilds/delete-guild-role)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| role_id | string | ID of the deleted role |
---
### Guild content events
### `GUILD_EMOJIS_UPDATE`
Sent when guild emojis were updated.
**Scope:** `guild`
**Dispatched by:**
- [`POST /guilds/:guild_id/emojis`](/api-reference/guilds/create-guild-emoji)
- [`POST /guilds/:guild_id/emojis/bulk`](/api-reference/guilds/bulk-create-guild-emojis)
- [`PATCH /guilds/:guild_id/emojis/:emoji_id`](/api-reference/guilds/update-guild-emoji)
- [`DELETE /guilds/:guild_id/emojis/:emoji_id`](/api-reference/guilds/delete-guild-emoji)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| emojis | [GuildEmojiResponse](/resources/guilds#guildemojiresponse)[] | Array of all emojis in the guild |
---
### `GUILD_STICKERS_UPDATE`
Sent when guild stickers were updated.
**Scope:** `guild`
**Dispatched by:**
- [`POST /guilds/:guild_id/stickers`](/api-reference/guilds/create-guild-sticker)
- [`POST /guilds/:guild_id/stickers/bulk`](/api-reference/guilds/bulk-create-guild-stickers)
- [`PATCH /guilds/:guild_id/stickers/:sticker_id`](/api-reference/guilds/update-guild-sticker)
- [`DELETE /guilds/:guild_id/stickers/:sticker_id`](/api-reference/guilds/delete-guild-sticker)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| stickers | [GuildStickerResponse](/resources/packs#guildstickerresponse)[] | Array of all stickers in the guild |
---
### Guild moderation events
### `GUILD_BAN_ADD`
Sent when a user is banned from a guild.
**Scope:** `guild`
**Dispatched by:**
- [`PUT /guilds/:guild_id/bans/:user_id`](/api-reference/guilds/ban-guild-member)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| guild_id | string | Guild ID |
| user | object | Partial user object |
---
### `GUILD_BAN_REMOVE`
Sent when a user is unbanned from a guild.
**Scope:** `guild`
**Dispatched by:**
- [`DELETE /guilds/:guild_id/bans/:user_id`](/api-reference/guilds/unban-guild-member)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| guild_id | string | Guild ID |
| user | object | Partial user object |
---
### Channel events
### `CHANNEL_CREATE`
Sent when a new channel is created or opened for a user.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope for each recipient
**Dispatched by:**
- [`POST /guilds/:guild_id/channels`](/api-reference/guilds/create-guild-channel)
- [`POST /users/@me/channels`](/api-reference/users/create-private-channel)
- [`PUT /channels/:channel_id/recipients/:user_id`](/api-reference/channels/add-recipient-to-group-dm)
- [`POST /invites/:invite_code`](/api-reference/invites/accept-invite) (group DM invites)
**Payload:**
See [ChannelResponse](/resources/channels#channelresponse) for payload structure.
---
### `CHANNEL_UPDATE`
Sent when a channel is updated.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope
**Dispatched by:**
- [`PATCH /channels/:channel_id`](/api-reference/channels/update-channel-settings)
- [`PUT /channels/:channel_id/permissions/:overwrite_id`](/api-reference/channels/set-permission-overwrite-for-channel)
- [`DELETE /channels/:channel_id/permissions/:overwrite_id`](/api-reference/channels/delete-permission-overwrite)
**Payload:**
See [ChannelResponse](/resources/channels#channelresponse) for payload structure.
---
### `CHANNEL_UPDATE_BULK`
Sent when multiple channels are updated (e.g. reordering).
**Scope:** `guild`
**Dispatched by:**
- [`PATCH /guilds/:guild_id/channels`](/api-reference/guilds/update-channel-positions)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channels | [ChannelResponse](/resources/channels#channelresponse)[] | Array of updated channels (filtered by user permissions) |
---
### `CHANNEL_DELETE`
Sent when a channel is deleted or closed for a user.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope for each recipient
**Dispatched by:**
- [`DELETE /channels/:channel_id`](/api-reference/channels/delete-a-channel)
- [`DELETE /channels/:channel_id/recipients/:user_id`](/api-reference/channels/remove-recipient-from-group-dm)
**Payload:**
See [ChannelResponse](/resources/channels#channelresponse) for payload structure.
---
### `CHANNEL_PINS_UPDATE`
Sent when a message is pinned or unpinned.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope
**Dispatched by:**
- [`PUT /channels/:channel_id/pins/:message_id`](/api-reference/channels/pin-a-message)
- [`DELETE /channels/:channel_id/pins/:message_id`](/api-reference/channels/unpin-a-message)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| last_pin_timestamp | ?string | ISO 8601 timestamp of the last pinned message, or null if no pins remain |
---
### `CHANNEL_PINS_ACK`
Sent when channel pins were acknowledged by the user.
**Scope:** `presence`
**Dispatched by:**
- [`POST /channels/:channel_id/pins/ack`](/api-reference/channels/acknowledge-new-pin-notifications)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| timestamp | string | Timestamp of acknowledgement |
---
### Group DM events
### `CHANNEL_RECIPIENT_ADD`
Sent when a user is added to a group DM. Dispatched to existing members only (the new user receives CHANNEL_CREATE instead).
**Scope:** `presence`
**Dispatched by:**
- [`PUT /channels/:channel_id/recipients/:user_id`](/api-reference/channels/add-recipient-to-group-dm)
- [`POST /invites/:invite_code`](/api-reference/invites/accept-invite) (group DM invites)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID of the group DM |
| user | [UserPartialResponse](/resources/users#userpartialresponse) | The user that was added |
---
### `CHANNEL_RECIPIENT_REMOVE`
Sent when a user is removed from a group DM.
**Scope:** `presence`
**Dispatched by:**
- [`DELETE /channels/:channel_id/recipients/:user_id`](/api-reference/channels/remove-recipient-from-group-dm)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID of the group DM |
| user | [UserPartialResponse](/resources/users#userpartialresponse) | The user that was removed |
---
### Message events
### `MESSAGE_CREATE`
Sent when a message is created.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope; personal notes dispatch to presence scope
**Dispatched by:**
- [`POST /channels/:channel_id/messages`](/api-reference/channels/send-a-message)
- [`POST /webhooks/:webhook_id/:token`](/api-reference/webhooks/execute-webhook)
- [`POST /webhooks/:webhook_id/:token/github`](/api-reference/webhooks/execute-github-webhook)
- [`POST /webhooks/:webhook_id/:token/slack`](/api-reference/webhooks/execute-slack-webhook)
- [`POST /webhooks/:webhook_id/:token/sentry`](/api-reference/webhooks/execute-sentry-webhook)
**Payload:**
See [MessageResponse](/resources/channels#messageresponse) for payload structure.
**Additional fields:**
| Field | Type | Description |
|-------|------|-------------|
| channel_type | integer | Type of the channel the message was sent in |
---
### `MESSAGE_UPDATE`
Sent when a message is edited or updated (e.g., embeds added).
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope
**Dispatched by:**
- [`PATCH /channels/:channel_id/messages/:message_id`](/api-reference/channels/edit-a-message)
- `internal:embed_processing`
- `internal:pin_update`
- `internal:reaction_update`
**Payload:**
See [MessageResponse](/resources/channels#messageresponse) for payload structure.
---
### `MESSAGE_DELETE`
Sent when a message is deleted.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope
**Dispatched by:**
- [`DELETE /channels/:channel_id/messages/:message_id`](/api-reference/channels/delete-a-message)
- `internal:admin_message_delete`
- `internal:bulk_delete_user_messages`
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| id | string | ID of the deleted message |
| channel_id | string | Channel ID |
| content? | string | Content of the deleted message (for audit purposes) |
| author_id? | string | ID of the message author |
---
### `MESSAGE_DELETE_BULK`
Sent when multiple messages are deleted at once.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope
**Dispatched by:**
- [`POST /channels/:channel_id/messages/bulk-delete`](/api-reference/channels/bulk-delete-messages)
- `internal:bulk_delete_user_messages`
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| ids | string[] | IDs of the deleted messages |
| channel_id | string | Channel ID |
---
### Message reactions events
### `MESSAGE_REACTION_ADD`
Sent when a user adds a reaction to a message.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope.
**Dispatched by:**
- [`PUT /channels/:channel_id/messages/:message_id/reactions/:emoji/@me`](/api-reference/channels/add-reaction-to-message)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| message_id | string | Message ID |
| emoji | object | The emoji used |
| user_id | string | ID of the user who reacted |
| session_id? | string | Session ID of the user who reacted |
| guild_id? | string | Guild ID (only present for guild channels) |
| member? | [GuildMemberResponse](/resources/guilds#guildmemberresponse) | Guild member object (only present for guild channels) |
---
### `MESSAGE_REACTION_REMOVE`
Sent when a user removes a reaction from a message.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope.
**Dispatched by:**
- [`DELETE /channels/:channel_id/messages/:message_id/reactions/:emoji/@me`](/api-reference/channels/remove-own-reaction-from-message)
- [`DELETE /channels/:channel_id/messages/:message_id/reactions/:emoji/:user_id`](/api-reference/channels/remove-reaction-from-message)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| message_id | string | Message ID |
| emoji | object | The emoji that was removed |
| user_id | string | ID of the user whose reaction was removed |
| session_id? | string | Session ID of the user whose reaction was removed |
| guild_id? | string | Guild ID (only present for guild channels) |
| member? | [GuildMemberResponse](/resources/guilds#guildmemberresponse) | Guild member object (only present for guild channels) |
---
### `MESSAGE_REACTION_REMOVE_ALL`
Sent when all reactions are removed from a message.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope.
**Dispatched by:**
- [`DELETE /channels/:channel_id/messages/:message_id/reactions`](/api-reference/channels/remove-all-reactions-from-message)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| message_id | string | Message ID |
---
### `MESSAGE_REACTION_REMOVE_EMOJI`
Sent when all reactions for a specific emoji are removed from a message.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope.
**Dispatched by:**
- [`DELETE /channels/:channel_id/messages/:message_id/reactions/:emoji`](/api-reference/channels/remove-all-reactions-with-emoji)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| message_id | string | Message ID |
| emoji | object | The emoji that was removed |
---
### Read state events
### `MESSAGE_ACK`
Sent when a message is acknowledged (marked as read).
**Scope:** `presence` – Always dispatched to the user's presence scope only
**Dispatched by:**
- [`POST /channels/:channel_id/messages/:message_id/ack`](/api-reference/channels/acknowledge-a-message)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| message_id | string | ID of the last read message |
| mention_count | integer | Remaining unread mention count after this acknowledgement |
| manual? | boolean | Whether this was a manual acknowledgement |
---
### Typing events
### `TYPING_START`
Sent when a user starts typing in a channel.
**Scope:** `channel` – Guild channels dispatch to guild scope; DMs dispatch to presence scope. May be disabled per-guild via guild settings.
**Dispatched by:**
- [`POST /channels/:channel_id/typing`](/api-reference/channels/indicate-typing-activity)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID |
| user_id | string | ID of the user who started typing |
| timestamp | integer | Unix timestamp (milliseconds) when typing started |
| guild_id? | string | Guild ID (only present for guild channels) |
| member? | [GuildMemberResponse](/resources/guilds#guildmemberresponse) | Guild member object (only present for guild channels) |
---
### Webhooks events
### `WEBHOOKS_UPDATE`
Sent when a guild channel webhook is created, updated, or deleted. Indicates that webhooks for the channel should be re-fetched.
**Scope:** `guild`
**Dispatched by:**
- [`POST /channels/:channel_id/webhooks`](/api-reference/webhooks/create-webhook)
- [`PATCH /webhooks/:webhook_id`](/api-reference/webhooks/update-webhook)
- [`DELETE /webhooks/:webhook_id`](/api-reference/webhooks/delete-webhook)
- [`PATCH /webhooks/:webhook_id/:token`](/api-reference/webhooks/update-webhook-with-token)
- [`DELETE /webhooks/:webhook_id/:token`](/api-reference/webhooks/delete-webhook-with-token)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID whose webhooks were updated |
---
### Invites events
### `INVITE_CREATE`
Sent when an invite to a channel or pack is created. The payload structure varies based on invite type.
**Scope:** `guild` – Guild scope for guild invites (MANAGE_CHANNELS permission required), presence scope for group DM invites (sent to all recipients)
**Dispatched by:**
- [`POST /channels/:channel_id/invites`](/api-reference/invites/create-channel-invite)
- [`POST /packs/:pack_id/invites`](/api-reference/invites/create-pack-invite)
**Payload:**
Empty payload.
---
### `INVITE_DELETE`
Sent when an invite to a channel is deleted.
**Scope:** `guild` – Guild scope for guild invites (MANAGE_CHANNELS permission required), presence scope for group DM invites (sent to all recipients)
**Dispatched by:**
- [`DELETE /invites/:invite_code`](/api-reference/invites/delete-invite)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| code | string | The invite code that was deleted |
| channel_id? | string | Channel ID the invite was for (present for guild and group DM invites) |
| guild_id? | string | Guild ID (present for guild invites only) |
---
### Relationships events
### `RELATIONSHIP_ADD`
Sent when a user relationship is added (friend request sent/received, blocked).
**Scope:** `presence`
**Dispatched by:**
- [`PUT /users/@me/relationships/:user_id`](/api-reference/users/accept-or-update-friend-request)
- [`POST /users/@me/relationships`](/api-reference/users/send-friend-request-by-tag)
- [`POST /users/@me/relationships/:user_id`](/api-reference/users/send-friend-request)
**Payload:**
See [RelationshipResponse](/resources/users#relationshipresponse) for payload structure.
---
### `RELATIONSHIP_UPDATE`
Sent when a user relationship is updated (friend request accepted, nickname changed).
**Scope:** `presence`
**Dispatched by:**
- [`PUT /users/@me/relationships/:user_id`](/api-reference/users/accept-or-update-friend-request)
- [`PATCH /users/@me/relationships/:user_id`](/api-reference/users/update-relationship-nickname)
**Payload:**
See [RelationshipResponse](/resources/users#relationshipresponse) for payload structure.
---
### `RELATIONSHIP_REMOVE`
Sent when a user relationship is removed (unfriended, unblocked, request cancelled, or replaced by a block).
**Scope:** `presence`
**Dispatched by:**
- [`DELETE /users/@me/relationships/:user_id`](/api-reference/users/remove-relationship)
- [`PUT /users/@me/relationships/:user_id`](/api-reference/users/accept-or-update-friend-request)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| id | string | ID of the user whose relationship was removed |
---
### Voice events
### `VOICE_STATE_UPDATE`
Sent when a user's voice state is updated (join/leave/move voice channel, mute/deafen).
**Scope:** `guild`
**Dispatched by:** Gateway (internal)
Triggered by client sending VOICE_STATE_UPDATE opcode (4)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| guild_id? | string | Guild ID (only present for guild voice, not for DM calls) |
| channel_id? | ?string | Channel ID the user is in (null if disconnected) |
| user_id | string | User ID |
| connection_id | string | Connection ID for this voice state |
| session_id? | string | Session ID for this voice state |
| member? | [GuildMemberResponse](/resources/guilds#guildmemberresponse) | Guild member object (if guild voice) |
| deaf | boolean | Whether the user is server deafened |
| mute | boolean | Whether the user is server muted |
| self_deaf | boolean | Whether the user is self deafened |
| self_mute | boolean | Whether the user is self muted |
| self_video | boolean | Whether the user's camera is on |
| self_stream | boolean | Whether the user is streaming |
| is_mobile | boolean | Whether the user is connected from a mobile device |
| viewer_stream_keys? | string[] | An array of stream keys the user is currently viewing |
| version | integer | Voice state version number, incremented on each update |
---
### `VOICE_SERVER_UPDATE`
Sent when the voice server for a guild or call is updated.
**Scope:** `presence`
**Dispatched by:** Gateway (internal)
Sent after joining a voice channel or when the voice server changes. For guild voice, includes guild_id. For DM calls, includes channel_id.
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| token | string | Voice connection token for authenticating with the voice server |
| endpoint | string | Voice server host (hostname:port) |
| connection_id | string | Connection ID for this voice connection |
| guild_id? | string | Guild ID (present for guild voice channels) |
| channel_id? | string | Channel ID (present for DM calls) |
---
### Calls events
### `CALL_CREATE`
Sent when a DM or group DM call is started.
**Scope:** `presence`
**Dispatched by:** Gateway (internal)
Dispatched to all recipients of the DM/group DM when a call is initiated
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID of the call |
| message_id | string | ID of the call message |
| region? | ?string | Voice region for the call |
| ringing | string[] | Array of user IDs currently being rung |
| voice_states | [VoiceStateResponse](#voicestateresponse)[] | Voice states of current participants in the call |
---
### `CALL_UPDATE`
Sent when a DM or group DM call is updated (participants join/leave, ringing state changes).
**Scope:** `presence`
**Dispatched by:** Gateway (internal)
Dispatched to all recipients when call state changes
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID of the call |
| message_id | string | ID of the call message |
| region? | ?string | Voice region for the call |
| ringing | string[] | Array of user IDs currently being rung |
| voice_states | [VoiceStateResponse](#voicestateresponse)[] | Voice states of current participants in the call |
---
### `CALL_DELETE`
Sent when a DM or group DM call ends.
**Scope:** `presence`
**Dispatched by:** Gateway (internal)
Dispatched to all recipients when the call terminates (all participants leave or timeout)
**Payload:**
| Field | Type | Description |
|-------|------|-------------|
| channel_id | string | Channel ID of the ended call |
---