Skip to content
Fluxer API

Forums

A forum channel holds posts, and every post is a public thread with its own first message. A media channel is a forum channel that can hide media download options. Neither accepts a message of its own.

A forum or media channel is a channel object of type 15 or 16 with the fields below.

FieldTypeDescription
topic?stringThe guidelines of the channel (1-4,096 characters), or null when none are set
last_message_id1?snowflakeThe ID of the newest post, or null when the channel has never had one
flagsintegerThe channel flags of the channel
available_tagsarray[forum tag object]The tags a post can apply (max 20)
default_reaction_emoji?default reaction objectThe reaction clients show on each post, or null when none is set
default_sort_order?integerThe default sort order of posts, or null when none is set
default_forum_layout?2integerThe default layout of posts
default_tag_setting3stringThe default tag matching of a post search
default_auto_archive_duration4?integerThe stored default auto archive duration, or null when none is set
default_thread_rate_limit_per_user5integerThe slowmode interval in seconds new threads inherit

1 A new post sets it to the post ID and emits no Channel Update

2 Present only on a forum channel. A forum channel that stores no layout reports 0

3 A channel that stores no value reports match_some

4 Fluxer does not apply it to a new post. A create request that omits auto_archive_duration gets 4320, as Auto archive durations states

5 Applies when the request sets no rate_limit_per_user. A channel that stores no value reports 0

rate_limit_per_user on the channel limits how often one member creates a post. A bot and a member with BYPASS_SLOWMODE are exempt, and a denied post returns 400 SLOWMODE_RATE_LIMITED.

Create message to the channel itself returns 400 CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL. Adding a reaction and pinning a message return the same code. List channel messages, listing pins, and the typing indicator return 400 INVALID_CHANNEL_TYPE.

{
"id": "1501314428688998300",
"type": 15,
"guild_id": "1501314428688990000",
"name": "help",
"position": 4,
"permission_overwrites": [],
"parent_id": null,
"last_message_id": "1501320250000000000",
"last_pin_timestamp": null,
"topic": "One question per post",
"nsfw": false,
"nsfw_override": null,
"content_warning_level": 0,
"content_warning_text": null,
"rate_limit_per_user": 0,
"flags": 16,
"default_auto_archive_duration": null,
"default_thread_rate_limit_per_user": 0,
"available_tags": [
{"id": "1501314428688998301", "name": "Solved", "moderated": false, "emoji_id": null, "emoji_name": null}
],
"default_reaction_emoji": null,
"default_sort_order": null,
"default_tag_setting": "match_some",
"default_forum_layout": 0
}

Start thread returns a forum post, which is a thread object with its first message.

FieldTypeDescription
messagemessage objectThe first message of the post, which has the ID of the post
ValueNameDescription
15GUILD_FORUMGuild channel that holds posts and no messages of its own
16GUILD_MEDIAForum channel that can hide media download options
ValueNameDescription
1 << 1PINNEDThe post is the pinned post of its channel
1 << 4REQUIRE_TAGA new post, or a change to the tags of a post, needs at least one tag
1 << 15HIDE_MEDIA_DOWNLOAD_OPTIONSClients hide the media download options of the channel

PINNED is set on a post. A channel holds at most one pinned post, and pinning a second returns 400 MAX_PINNED_THREADS_IN_FORUM. Archiving a post clears PINNED.

REQUIRE_TAG is set on a forum or media channel. A new post with no tag returns 400 FORUM_TAG_REQUIRED. Modify thread with an empty applied_tags on a post returns the same code.

HIDE_MEDIA_DOWNLOAD_OPTIONS is set on a media channel. On a forum channel it returns 400 HIDE_MEDIA_DOWNLOAD_OPTION_MEDIA_ONLY. Any other bit on a forum or media channel returns 400 INVALID_FORM_BODY.

FieldTypeDescription
idsnowflakeThe ID of the tag
namestringThe name of the tag (1-50 characters)
moderatedbooleanWhether only thread moderators can apply or remove the tag
emoji_id?snowflakeThe ID of a custom emoji of this guild, or null when the tag has none
emoji_name?stringA single Unicode emoji, or null when the tag has none

At most one of emoji_id and emoji_name is set. A tag name is unique within its channel, and the comparison is case-sensitive.

A member who is not a thread moderator and adds or removes a moderated tag on a post gets 403 MISSING_PERMISSIONS.

FieldTypeDescription
emoji_id?snowflakeThe ID of a custom emoji of this guild, or null for a Unicode emoji
emoji_name?stringA single Unicode emoji, or null for a custom emoji
ValueNameDescription
0LATEST_ACTIVITYSort posts by latest activity
1CREATION_TIMESort posts by creation time
ValueNameDescription
0DEFAULTNo layout is set
1LISTShow posts as a list
2GRIDShow posts as a grid of tiles
ValueDescription
match_someA post matches when it applies any of the searched tags
match_allA post matches when it applies every searched tag

Create guild channel with type 15 or 16, and Modify channel on a forum or media channel, accept these fields beside the common guild channel fields.

