Skip to content
Fluxer API

Channels

A channel is where a conversation happens, in text or in voice. A guild owns text, voice, category and link channels. Outside a guild, a channel is a direct message, a group direct message, or the personal notes channel.

Messages defines message content, and Guild channels defines guild-scoped listing, creation and reordering. Calls defines ringing, the region of a private call, and ending a call. Streams defines the stream keys and previews of a Go Live screen share.

A channel object always has its identity and type. Every other field is present only for the channel types that own it.

FieldTypeDescription
idsnowflakeThe ID of the channel
typeintegerThe type of the channel
guild_id?snowflakeThe ID of the guild, present only for a guild text, voice, category, or link channel
name?1stringThe name of the channel, present for a guild channel and for a group direct message
topic??stringThe topic of the channel, present only for a guild text or voice channel
url??stringThe destination URL, present only for a guild link channel
icon??stringThe icon hash, present only for a group direct message
owner_id??snowflakeThe ID of the owner, present only for a group direct message
position?2integerThe sort position, present only for a guild channel
parent_id??snowflakeThe ID of the parent category, null when the channel sits at the top level
bitrate?3?integerThe voice bitrate in bits per second, present only for a guild voice channel
user_limit?4?integerThe configured member occupancy limit, present only for a guild voice channel
voice_connection_limit?5?integerThe number of simultaneous voice connections one user may hold, present only for a guild voice channel
rtc_region?6?stringThe ID of the selected RTC region, present only for a guild voice channel
last_message_id??snowflakeThe ID of the most recent message, null when the channel has none
last_pin_timestamp??ISO8601 timestampThe time a message was most recently pinned, or null when nothing has ever been pinned
permission_overwrites?7array[permission overwrite object]The overwrites applied to this channel, present only for a guild channel
recipients?8array[partial user object]The other recipients of a direct message or group direct message (max 49)
nsfw?9booleanWhether the channel has its own age restriction, present only for a guild channel
nsfw_override?9?booleanWhether this channel overrides the inherited age restriction, or null when it inherits
content_warning_level?10integerThe content warning level stored on this channel, present only for a guild channel
content_warning_text?10?stringThe content warning text stored on this channel, or null when the channel inherits
rate_limit_per_user?11integerThe slowmode interval in seconds, present only for a guild text or voice channel
nicks?12map[snowflake, string]The group direct message nicknames keyed by the decimal user ID (each 1-32 characters)

1 Omitted when a group direct message stores no name, and never present on a direct message or on the personal notes channel

2 A channel that stores no position reports 0

3 A guild voice channel that stores no bitrate reports 0

4 The value 0 means no occupancy limit

5 A guild voice channel that stores no per-user connection limit reports the default 5

6 Null selects automatic routing. List RTC regions returns the available identifiers

7 Always present for a guild channel, and empty when the channel stores no overwrite

8 Excludes the authenticated user, omitted entirely when no other recipient remains, and never present on the personal notes channel

9 A channel with no explicit override reports nsfw false and nsfw_override null

10 A channel that inherits reports content_warning_level 0 and content_warning_text null

11 A channel that configures no slowmode reports 0

12 Omitted when the group stores no nickname. Clearing a nickname removes its key from the map

A category owns no parent_id. A client that reads the absent key as null sees a channel whose parent was cleared.

An age restriction and a content warning both resolve through this channel first, then the parent category, and finally the guild. A category has no parent category and resolves through itself and then the guild.

{
"id": "1501314428688998182",
"type": 0,
"guild_id": "1501314428688990000",
"name": "general",
"topic": "Anything goes",
"position": 3,
"parent_id": "1501314428688991111",
"permission_overwrites": [],
"nsfw": false,
"nsfw_override": null,
"content_warning_level": 0,
"content_warning_text": null,
"rate_limit_per_user": 0,
"last_message_id": "1501320000000000000",
"last_pin_timestamp": null
}
ValueNameDescription
0GUILD_TEXTGuild text channel
1DMDirect message channel between exactly two accounts
2GUILD_VOICEGuild voice channel, which also has messages, pins, and slowmode
3GROUP_DMGroup direct message channel
4GUILD_CATEGORYGuild category, which owns no parent and no messages
998GUILD_LINKGuild link channel, which has a destination URL and no messages
999DM_PERSONAL_NOTES1Personal notes channel

