Skip to content
Fluxer API

Threads

A thread is a channel inside a guild text, announcement, forum, or media channel that holds its own messages. A public thread or an announcement thread is visible to everyone who can view its parent. A private thread is visible to its members and to thread moderators.

Thread members defines joining, leaving, and member lists. Forums defines forum and media channels, where every thread is a post.

List active guild threads returns 404 NOT_FOUND to every user. Modify thread and Delete thread return 404 UNKNOWN_CHANNEL to a user without the capability.

A thread is a channel object with the thread fields below.

FieldTypeDescription
id1snowflakeThe ID of the thread
typeintegerThe thread type
guild_idsnowflakeThe ID of the guild
parent_idsnowflakeThe ID of the text, announcement, forum, or media channel the thread belongs to
owner_idsnowflakeThe ID of the user or webhook that created the thread
namestringThe name of the thread (1-100 characters)
last_message_id?snowflakeThe ID of the most recent message, or null when the thread has none
last_pin_timestamp?ISO8601 timestampThe time a message was most recently pinned, or null when nothing has ever been pinned
rate_limit_per_userintegerThe slowmode interval in seconds (0-21,600)
flags2integerThe channel flags of the thread
thread_metadatathread metadata objectThe archive and lock state of the thread
message_count3integerThe number of messages in the thread
total_message_sent4integerThe number of messages ever sent in the thread
member_countintegerThe number of thread members, capped at 50
applied_tags?5array[snowflake]The IDs of the forum tags applied to a post (max 5)
member_ids_preview?5array[snowflake]The IDs of the most recently joined members of a post, newest first (max 8)
member?6thread member objectThe thread member object of the caller

1 A thread started from a message has the ID of that message. The first message of a forum post has the ID of the post

2 Only PINNED is ever set, and only on a forum or media post

3 Excludes the first message of a forum post and every deleted message

4 Excludes the first message of a forum post. Deleting a message does not lower it

5 Present only on a thread whose parent is a forum or media channel. A Gateway payload has no member_ids_preview

6 Present only when the caller is a member, on Get channel, on Modify channel, on thread of a message, on Thread Create, and on the threads list of a guild in Ready, Guild Create, and Guild Sync

The schema also declares topic, url, icon, position, bitrate, user_limit, voice_connection_limit, rtc_region, permission_overwrites, recipients, nsfw, nsfw_override, content_warning_level, content_warning_text, nicks, default_auto_archive_duration, default_thread_rate_limit_per_user, available_tags, default_reaction_emoji, default_sort_order, default_forum_layout, and default_tag_setting. Fluxer never sends them on a thread. A thread uses the permissions of its parent as Thread permissions describes. An age restriction and a content warning resolve through the parent, then the parent category, and finally the guild.

{
"id": "1501320100000000000",
"type": 11,
"guild_id": "1501314428688990000",
"parent_id": "1501314428688998182",
"owner_id": "1501314428688992222",
"name": "Release checklist",
"last_message_id": "1501320500000000000",
"last_pin_timestamp": null,
"rate_limit_per_user": 0,
"flags": 0,
"thread_metadata": {
"archived": false,
"auto_archive_duration": 4320,
"archive_timestamp": "2026-05-05T20:30:05.018Z",
"locked": false,
"create_timestamp": "2026-05-05T20:30:05.018Z"
},
"message_count": 12,
"total_message_sent": 14,
"member_count": 3
}

The archive and lock state of a thread.

FieldTypeDescription
archivedbooleanWhether the thread is archived
auto_archive_durationintegerThe auto archive duration in minutes
archive_timestamp1ISO8601 timestampThe time the thread was last archived, unarchived, or given a new auto archive duration
lockedbooleanWhether only thread moderators can act in the thread
invitable?2booleanWhether a member who is not a thread moderator can add members who are not thread moderators
create_timestampISO8601 timestampThe time the thread was created

1 Equal to create_timestamp until the first of those changes

2 Present only on a private thread

ValueNameDescription
10ANNOUNCEMENT_THREADA thread in an announcement channel, visible to everyone who can view the parent
11PUBLIC_THREADA thread visible to everyone who can view the parent
12PRIVATE_THREADA thread in a guild text channel visible to its members and to thread moderators