FieldTypeDescription
topic??stringThe guidelines of the channel (1-4,096 characters), or null to clear them
available_tags?1array[forum tag object]The complete tag set (max 20)
default_reaction_emoji??default reaction objectThe default reaction, or null to clear it
default_sort_order??integerThe sort order, or null to clear it
default_forum_layout?2?integerThe layout, or null to reset it to 0
default_tag_setting??stringThe tag matching default, or null to reset it to match_some
default_auto_archive_duration??integerThe stored default auto archive duration, which Fluxer does not apply to a new thread, or null to clear it
default_thread_rate_limit_per_user??integerThe slowmode interval in seconds new threads inherit (0-21,600), or null to clear it
flags?integerThe channel flags of the channel

1 An entry with id keeps that tag, and an entry without one creates a tag. A stored tag missing from the array is deleted

2 Accepted only on a forum channel. A media channel ignores it

A guild text or announcement channel accepts default_auto_archive_duration and default_thread_rate_limit_per_user as well.

available_tags with more than 20 entries returns 400 MAX_FORUM_TAGS, and a repeated name returns 400 FORUM_TAG_NAMES_MUST_BE_UNIQUE. An id the channel does not hold returns 404 UNKNOWN_FORUM_TAG. An emoji_id that is not an emoji of this guild returns 404 UNKNOWN_EMOJI, except on a kept tag whose emoji_id is unchanged. A tag or default reaction with both emoji_id and emoji_name, or with an emoji_name that is not a single Unicode emoji, returns 400 INVALID_FORM_BODY. While another tag change holds the channel, a request with available_tags returns 429 RESOURCE_LOCKED.

Fluxer rejects a change that leaves REQUIRE_TAG set with no unmoderated tag with 400 NO_TAGS_AVAILABLE_TO_NON_MODERATORS. Two concurrent Modify channel requests, one setting REQUIRE_TAG and one replacing available_tags, can each pass that check and together store that state. A post that names no tag then returns the same code to a caller who is not a thread moderator.

For a user request without the channel_threads client capability, Modify channel on a forum or media channel returns 404 UNKNOWN_CHANNEL. Create guild channel with type 15 or 16 returns 400 INVALID_FORM_BODY.

Create channel invite on a thread, a forum channel, or a media channel the caller can view returns 400 INVALID_CHANNEL_TYPE.

POST/v1/channels/{channel_id}/tagsBotAudit reason

Adds a tag to a forum or media channel. Requires MANAGE_CHANNELS. Returns the updated channel object on success. Emits a Channel Update Gateway event.

FieldTypeDescription
channel_idsnowflakeThe ID of the forum or media channel
FieldTypeDescription
namestringThe name of the tag (1-50 characters)
moderated?booleanWhether only thread moderators can apply or remove the tag (default false)
emoji_id??snowflakeThe ID of a custom emoji of this guild, or null for none
emoji_name??stringA single Unicode emoji (max 64 characters), or null for none
StatusBodyCondition
200channel objectTag was added
400error responseChannel is a guild channel other than a forum or media channel and the request returns INVALID_CHANNEL_TYPE
400error responseChannel has 20 tags and the request returns MAX_FORUM_TAGS
400error responseChannel has a tag with the name and the request returns FORUM_TAG_NAMES_MUST_BE_UNIQUE
400error responseThe new tag leaves REQUIRE_TAG with no unmoderated tag, returning NO_TAGS_AVAILABLE_TO_NON_MODERATORS
400error responseBody sets both emoji fields or an invalid emoji, returning INVALID_FORM_BODY
400error responseCaller needs an authenticator and the request returns TWO_FACTOR_REQUIRED
403error responseCaller lacks VIEW_CHANNEL or MANAGE_CHANNELS and the request returns MISSING_PERMISSIONS
404error responseChannel does not exist or is outside a guild, and the request returns NOT_FOUND
404error responseEmoji is not an emoji of this guild and the request returns UNKNOWN_EMOJI
429error responseAnother tag change holds the channel, returning RESOURCE_LOCKED

The body is the forum or media channel with its forum channel fields. It has no thread_metadata, message_count, total_message_sent, member_count, applied_tags, member_ids_preview, or member.

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

PUT/v1/channels/{channel_id}/tags/{tag_id}BotAudit reason

Replaces a tag of a forum or media channel. Requires MANAGE_CHANNELS. Returns the updated channel object on success. Emits a Channel Update Gateway event.

An omitted moderated is stored as false, and an omitted emoji field is stored as null.