1 Its channel ID is exactly the owning user ID, and it has no recipient and no name. Fluxer creates it on first authenticated access

A permission overwrite changes the effective guild permissions for one role or one member in one channel. allow and deny are decimal strings because a permission mask exceeds the range a JSON number preserves. Permissions defines the individual flags.

FieldTypeDescription
id1snowflakeThe ID of the role or member
typeintegerThe permission overwrite type of the identifier in id
allow2decimal stringThe bitfield of permissions this overwrite allows
deny2decimal stringThe bitfield of permissions this overwrite denies

1 One identifier addresses one overwrite, so storing an overwrite for an identifier that already has one replaces it, even when the two name different types

2 Every bit outside the defined permission set is discarded on write, and both fields are 0 when the overwrite grants and denies nothing

No route bounds the number of overwrites a channel stores. Modify channel and Create guild channel accept a permission_overwrites array of any length, and no limit key caps it.

{
"id": "1501314428688990000",
"type": 0,
"allow": "3072",
"deny": "0"
}
ValueNameDescription
0ROLEOverwrite applies to a guild role
1MEMBEROverwrite applies to a guild member
ValueNameDescription
0INHERITInherit the content warning of the parent category and then of the guild
1CONTENT_WARNINGApply the content warning stored on this channel

The slowmode state combines the channel’s configured interval with the authenticated user’s next permitted send time.

FieldTypeDescription
rate_limit_per_userintegerThe configured slowmode interval in seconds, or 0 when slowmode is disabled
retry_after_ms1integerThe remaining delay in milliseconds before the user can send
next_send_allowed_at1?ISO8601 timestampThe next permitted send time, or null when no delay applies
can_bypass2booleanWhether the user bypasses slowmode through BYPASS_SLOWMODE

1 Both report no delay in a private channel, for an interval of 0, for a bot caller, and for a caller holding BYPASS_SLOWMODE

2 False whenever the delay is not accounted, so a bot caller and a private channel both report false even though neither is delayed

{
"rate_limit_per_user": 10,
"retry_after_ms": 4200,
"next_send_allowed_at": "2026-08-31T09:14:02.000Z",
"can_bypass": false
}

An RTC region names one voice routing target the deployment operates. Its identifier is the value a guild voice channel stores in rtc_region, and the name and emoji exist only for presentation.

FieldTypeDescription
idstringThe ID of the RTC region
namestringThe name shown for the region in a client
emojistringThe emoji the operator configured for the region
{
"id": "eu-central",
"name": "Frankfurt",
"emoji": "🇩🇪"
}
GET/v1/channels/{channel_id}Bot

Returns the channel object visible to the authenticated user.

  • A guild channel requires VIEW_CHANNEL.
  • A guild channel that resolves to an age restriction also requires a satisfied age verification.
  • A private channel requires current recipient access.
  • The personal notes channel requires ownership.

Fluxer enforces age verification only for a guild text, voice, or link channel. A guild category is never gated on it, even when it has the override its children inherit.

FieldTypeDescription
channel_idsnowflakeThe ID of the channel to return
StatusBodyCondition
200channel objectChannel was returned
403error responseCaller is not a guild member or lacks VIEW_CHANNEL, each returning MISSING_PERMISSIONS
403error responseThe guild exists but the caller’s membership state cannot be resolved and the request returns ACCESS_DENIED
403error responseThe resolved age restriction is not satisfied and the request returns NSFW_CONTENT_AGE_RESTRICTED
404error responseChannel does not exist, or the caller is not a recipient of the private channel, each returning UNKNOWN_CHANNEL, or the guild that owns the channel does not exist and the request returns UNKNOWN_GUILD

Requesting the personal notes channel of the authenticated user creates that channel when it does not already exist, and returns it directly without a Channel Create Dispatch.

100 requests per 10 seconds for each authenticated user and channel ID, on the channel:read::channel_id bucket.

GET/v1/channels/{channel_id}/slowmodeBot