A forum or media post is always PUBLIC_THREAD. Every thread in an announcement channel is ANNOUNCEMENT_THREAD, and an announcement channel holds no private threads.

Converting a guild text channel into an announcement channel turns each of its public threads into an announcement thread. Converting it back turns them into public threads again. Fluxer emits Thread Update with the new type for each active thread. A guild text channel with a private thread cannot become an announcement channel, and the request returns 400 CHANNEL_HAS_THREADS.

A message in an announcement thread cannot be published to following channels. Publishing returns 400 ANNOUNCEMENT_CHANNEL_REQUIRED. Publishing the message a thread started from works as for any other announcement. A copy delivered to a following channel starts with neither HAS_THREAD nor thread.

ValueDescription
60One hour
1440One day
4320Three days, the default
10080One week

A create request that omits auto_archive_duration gets 4320. Fluxer does not apply the default_auto_archive_duration of the parent.

Fluxer archives an active thread once auto_archive_duration minutes pass after the later of its last message and its archive_timestamp. It then emits Thread Update. A pinned forum post is never archived automatically. Archiving a pinned post clears its PINNED flag.

A guild holds at most 1,000 active threads. Creating or unarchiving a thread past that count returns 400 MAX_ACTIVE_THREADS.

Sending a message to an archived thread unarchives it. Fluxer emits Thread Update before the message. A locked thread returns 400 THREAD_LOCKED to a caller who is not a thread moderator for a message, a reaction, a pin, an edit, a join, or an added member.

An archived thread accepts no reaction, pin, edit, join, leave, or member change, and each returns 400 THREAD_ARCHIVED. Deleting a message in an archived thread is allowed.

A thread moderator is the guild owner, a member with ADMINISTRATOR, or a member holding MANAGE_THREADS in the parent who is not timed out.

A thread has no permission overwrites of its own. Fluxer computes permissions in the parent channel and then replaces SEND_MESSAGES with SEND_MESSAGES_IN_THREADS. Posting in a forum or media channel itself uses the unreplaced SEND_MESSAGES of that channel.

Permissions lists the four thread bits, MANAGE_THREADS, CREATE_PUBLIC_THREADS, CREATE_PRIVATE_THREADS, and SEND_MESSAGES_IN_THREADS. MANAGE_THREADS is an elevated permission. ADMINISTRATOR grants all four bits. The four bits are feature-gated.

These actions need an enrolled authenticator while the guild MFA level is elevated, unless the caller owns the guild. Without one, each returns 400 TWO_FACTOR_REQUIRED.

A timed-out member can read a thread and can join or leave one. A timed-out member who is neither the guild owner nor an administrator receives 403 COMMUNICATION_DISABLED for starting, modifying, or deleting a thread. The same applies to adding or removing a thread member, sending a message, adding a reaction, pinning, and editing their own message in a thread.

A caller who can view the parent but is neither a member nor a thread moderator receives 403 MISSING_ACCESS for a private thread. Losing access to the parent keeps the membership, and the member receives no event from the thread until access returns.

POST/v1/channels/{channel_id}/messages/{message_id}/threadsBotAudit reason

Starts a public thread from a message in a guild text channel, or an announcement thread from a message in an announcement channel. Requires CREATE_PUBLIC_THREADS and READ_MESSAGE_HISTORY. Returns a thread object on success. Emits a Thread Create Gateway event.

  • The channel must be a guild text or announcement channel.
  • The message must be a default message or a reply.
  • A message starts at most one thread.
FieldTypeDescription
channel_idsnowflakeThe ID of the guild text or announcement channel
message_idsnowflakeThe ID of the message to start the thread from
FieldTypeDescription
namestringThe name of the thread (1-100 characters)
auto_archive_duration?integerThe auto archive duration in minutes (default 4320)
rate_limit_per_user?integerThe slowmode interval in seconds (0-21,600)
location?stringA value Fluxer accepts and ignores (max 100 characters)