FieldTypeDescription
channel_idsnowflakeThe ID of the forum or media channel
tag_idsnowflakeThe ID of the tag
FieldTypeDescription
namestringThe name of the tag (1-50 characters)
moderated?booleanWhether only thread moderators can apply or remove the tag (default false)
emoji_id??snowflakeThe ID of a custom emoji of this guild, or null for none
emoji_name??stringA single Unicode emoji (max 64 characters), or null for none
StatusBodyCondition
200channel objectTag was replaced
400error responseChannel is a guild channel other than a forum or media channel and the request returns INVALID_CHANNEL_TYPE
400error responseAnother tag has the name and the request returns FORUM_TAG_NAMES_MUST_BE_UNIQUE
400error responseThe change leaves REQUIRE_TAG with no unmoderated tag, returning NO_TAGS_AVAILABLE_TO_NON_MODERATORS
400error responseBody sets both emoji fields or an invalid emoji, returning INVALID_FORM_BODY
400error responseCaller needs an authenticator and the request returns TWO_FACTOR_REQUIRED
403error responseCaller lacks VIEW_CHANNEL or MANAGE_CHANNELS and the request returns MISSING_PERMISSIONS
404error responseChannel does not exist or is outside a guild, and the request returns NOT_FOUND
404error responseChannel holds no tag with tag_id and the request returns UNKNOWN_FORUM_TAG
404error responseThe new emoji_id is not an emoji of this guild and the request returns UNKNOWN_EMOJI
429error responseAnother tag change holds the channel, returning RESOURCE_LOCKED

The body is the forum or media channel with its forum channel fields. It has no thread_metadata, message_count, total_message_sent, member_count, applied_tags, member_ids_preview, or member.

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

DELETE/v1/channels/{channel_id}/tags/{tag_id}BotAudit reason

Removes a tag from a forum or media channel. Requires MANAGE_CHANNELS. Returns the updated channel object on success. Emits a Channel Update Gateway event.

Every thread object an HTTP route returns afterwards leaves the deleted tag out of applied_tags, except in the threads array of the guild audit log. A Gateway thread payload can keep the ID until the post next changes. A post drops the stored ID the next time its tags change.

FieldTypeDescription
channel_idsnowflakeThe ID of the forum or media channel
tag_idsnowflakeThe ID of the tag
StatusBodyCondition
200channel objectTag was removed
400error responseChannel is a guild channel other than a forum or media channel and the request returns INVALID_CHANNEL_TYPE
400error responseThe removal leaves REQUIRE_TAG with no unmoderated tag, returning NO_TAGS_AVAILABLE_TO_NON_MODERATORS
400error responseCaller needs an authenticator and the request returns TWO_FACTOR_REQUIRED
403error responseCaller lacks VIEW_CHANNEL or MANAGE_CHANNELS and the request returns MISSING_PERMISSIONS
404error responseChannel does not exist or is outside a guild, and the request returns NOT_FOUND
404error responseChannel holds no tag with tag_id and the request returns UNKNOWN_FORUM_TAG
429error responseAnother tag change holds the channel, returning RESOURCE_LOCKED

The body is the forum or media channel with its forum channel fields. It has no thread_metadata, message_count, total_message_sent, member_count, applied_tags, member_ids_preview, or member.

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

POST/v1/channels/{channel_id}/post-dataBot

Returns the owner and first message of each requested post in a forum or media channel. Requires READ_MESSAGE_HISTORY.

FieldTypeDescription
channel_idsnowflakeThe ID of the forum or media channel
FieldTypeDescription
thread_idsarray[snowflake]The IDs of the posts (1-100)
FieldTypeDescription
threads1map[snowflake, post data object]The post data keyed by post ID

1 Has one key for each distinct requested ID. An ID that is not a post of this channel maps to null owner and null first_message

FieldTypeDescription
owner1?guild member objectThe guild member who created the post
first_message2?message objectThe first message of the post

1 Null when the creator is no longer a member of the guild, and for a post a webhook created

2 Null when the first message was deleted

StatusBodyCondition
200post data mapPost data was returned
400error responseChannel is a guild channel other than a forum or media channel and the request returns INVALID_CHANNEL_TYPE
403error responseCaller lacks VIEW_CHANNEL or READ_MESSAGE_HISTORY 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 or is outside a guild, and the request returns NOT_FOUND

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

A webhook whose channel is a forum or media channel creates a post, or posts into an existing one. Execute webhook lists the thread_id, thread_name, and applied_tags fields and their error codes.

A locked thread refuses a webhook message with 400 THREAD_LOCKED. An archived thread that is not locked is unarchived by it, and Fluxer emits a Thread Update Gateway event. When the guild already has 1,000 active threads, the message returns 400 MAX_ACTIVE_THREADS and the thread stays archived. Editing a webhook message in an archived thread returns 400 THREAD_ARCHIVED, and in a locked thread 400 THREAD_LOCKED.

A channel notification override has flags, and only these two bits are stored.

ValueNameDescription
1 << 13NEW_FORUM_THREADS_OFFNo push notification for a new post in the channel
1 << 14NEW_FORUM_THREADS_ONA value Fluxer stores and does not read

A new post sends a push notification to a member when the channel resolves to the all messages notification level. A mute on the guild, on the parent category, or on the channel suppresses it, and so does NEW_FORUM_THREADS_OFF. Fluxer ignores flags in a user request without the channel_threads client capability, and the stored value stays.