Returns the authenticated user’s channel slowmode state object. The caller needs the same access as Get channel.

FieldTypeDescription
channel_idsnowflakeThe ID of the channel whose slowmode state is returned
StatusBodyCondition
200channel slowmode state objectState was returned
403error responseCaller is not a guild member or lacks VIEW_CHANNEL, each returning MISSING_PERMISSIONS
403error responseThe guild exists but the caller’s membership state cannot be resolved and the request returns ACCESS_DENIED
403error responseThe resolved age restriction is not satisfied and the request returns NSFW_CONTENT_AGE_RESTRICTED
404error responseChannel does not exist, or the caller is not a recipient of the private channel, each returning UNKNOWN_CHANNEL, or the guild that owns the channel does not exist and the request returns UNKNOWN_GUILD

The read does not advance the caller’s slowmode countdown. Requesting the personal notes channel of the authenticated user creates that channel when it does not already exist, with no Channel Create Dispatch.

100 requests per 10 seconds for each authenticated user and channel ID, on the channel:read::channel_id bucket.

GET/v1/channels/{channel_id}/rtc-regions

Returns the RTC region objects the authenticated user can select for a guild voice channel, in ascending display name order. User-only.

  • The caller needs the same access as Get channel.
  • The channel must be a guild voice channel.

Fluxer returns a region only when the caller passes every restriction configured for it and at least one active voice server in that region is also accessible to the caller. The array can be empty. Placement eligibility states the four stored fields those restrictions come from.

FieldTypeDescription
channel_idsnowflakeThe ID of the guild voice channel
StatusBodyCondition
200array[RTC region object]Available regions were returned
400error responseChannel is not a guild voice channel and the request returns INVALID_CHANNEL_TYPE
403error responseCaller is a bot or uses an OAuth2 bearer credential, or the guild exists but the caller’s membership state cannot be resolved, each returning ACCESS_DENIED
403error responseThe caller is not a guild member or lacks VIEW_CHANNEL and the request returns MISSING_PERMISSIONS
403error responseThe resolved age restriction is not satisfied and the request returns NSFW_CONTENT_AGE_RESTRICTED
404error responseChannel does not exist and the request returns UNKNOWN_CHANNEL, or the guild that owns the channel does not exist and the request returns UNKNOWN_GUILD

100 requests per 10 seconds for each authenticated user and channel ID, on the channel:read::channel_id bucket.

PATCH/v1/channels/{channel_id}Bot

Modifies a guild channel or a group direct message and returns the updated channel object. Emits a Channel Update Gateway event.

  • A guild channel requires VIEW_CHANNEL and MANAGE_CHANNELS in that channel.
  • Supplying permission_overwrites also requires MANAGE_ROLES in that channel.
  • Supplying rtc_region on a guild voice channel also requires UPDATE_RTC_REGION.
  • A caller who is not the guild owner cannot allow a permission bit outside their own effective permissions in that channel, and cannot remove a denied bit outside them either.
  • A group direct message requires the caller to be a current recipient.
  • Ownership transfer requires the caller to be the current owner, and so does setting another recipient’s nickname or clearing every nickname.

MANAGE_CHANNELS and MANAGE_ROLES are elevated permissions. Each also requires an enrolled multi-factor authenticator when the guild MFA level is elevated and the caller is not the guild owner. A caller who holds the permission without that authenticator receives 400 TWO_FACTOR_REQUIRED.

Set channel permission overwrite and Delete channel permission overwrite each mutate one overwrite and leave the rest untouched.

FieldTypeDescription
channel_idsnowflakeThe ID of the channel to modify
FieldTypeDescription
X-Fluxer-Features?1stringA comma-separated feature declaration

1 Read only when permission_overwrites is supplied. A feature-gated bit the declaration does not name is copied from the stored overwrite

The stored channel type selects the body variant, and a type field in the request is ignored. A direct message and the personal notes channel match no variant, and Fluxer rejects both with 400 INVALID_FORM_BODY.

Every field is optional, and an omitted field preserves its current value. The four guild variants share one field set, and a field the stored type does not own is accepted and discarded.