rate_limit_per_user defaults to the default_thread_rate_limit_per_user of the parent, or 0 when the parent has none.

StatusBodyCondition
201thread objectThread was started
400error responseChannel is not a guild text or announcement channel and the request returns INVALID_CHANNEL_TYPE
400error responseMessage is a system message and the request returns CANNOT_MODIFY_SYSTEM_WEBHOOK
400error responseMessage already started a thread and the request returns THREAD_ALREADY_CREATED_FOR_MESSAGE
400error responseGuild has 1,000 active threads and the request returns MAX_ACTIVE_THREADS
400error responseParent slowmode denies the thread and the request returns SLOWMODE_RATE_LIMITED
403error responseCaller lacks a required permission and the request returns MISSING_PERMISSIONS
403error responseCaller is timed out and the request returns COMMUNICATION_DISABLED
403error responseCaller account is limited and the request returns ACCOUNT_LIMITED
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
404error responseMessage does not exist and the request returns UNKNOWN_MESSAGE
  • Fluxer sets HAS_THREAD on the message and emits Message Update with thread.
  • Fluxer emits Message Create for the THREAD_STARTER_MESSAGE of the thread.
  • A source message outside the five most recent messages of the parent also produces a THREAD_CREATED message in the parent.
  • The caller becomes the first thread member.

Starting a thread uses the parent slowmode on its own counter. A bot and a member holding BYPASS_SLOWMODE are exempt.

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

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

Starts a thread with no source message, or creates a post in a forum or media channel. Returns a thread object, or a forum post object for a post, on success. Emits a Thread Create Gateway event.

  • In a guild text channel, a public thread requires CREATE_PUBLIC_THREADS and a private thread requires CREATE_PRIVATE_THREADS.
  • In an announcement channel, a thread requires CREATE_PUBLIC_THREADS. Both ANNOUNCEMENT_THREAD and PUBLIC_THREAD start an announcement thread, and PRIVATE_THREAD returns 400 INVALID_CHANNEL_TYPE.
  • In a guild text channel, ANNOUNCEMENT_THREAD returns 400 INVALID_CHANNEL_TYPE.
  • In a forum or media channel, a post requires SEND_MESSAGES in that channel.
FieldTypeDescription
channel_idsnowflakeThe ID of the guild text, announcement, forum, or media channel

The parent type selects the body. Either body can be sent as multipart form data with the JSON in a payload_json part. A forum or media post can also attach files in files[n] parts, as Create message describes.

rate_limit_per_user defaults to the default_thread_rate_limit_per_user of the parent, or 0 when the parent has none.

FieldTypeDescription
namestringThe name of the thread (1-100 characters)
typeintegerThe thread type to start
auto_archive_duration?integerThe auto archive duration in minutes (default 4320)
rate_limit_per_user?integerThe slowmode interval in seconds (0-21,600)
invitable?1booleanWhether a member who is not a thread moderator can add members who are not thread moderators (default true)
location?stringA value Fluxer accepts and ignores (max 100 characters)

1 Applies only to a private thread

FieldTypeDescription
namestringThe name of the post (1-100 characters)
messageobjectThe first message, with the fields of Create message other than message_reference, nonce, tts, and favorite_meme_id
applied_tags?1array[snowflake]The IDs of the forum tags to apply (max 5)
auto_archive_duration?integerThe auto archive duration in minutes (default 4320)
rate_limit_per_user?integerThe slowmode interval in seconds (0-21,600)
type?2integerThe thread type (11 only)
location?stringA value Fluxer accepts and ignores (max 100 characters)

1 Required when the channel has REQUIRE_TAG. A tag marked moderated needs a thread moderator

2 Any other value returns 400 INVALID_CHANNEL_TYPE