FieldTypeDescription
name?1?stringThe name of the channel (1-100 characters after normalisation)
topic?2?stringThe topic of the channel (1-1,024 characters), or null to clear it
url?3?stringThe destination of a guild link channel (1-2,048 characters, http or https), or null to clear it
parent_id?4?snowflakeThe ID of the parent category, where null or the snowflake 0 moves the channel to the top level
bitrate?5?integerThe voice bitrate in bits per second (8,000-320,000)
user_limit?5?integerThe voice occupancy limit (0-99, where 0 configures no limit)
voice_connection_limit?5?integerThe number of simultaneous voice connections one user may hold (1-100)
permission_overwrites?6array[permission overwrite object]The complete overwrite collection that replaces the stored one
nsfw_override?7?booleanWhether this channel overrides the inherited age restriction
nsfw?8?booleanWhether the channel is age restricted, a legacy switch superseded by nsfw_override
content_warning_level?9integerThe content warning level to store on this channel
content_warning_text?10?stringThe content warning text (max 200 characters)
rate_limit_per_user?11?integerThe slowmode interval in seconds (0-21,600) for a guild text or voice channel
rtc_region?12?stringThe ID of the RTC region (1-64 characters) for a guild voice channel, where null selects automatic routing

1 An explicit null preserves the current name. In a guild without flexible channel names, Fluxer lowercases a guild text channel name, replaces its whitespace with hyphens, and removes disallowed punctuation

2 An explicit null clears the stored topic

3 Applied only to a guild link channel. An explicit null clears the destination

4 A category rejects any parent with CATEGORIES_CANNOT_HAVE_PARENTS

5 Applied only to a guild voice channel, and an explicit null clears the stored value

6 Each entry has id, type, and the optional allow and deny masks, each defaulting to 0

7 An explicit null returns the channel to inheriting from its parent category and then its guild

8 nsfw_override wins when both are supplied. Alone, true maps to nsfw_override true and false maps to null

9 Only 0 and 1 are accepted, and 0 returns the channel to inheriting

10 Trimmed. A value empty after trimming, or an explicit null, clears the stored text

11 Applied only to a guild text or voice channel. An explicit null preserves the current interval

12 Applied only to a guild voice channel. Supplying the field at all, including as null, requires UPDATE_RTC_REGION

A url that is not an absolute http or https URL with a host returns 400 INVALID_FORM_BODY with the code INVALID_URL_FORMAT on the path url.

Three failures apply to parent_id. A parent that does not exist in the same guild returns 400 INVALID_FORM_BODY with the code INVALID_PARENT_CHANNEL on the path parent_id. A parent that is not a category returns PARENT_MUST_BE_CATEGORY the same way.

Naming a category other than the current parent also checks capacity. A full category returns 400 MAX_CATEGORY_CHANNELS with the ceiling it reached, which is the deployment’s max_channels_per_category limit and defaults to 50.

Fluxer accepts an overwrite mask in two encodings. A decimal string holds at most 9223372036854775807, and a larger one returns 400 INVALID_FORM_BODY with the code INTEGER_OUT_OF_INT64_RANGE. A JSON integer holds at most 9007199254740991, and a number outside the safe integer range returns INVALID_INTEGER_FORMAT.

Every bit outside the defined permission set is discarded. A feature-gated bit the X-Fluxer-Features declaration does not name is copied from the stored overwrite.

A non-null rtc_region names a region List RTC regions returns for this guild. Any other value returns 400 INVALID_FORM_BODY with the code INVALID_OR_RESTRICTED_RTC_REGION on the path rtc_region. A deployment that configures no voice topology validates no region and stores any accepted string.

Every field is optional, and an omitted field preserves its current value.

FieldTypeDescription
name??stringThe name of the group (1-100 characters after normalisation), or null to clear it
icon?1?base64 stringThe base64-encoded icon image (at most 13,981,014 encoded characters), or null to clear it
owner_id?2?snowflakeThe ID of the new owner
nicks?3?map[snowflake, ?string]The nicknames keyed by the decimal user ID (each 0-32 characters, or null)

1 Raw base64 or a data URL, with 1 through 13,981,014 characters after the prefix

2 An explicit null requests no transfer. The caller must be the current owner and the target a current recipient

3 An explicit null clears every nickname and requires ownership. A non-owner may address only their own key

Decoded icon bytes are at most the instance-configured avatar_max_size limit, which defaults to the 10 MiB ceiling of 10485760 bytes. A larger image is rejected on the path icon with the code IMAGE_SIZE_EXCEEDS_LIMIT. PNG, JPEG, WebP, GIF, APNG, AVIF, HEIC, HEIF, JXL, and SVG are accepted, and an animated AVIF is rejected on the same path with INVALID_IMAGE_FORMAT.

An owner_id naming an account that is not a current recipient returns 404 UNKNOWN_USER. A bot target returns 400 CANNOT_TRANSFER_OWNERSHIP_TO_BOT.

Fluxer trims a stored nickname, and a value that is null or empty after trimming clears that one nickname. A nicks key that is neither a current recipient nor the caller returns 404 UNKNOWN_USER.

StatusBodyCondition
200channel objectChannel was modified, or the submitted values already matched the stored state
403error responseA required permission, ownership, or permission bit authority is absent and the request returns MISSING_PERMISSIONS
403error responseA concurrent change removed the caller from the group direct message and the request returns MISSING_ACCESS
403error responseThe guild exists but the caller’s membership state cannot be resolved and the request returns ACCESS_DENIED
403error responseThe resolved age restriction is not satisfied and the request returns NSFW_CONTENT_AGE_RESTRICTED
404error responseChannel does not exist, or the caller is not a recipient of the group direct message, each returning UNKNOWN_CHANNEL
404error responseThe guild that owns the channel does not exist and the request returns UNKNOWN_GUILD
404error responseA referenced owner or nickname target is not a current recipient and the request returns UNKNOWN_USER

A guild channel change emits Channel Update to every session subscribed to the guild. Replacing a category’s permission overwrites also replaces them on each child whose overwrites still exactly match the category’s previous values, with one Dispatch per changed child. A child whose overwrites had diverged is left unchanged.

Changing rate_limit_per_user clears the channel’s current slowmode state so the new interval applies immediately. Changing rtc_region on a guild voice channel moves its active voice connections to the selected region.

A request that changes at least one field creates a channel update audit log entry with no reason. Supplying permission_overwrites also creates the overwrite audit log entries the change implies.

A group direct message change emits Channel Update to every current recipient. A name or successful icon change creates a system message delivered with Message Create, and replacing the icon permanently deletes the previous one. Ownership and nickname changes create no system message and no audit entry.

20 requests per 10 seconds for each authenticated user and channel ID, on the channel:update::channel_id bucket.

DELETE/v1/channels/{channel_id}Bot

Deletes a guild channel, closes a direct message, or removes the caller from a group direct message, and returns 204 with an empty body. Emits a Channel Delete Gateway event.

  • Deleting a guild channel requires VIEW_CHANNEL and MANAGE_CHANNELS.
  • Closing a direct message or leaving a group direct message requires current recipient access.
  • The personal notes channel cannot be deleted, and the request returns 400 CANNOT_EXECUTE_ON_DM.
  • Setting delete_messages also requires sudo mode for a user session, satisfied by a valid sudo proof or by the verification fields in the body. A bot token always satisfies it.

MANAGE_CHANNELS is an elevated permission. It also requires an enrolled multi-factor authenticator when the guild MFA level is elevated and the caller is not the guild owner. A caller who holds the permission without that authenticator receives 400 TWO_FACTOR_REQUIRED. The sudo requirement on delete_messages applies at every guild MFA level.

FieldTypeDescription
channel_idsnowflakeThe ID of the channel to delete, close, or leave
FieldTypeDescription
silent?1booleanWhether to suppress the leave system message of a group direct message (default false)
delete_messages?1booleanWhether to delete the caller’s own messages in this channel first (default false)

1 Only the exact trimmed values true, True, and 1 are true. An absent parameter and every other value, including TRUE and yes, are false

FieldTypeDescription
X-Fluxer-Sudo-Mode-JWT?1stringAn existing sudo mode proof, read when delete_messages is set