StatusBodyCondition
201forum post objectPost was created in a forum or media channel
201thread objectThread was started in a guild text or announcement channel
400error responseChannel cannot hold threads, or the thread type does not fit it, returning INVALID_CHANNEL_TYPE
400error responseGuild has 1,000 active threads and the request returns MAX_ACTIVE_THREADS
400error responseParent slowmode denies the thread and the request returns SLOWMODE_RATE_LIMITED
400error responseA forum post names no tag under REQUIRE_TAG and the request returns FORUM_TAG_REQUIRED
400error responseA forum post names no tag, with REQUIRE_TAG and no unmoderated tag, returning NO_TAGS_AVAILABLE_TO_NON_MODERATORS
403error responseCaller lacks a required permission or applies a moderated tag, returning MISSING_PERMISSIONS
403error responseCaller is timed out and the request returns COMMUNICATION_DISABLED
403error responseCaller account is limited and the request returns ACCOUNT_LIMITED
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
404error responseA tag does not exist and the request returns UNKNOWN_FORUM_TAG

In a channel with REQUIRE_TAG and no unmoderated tag, a caller who is not a thread moderator receives NO_TAGS_AVAILABLE_TO_NON_MODERATORS, and a thread moderator receives FORUM_TAG_REQUIRED. Creating and modifying a forum states how a channel reaches that state.

  • A public thread in a guild text channel and an announcement thread post a THREAD_CREATED message in the parent. A private thread and a forum post have none.
  • The first message of a forum post has the ID of the post, and a failed first message deletes the post again.
  • Creating a forum post marks the forum as read for a user caller.
  • The caller becomes the first thread member.

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

Modify channel on a thread takes the thread body below and returns the updated thread object. It emits a Thread Update Gateway event when a field changes.

  • name, auto_archive_duration, and archiving need the thread owner or a thread moderator.
  • locked needs a thread moderator, and the thread owner can set it to true.
  • rate_limit_per_user and flags need a thread moderator.
  • invitable needs the thread owner or a thread moderator.
  • Unarchiving needs a thread member, the thread owner, or a thread moderator, and needs a thread moderator when the thread is locked.
  • An archived thread accepts no other change unless the same body sets archived to false.
FieldTypeDescription
name?stringThe name of the thread (1-100 characters)
archived?1?booleanWhether the thread is archived
auto_archive_duration?integerThe auto archive duration in minutes
locked?1?booleanWhether only thread moderators can act in the thread
rate_limit_per_user?2?integerThe slowmode interval in seconds (0-21,600)
flags?3integerThe channel flags of the thread
applied_tags?4array[snowflake]The complete set of forum tag IDs (max 5)
invitable?5?booleanWhether a member who is not a thread moderator can add members who are not thread moderators

1 Null leaves the value unchanged

2 Null sets 0

3 Only PINNED on a forum or media post. Any other bit returns 400 INVALID_FORM_BODY

4 Only on a forum or media post, and only by the thread owner or a thread moderator

5 Applies only to a private thread. Null leaves the value unchanged

On a public thread in a guild text channel applied_tags returns 400 INVALID_CHANNEL_TYPE. A private or announcement thread ignores it.

Pinning a second post in one forum returns 400 MAX_PINNED_THREADS_IN_FORUM. Changing auto_archive_duration resets archive_timestamp. Renaming a thread posts a CHANNEL_NAME_CHANGE message in it.

StatusBodyCondition
200thread objectThread was modified
400error responseThread is archived and the body changes another field, returning THREAD_ARCHIVED
400error responseThread is locked and the caller is not a thread moderator, returning THREAD_LOCKED
400error responseUnarchiving would exceed 1,000 active threads and the request returns MAX_ACTIVE_THREADS
400error responseForum already has a pinned post and the request returns MAX_PINNED_THREADS_IN_FORUM
400error responseflags sets a bit the thread cannot hold and the request returns INVALID_FORM_BODY
400error responseapplied_tags is set on a public thread in a guild text channel, returning INVALID_CHANNEL_TYPE
400error responseapplied_tags is empty under REQUIRE_TAG and the request returns FORUM_TAG_REQUIRED
400error responseapplied_tags is empty, with REQUIRE_TAG and 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 the owner or moderator role the field needs and the request returns MISSING_PERMISSIONS
403error responseCaller is timed out and the request returns COMMUNICATION_DISABLED
404error responseA tag does not exist and the request returns UNKNOWN_FORUM_TAG