1 An accepted proof is echoed back in the same response header, and completing the MFA path issues a fresh one

The body is optional. Fluxer reads it only when delete_messages is set and no existing sudo proof satisfies the requirement.

FieldTypeDescription
password?1stringThe account password, offered as the sudo proof
mfa_method?2stringThe verification method, either totp or webauthn
mfa_code?stringThe authenticator code (1-32 characters), supplied with the totp method
webauthn_response?WebAuthn assertion objectThe WebAuthn assertion for sudo verification
webauthn_challenge?stringThe challenge (1-256 characters) bound to the sudo mode assertion

1 Accepted only for an account with no configured second factor. A rejected password returns 400 INVALID_FORM_BODY with the code INVALID_PASSWORD on the path password

2 Accepted only for an account with a configured second factor. A rejected code or assertion returns 400 INVALID_FORM_BODY with the code INVALID_MFA_CODE on the path mfa_code

An account that stores neither a password nor a second factor is verified without any proof.

StatusBodyCondition
204emptyChannel was deleted, closed, or left
400error responseTarget is the personal notes channel and the request returns CANNOT_EXECUTE_ON_DM
403error responseCaller is not a guild member or lacks VIEW_CHANNEL or MANAGE_CHANNELS, each returning MISSING_PERMISSIONS
403error responseSudo verification is required and the request returns SUDO_MODE_REQUIRED
403error responseA concurrent change removed the caller from the group direct message and the request returns MISSING_ACCESS
403error responseThe guild exists but the caller’s membership state cannot be resolved and the request returns ACCESS_DENIED
403error responseThe resolved age restriction is not satisfied and the request returns NSFW_CONTENT_AGE_RESTRICTED
404error responseChannel does not exist, or the caller is not a recipient of the private channel, each returning UNKNOWN_CHANNEL, or the guild that owns the channel does not exist and the request returns UNKNOWN_GUILD

Deleting a guild category first clears the parent_id of every child channel and emits Channel Update for each one. The category itself is then deleted like any other guild channel.

Deleting a guild channel deletes its invites and webhooks, purges the stored attachments of its messages, deletes its messages, and removes those messages from search. Fluxer then emits Channel Delete to every session subscribed to the guild, records a channel delete audit log entry with the previous channel state and no reason, and removes the channel record. A guild that named the channel as its system, rules, or AFK channel has that reference cleared and emits Guild Update.

Closing a direct message marks the channel closed for the caller alone and emits Channel Delete to that caller. The channel, its messages, and the other recipient’s view are untouched.

Leaving a group direct message removes the caller from the recipient set, removes the caller’s nickname, and closes the channel for the caller. If the caller owned the group, ownership transfers to one of the remaining recipients chosen at random.

Remaining recipients receive Channel Recipient Remove, and unless silent is true also a removal system message through Message Create. The leaving caller receives Channel Delete. No Channel Update reports the ownership transfer or the removed nickname, so a client tracking owner_id or nicks must refetch the channel.

Leaving as the final recipient permanently deletes the channel’s messages and the channel record, with no system message.

Setting delete_messages deletes the caller’s authored messages in this channel after sudo verification and before the channel operation runs, and the response waits for that deletion to finish.

20 requests per 10 seconds for each authenticated user and channel ID, on the channel:delete::channel_id bucket.

PUT/v1/channels/{channel_id}/recipients/{user_id}Bot

Adds a user to a group direct message and returns 204 with an empty body. Emits a Channel Recipient Add Gateway event.

  • The caller must be a current recipient of the group.
  • The caller and the target must be friends, including when the caller is a bot.
  • The target’s group direct message admission policy must allow the caller.
  • An instance with CAPTCHA enabled also requires a CAPTCHA proof.

Fluxer evaluates the target’s admission policy in this order.

  1. A target that has never stored settings admits every caller.
  2. A nobody setting rejects every caller. An everyone setting admits every caller.
  3. A friends-only setting admits only a caller the target has as a friend.
  4. Otherwise Fluxer admits the caller through an existing friendship, then through a mutual friend when the friends-of-friends setting is enabled, and then through a mutual guild when the guild-members setting is enabled.
FieldTypeDescription
channel_idsnowflakeThe ID of the group direct message channel
user_idsnowflakeThe ID of the user to add
FieldTypeDescription
X-Captcha-Token?1stringA CAPTCHA proof
X-Captcha-Type?2stringThe CAPTCHA provider, either hcaptcha or turnstile

1 A missing proof returns 400 CAPTCHA_REQUIRED and a rejected proof returns 400 INVALID_CAPTCHA, as does a proof for a provider the instance holds no secret key for. CAPTCHA states when an instance skips verification

2 hcaptcha or turnstile selects that provider whether or not the instance configured it. The instance’s configured provider is used when the header is absent or has any other value

StatusBodyCondition
204emptyRecipient was added, or was already a recipient
400error responseCAPTCHA proof is missing or rejected, the caller and target are not friends and the request returns NOT_FRIENDS_WITH_USER
400error responseThe group is already full and the request returns MAX_GROUP_DM_RECIPIENTS
400error responseThe channel is not a group direct message and the request returns INVALID_CHANNEL_TYPE
403error responseCaller is not a recipient, or the target’s admission policy rejects the caller, each returning MISSING_ACCESS
404error responseChannel does not exist and the request returns UNKNOWN_CHANNEL

The MAX_GROUP_DM_RECIPIENTS body has max_recipients reporting the exact ceiling that was reached. That ceiling is the deployment’s max_group_dm_recipients limit resolved for the caller, and it defaults to 50.

A successful addition stores the new recipient set and opens the channel for the added user. The added user receives Channel Create, existing recipients receive Channel Recipient Add, and every recipient receives the addition system message through Message Create. Adding a user who is already a recipient changes nothing, consumes no capacity, and emits no Dispatch.

20 requests per 10 seconds for each authenticated user and channel ID, on the channel:update::channel_id bucket. The user:group_dm:recipient:add protection bucket adds 10 requests per hour for each authenticated user, and does not consume the global limit.

DELETE/v1/channels/{channel_id}/recipients/{user_id}Bot

Removes a user from a group direct message and returns 204 with an empty body. Emits a Channel Recipient Remove Gateway event.

  • The caller must be a current recipient.
  • A caller may remove themself regardless of ownership.
  • Removing another recipient requires ownership of the group.
  • Setting delete_messages takes effect only when user_id is the caller, and it then requires sudo verification on the same terms as Delete or leave channel.
FieldTypeDescription
channel_idsnowflakeThe ID of the group direct message channel
user_idsnowflakeThe ID of the recipient to remove
FieldTypeDescription
silent?1booleanWhether to suppress the recipient removal system message (default false)
delete_messages?1booleanWhether to delete the caller’s own messages in this channel before self-removal (default false)

1 Only the exact trimmed values true, True, and 1 are true. An absent parameter and every other value, including TRUE and yes, are false

FieldTypeDescription
X-Fluxer-Sudo-Mode-JWT?1stringAn existing sudo mode proof, read when delete_messages is set for self-removal

1 An accepted proof is echoed back in the same response header, and completing the MFA path issues a fresh one

The optional body has the same sudo verification fields as Delete or leave channel. Fluxer reads it only when a self-removal sets delete_messages and the request has no existing sudo proof.

StatusBodyCondition
204emptyRecipient was removed
400error responseChannel is not a group direct message and the request returns INVALID_CHANNEL_TYPE, or the target is not a recipient and the request returns INVALID_FORM_BODY with the code USER_NOT_IN_CHANNEL
403error responseCaller is not a recipient and the request returns MISSING_ACCESS
403error responseThe caller is not the owner while removing another recipient and the request returns MISSING_PERMISSIONS
403error responseSudo verification is required and the request returns SUDO_MODE_REQUIRED
404error responseChannel does not exist and the request returns UNKNOWN_CHANNEL

The removal has the same state and Dispatch effects as leaving through Delete or leave channel. It stores the reduced recipient set, removes the recipient’s nickname, and closes the channel for the recipient. When the removed recipient owned the group, ownership transfers to one of the remaining recipients chosen at random.

The removed recipient receives Channel Delete. Remaining recipients receive Channel Recipient Remove, and the removal system message through Message Create unless silent is true. No Channel Update reports the ownership transfer or the removed nickname.