In a channel with REQUIRE_TAG and no unmoderated tag, a caller who is not a thread moderator receives NO_TAGS_AVAILABLE_TO_NON_MODERATORS, and a thread moderator receives FORUM_TAG_REQUIRED. Creating and modifying a forum states how a channel reaches that state.

Shared with Modify channel.

Delete or leave channel on a thread deletes it with its messages, attachments, and memberships. It requires a thread moderator and emits a Thread Delete Gateway event.

  • The source message of a thread started from a message loses HAS_THREAD, and Fluxer emits Message Update for it.
  • Fluxer removes the thread and its messages from search.
  • The guild audit log records action type 112.

Shared with Delete or leave channel.

GET/v1/guilds/{guild_id}/threads/activeBot

Returns every active thread in the guild that the bot can view, newest first. Requires a bot token.

A private thread is included when the bot is a member or a thread moderator in its parent.

FieldTypeDescription
guild_idsnowflakeThe ID of the guild
FieldTypeDescription
threadsarray[thread object]The active threads
membersarray[thread member object]A thread member object for each returned thread the bot joined
StatusBodyCondition
200active threads objectThreads were returned
403error responseBot is not a member of the guild and the request returns MISSING_PERMISSIONS
404error responseCaller is a user, and the request returns NOT_FOUND
404error responseGuild does not exist and the request returns UNKNOWN_GUILD

5 requests per 10 seconds for each authenticated user and guild ID, on the guild:threads:active::guild_id bucket.

GET/v1/channels/{channel_id}/threads/archived/publicBot

Returns the archived public threads of a guild text, announcement, forum, or media channel, most recently archived first. An announcement channel returns announcement threads. Requires READ_MESSAGE_HISTORY.

FieldTypeDescription
channel_idsnowflakeThe ID of the parent channel
FieldTypeDescription
before?ISO8601 timestampReturn threads archived before this time
limit?integerThe maximum number of threads to return (2-100, default 50)
FieldTypeDescription
threadsarray[thread object]The archived threads
membersarray[thread member object]A thread member object for each returned thread the caller joined
has_morebooleanWhether a later request can return more threads
StatusBodyCondition
200archived threads objectThreads were returned
400error responseChannel is not a thread parent and the request returns INVALID_CHANNEL_TYPE
403error responseCaller lacks READ_MESSAGE_HISTORY and the request returns MISSING_PERMISSIONS
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:threads:archived:list::channel_id bucket.

GET/v1/channels/{channel_id}/threads/archived/privateBot

Returns the archived private threads of a guild text channel, most recently archived first. Requires READ_MESSAGE_HISTORY and a thread moderator.

An announcement, forum, or media channel returns 400 INVALID_CHANNEL_TYPE.

FieldTypeDescription
channel_idsnowflakeThe ID of the guild text channel
FieldTypeDescription
before?ISO8601 timestampReturn threads archived before this time
limit?integerThe maximum number of threads to return (2-100, default 50)
FieldTypeDescription
threadsarray[thread object]The archived threads
membersarray[thread member object]A thread member object for each returned thread the caller joined
has_morebooleanWhether a later request can return more threads

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

GET/v1/channels/{channel_id}/users/@me/threads/archived/privateBot

Returns the archived private threads of a guild text channel that the caller joined, newest first. Requires READ_MESSAGE_HISTORY.

FieldTypeDescription
before?snowflakeReturn threads with an ID below this thread ID
limit?integerThe maximum number of threads to return (2-100, default 50)

An announcement, forum, or media channel returns 400 INVALID_CHANNEL_TYPE.

FieldTypeDescription
threadsarray[thread object]The archived threads
membersarray[thread member object]A thread member object for each returned thread the caller joined
has_morebooleanWhether a later request can return more threads

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

GET/v1/channels/{channel_id}/threads/searchBot

Searches the threads of a guild text, announcement, forum, or media channel by name and tag. Requires READ_MESSAGE_HISTORY.

A caller who is not a thread moderator finds public threads and the private threads they joined.