Removing the final recipient permanently deletes the channel’s messages, removes them from search, and deletes the channel record, with no system message. Setting delete_messages on a self-removal deletes the caller’s messages in this channel before the removal runs.

20 requests per 10 seconds for each authenticated user and channel ID, on the channel:update::channel_id bucket.

PUT/v1/channels/{channel_id}/permissions/{overwrite_id}Bot

Creates or replaces one permission overwrite on a guild channel and returns 204 with an empty body. Requires MANAGE_ROLES in that channel. Emits a Channel Update Gateway event.

  • A caller without ADMINISTRATOR cannot allow a permission bit outside their own effective permissions in that channel, and cannot remove a denied bit outside them either.

The operation does not require VIEW_CHANNEL and never returns TWO_FACTOR_REQUIRED or NSFW_CONTENT_AGE_RESTRICTED.

FieldTypeDescription
channel_idsnowflakeThe ID of the guild channel
overwrite_idsnowflakeThe ID of the role or member the overwrite represents
FieldTypeDescription
X-Fluxer-Features?1stringA comma-separated feature declaration

1 A feature-gated bit the declaration does not name is copied from the stored overwrite, so the request can neither set nor clear it

FieldTypeDescription
type1integerThe permission overwrite type of overwrite_id
allow?2?decimal stringThe bitfield of permissions to allow (default 0)
deny?2?decimal stringThe bitfield of permissions to deny (default 0)

1 Only 0 and 1 are accepted

2 A decimal string of at most 9223372036854775807, or a JSON integer of at most 9007199254740991. An omitted or null value is treated as 0

A larger decimal string returns 400 INVALID_FORM_BODY with the code INTEGER_OUT_OF_INT64_RANGE. A JSON number outside the safe integer range returns INVALID_INTEGER_FORMAT, and so does a string that is not all digits. Every bit outside the defined permission set is discarded before the authority check and before the change is applied.

StatusBodyCondition
204emptyOverwrite was created or replaced
403error responseMANAGE_ROLES in the channel or permission bit authority is absent, each returning MISSING_PERMISSIONS
404error responseChannel does not exist, or is not a guild channel, each returning UNKNOWN_CHANNEL

Fluxer emits Channel Update to every session subscribed to the guild, including when the submitted overwrite exactly matches the stored one. When the channel is a category, every child whose overwrites exactly matched the category’s previous values receives the same replacement and its own Channel Update.

The operation records an overwrite create or update audit entry with no reason. An unchanged overwrite records no audit entry.

20 requests per 10 seconds for each authenticated user and channel ID, on the channel:update::channel_id bucket.

DELETE/v1/channels/{channel_id}/permissions/{overwrite_id}Bot

Deletes one permission overwrite from a guild channel and returns 204 with an empty body. Requires MANAGE_ROLES in that channel. Emits a Channel Update Gateway event.

  • A caller without ADMINISTRATOR must already hold every permission bit the removed overwrite denied.

The operation is idempotent. It does not require VIEW_CHANNEL and never returns TWO_FACTOR_REQUIRED or NSFW_CONTENT_AGE_RESTRICTED.

FieldTypeDescription
channel_idsnowflakeThe ID of the guild channel
overwrite_id1snowflakeThe ID of the role or member the overwrite represents

1 The identifier alone selects the overwrite. The request has no overwrite type

StatusBodyCondition
204emptyOverwrite was deleted, or no overwrite existed for the identifier
403error responseMANAGE_ROLES in the channel or permission bit authority is absent, each returning MISSING_PERMISSIONS
404error responseChannel does not exist, or is not a guild channel, each returning UNKNOWN_CHANNEL

Fluxer emits Channel Update to every session subscribed to the guild, including when the identifier names no existing overwrite. Removing an overwrite that exists also records an overwrite delete audit entry with the previous overwrite state and no reason. An identifier that names no existing overwrite records no audit entry. When the target channel is a category, propagation follows the same exact-match rule as overwrite replacement.

20 requests per 10 seconds for each authenticated user and channel ID, on the channel:update::channel_id bucket.