FieldTypeDescription
name?stringThe text to match in thread names (max 100 characters)
tag?1array[snowflake]The forum tag IDs to filter by, repeated once per tag (max 20)
tag_setting?stringmatch_some or match_all, defaulting to the default_tag_setting of the channel
archived?booleanWhether to return only archived or only active threads (default both)
sort_by?stringlast_message_time, archive_time, relevance, or creation_time (default last_message_time)
sort_order?stringasc or desc (default desc)
limit?integerThe maximum number of threads to return (1-25, default 25)
offset?integerThe number of threads to skip (0-9,975, default 0)
max_id?snowflakeReturn threads with an ID below this ID
min_id?snowflakeReturn threads with an ID above this ID
slop?integerA value Fluxer accepts and ignores (0-100, default 2)

1 Fluxer drops a tag the channel does not have. Under match_all a dropped tag empties the result, and under match_some the result is empty when every tag is dropped

FieldTypeDescription
threadsarray[thread object]The matching threads
membersarray[thread member object]A thread member object for each returned thread the caller joined
has_morebooleanWhether a later request can return more threads
total_resultsintegerThe number of matching threads
first_messages?1array[message object]The first message of each returned post

1 Present only for a forum or media channel

A 202 response has the body below. A search in a guild whose index is not built yet queues the build.

FieldTypeDescription
codestringAlways SEARCH_INDEX_NOT_READY
messagestringA description of the response
documents_indexedintegerAlways 0
retry_afternumberThe seconds to wait before retrying, always 2
StatusBodyCondition
200thread search objectSearch completed
202index not ready objectThe guild thread index is being built
400error responseChannel is not a thread parent and the request returns INVALID_CHANNEL_TYPE
403error responseCaller lacks READ_MESSAGE_HISTORY and the request returns MISSING_PERMISSIONS
403error responseThread search is unavailable on the instance and the request returns FEATURE_TEMPORARILY_DISABLED
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:threads:search::channel_id bucket.

ValueNameDescription
18THREAD_CREATEDSystem message in the parent that announces a new public or announcement thread
21THREAD_STARTER_MESSAGEFirst message of a thread started from a message, built on read and never stored

message_reference.channel_id of a THREAD_CREATED message is the thread, and the reference names no message.

Fluxer builds a THREAD_STARTER_MESSAGE when it reads the thread and stores none. It has the ID of its thread and references the source message. Deleting it returns 403 MISSING_PERMISSIONS. When the source message is deleted, the thread stays and its referenced_message becomes null.

A message that started a thread has thread, the thread object, and the message flag HAS_THREAD (1 << 5). A role mention in a public or announcement thread adds the members of the role, up to 250 per message. A message gets FAILED_TO_MENTION_SOME_ROLES_IN_THREAD (1 << 8) when that limit or the thread member limit stops a role member from being added. Only Fluxer sets either flag.

Sending a message in a thread adds a user sender who has not joined it. A mentioned user who can view the parent is added too. A private thread that is not invitable adds mentioned users only when the sender is a thread moderator.

ObjectFieldDescription
Text or announcement channeldefault_auto_archive_durationThe stored default auto archive duration, which Fluxer does not apply to a new thread
Text or announcement channeldefault_thread_rate_limit_per_userThe slowmode interval in seconds new threads inherit
Read stateflagsThe read state flags
Message search resultthreadsThe threads that contain a returned message
Message search resultmembersA thread member object for each of those threads the caller joined
Guild audit log responsethreadsThe threads a returned thread action targets

The guild audit log records thread creation, update, and deletion as action types 110, 111, and 112.

A user request reaches a route with a route header on this page only with a session token and channel_threads in the X-Fluxer-Features header. Without both, Fluxer returns 404 NOT_FOUND before the rate limit and before the login check. An OAuth2 bearer token never has the capability. A request with no token gets the same 404. A bot token needs no declaration.

A channel_id that does not exist or names a channel outside a guild returns the same 404.

On other routes, a user request without the capability sees no threads. A route that resolves a thread, forum, or media channel by ID returns 404 UNKNOWN_CHANNEL unless its own entry states another result. Message lists drop THREAD_CREATED messages, and each message loses thread and both thread message flags.

A Gateway session reads the separate CHANNEL_THREADS session flag.