Skip to content
Fluxer API

Threads

A thread is a channel inside a guild text, announcement, forum or media channel with its own messages. Public and announcement threads are visible to everyone who can view the parent, and a private thread is visible to its members and to thread moderators.

A thread is a channel object with the fields below.

FieldTypeDescription
id1snowflakeThe ID of the thread
typeintegerThe thread type
guild_idsnowflakeThe ID of the guild
parent_idsnowflakeThe ID of the parent channel
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
last_pin_timestamp?ISO8601 timestampThe time a message was most recently pinned
rate_limit_per_userintegerThe slowmode interval in seconds (0-21,600)
flagsintegerThe channel flags of the thread (only PINNED, on a forum post)
thread_metadatathread metadata objectThe archive and lock state of the thread
message_countintegerThe number of messages, not counting deleted messages or the first message of a forum post
total_message_sentintegerThe number of messages ever sent, not counting the first message of a forum post
member_countintegerThe number of thread members, capped at 50
applied_tags?array[snowflake]The IDs of the forum tags on a forum post (max 5)
member_ids_preview?array[snowflake]The IDs of the newest members of a forum post (max 8)
member?thread member objectThe thread member object of the caller, when the caller is a member

1 A thread started from a message has the ID of that message

The schema also declares topic, url, icon, position, bitrate, user_limit, voice_connection_limit, rtc_region, rtc_p2p, 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.

{
"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_timestampISO8601 timestampThe time the archive state or auto archive duration last changed, or the creation time
lockedbooleanWhether only thread moderators can act in the thread
invitable?booleanWhether members who are not thread moderators can add members, on a private thread
create_timestampISO8601 timestampThe time the thread was created
ValueNameDescription
10ANNOUNCEMENT_THREADA thread in an announcement channel
11PUBLIC_THREADA thread in a guild text channel, or a forum post
12PRIVATE_THREADA thread in a guild text channel visible to its members and to thread moderators
ValueDescription
60One hour
1440One day
4320Three days, the default
10080One week

A new thread ignores the parent's default_auto_archive_duration.

Fluxer archives a thread auto_archive_duration minutes after its last message or its archive_timestamp, whichever is later, and sends Thread Update. A pinned forum post is never archived automatically. A guild can have at most 1,000 active threads, and starting or unarchiving one past that returns 400 MAX_ACTIVE_THREADS.

Sending a message to an archived thread unarchives it. In an archived thread, reacting, pinning, editing, joining, leaving and changing members return 400 THREAD_ARCHIVED, and deleting a message still works. In a locked thread, sending, reacting, pinning, editing, joining and adding members return 400 THREAD_LOCKED to anyone who is not a thread moderator.

A thread has no permission overwrites. Fluxer uses the permissions of the parent with SEND_MESSAGES_IN_THREADS in place of SEND_MESSAGES. The thread bits are in Permissions.

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

A timed-out member who is not the guild owner or an administrator can read, join and leave threads and delete messages, but gets 403 COMMUNICATION_DISABLED for anything else.

A caller who is not a member or thread moderator gets 403 MISSING_ACCESS for a private thread.

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

Starts a thread from a regular message or a reply in a guild text or announcement channel and returns a thread object. You need CREATE_PUBLIC_THREADS and READ_MESSAGE_HISTORY.

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, default from the parent)
StatusBodyCondition
201thread objectThe thread was started
400error responseCANNOT_MODIFY_SYSTEM_WEBHOOK when the message is a system message
400error responseTHREAD_ALREADY_CREATED_FOR_MESSAGE when the message already started a thread
400error responseSLOWMODE_RATE_LIMITED when the parent slowmode applies

Fluxer sends Thread Create, and Message Update for the source message.

The rate limit is 10 requests per 10 seconds, 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. A public or announcement thread needs CREATE_PUBLIC_THREADS, a private thread needs CREATE_PRIVATE_THREADS and a forum post needs SEND_MESSAGES.

The body depends on the parent channel type, and you can send it as multipart form data with the JSON in payload_json. A forum post can attach files[n] parts as in Create message.

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, default from the parent)
invitable?booleanWhether members who are not thread moderators can add members, on a private thread (default true)
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?array[snowflake]The IDs of the forum tags to apply (max 5, required under REQUIRE_TAG)
auto_archive_duration?integerThe auto archive duration in minutes (default 4320)
rate_limit_per_user?integerThe slowmode interval in seconds (0-21,600, default from the parent)
type?integerThe thread type (11 only)
StatusBodyCondition
201forum post objectThe post was created in a forum or media channel
201thread objectThe thread was started in a guild text or announcement channel
400error responseINVALID_CHANNEL_TYPE when the thread type does not fit the channel
400error responseFORUM_TAG_REQUIRED when a post under REQUIRE_TAG has no tag
400error responseNO_TAGS_AVAILABLE_TO_NON_MODERATORS when a non-moderator's post under REQUIRE_TAG has no tag and every tag is moderated
404error responseUNKNOWN_FORUM_TAG when a tag does not exist

Fluxer sends Thread Create.

The rate limit is 10 requests per 10 seconds, on the channel:thread:create::channel_id bucket.

Modify channel on a thread takes the body below and returns the thread object. The thread owner or a thread moderator can change name, auto_archive_duration, invitable and applied_tags, and can archive or lock the thread. Any thread member can unarchive it. Only a thread moderator can change rate_limit_per_user or flags, unlock the thread, or change anything in a locked thread.

FieldTypeDescription
name?stringThe name of the thread (1-100 characters)
archived??booleanWhether the thread is archived (null leaves it unchanged)
auto_archive_duration?integerThe auto archive duration in minutes
locked??booleanWhether only thread moderators can act in the thread (null leaves it unchanged)
rate_limit_per_user??integerThe slowmode interval in seconds (0-21,600, null sets 0)
flags?integerThe channel flags (only PINNED, on a forum post)
applied_tags?array[snowflake]The complete set of forum tag IDs on a forum post (max 5)
invitable??booleanWhether members who are not thread moderators can add members, on a private thread
StatusBodyCondition
200thread objectThe thread was modified
400error responseMAX_PINNED_THREADS_IN_FORUM when the forum already has a pinned post

Fluxer sends Thread Update when a field changes. The rate limit is the one for Modify channel.

Delete or leave channel on a thread deletes it with its messages. You need to be a thread moderator. Fluxer sends Thread Delete.

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

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

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 objectThe threads were returned
404error responseNOT_FOUND when the caller is a user

The rate limit is 5 requests per 10 seconds, on the guild:threads:active::guild_id bucket.

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

Returns the archived public and announcement threads of a channel, most recently archived first. You need READ_MESSAGE_HISTORY.

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 more threads are available

The rate limit is 20 requests per 10 seconds, 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. You need READ_MESSAGE_HISTORY, and you have to be a thread moderator.

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 more threads are available

The rate limit is 20 requests per 10 seconds, 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 you joined, newest thread first. You need 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)
FieldTypeDescription
threadsarray[thread object]The archived threads
membersarray[thread member object]A thread member object for each returned thread the caller joined
has_morebooleanWhether more threads are available

The rate limit is 20 requests per 10 seconds, on the channel:threads:archived:list::channel_id bucket.

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

Searches the threads of a channel by name and tag. You need READ_MESSAGE_HISTORY, and a caller who is not a thread moderator only finds public threads and private threads they joined.

FieldTypeDescription
name?stringThe text to match in thread names (max 100 characters)
tag?array[snowflake]The forum tag IDs to filter by, repeated once per tag (max 20)
tag_setting?stringmatch_some or match_all (default from 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?integerAccepted and ignored (0-100, default 2)
FieldTypeDescription
threadsarray[thread object]The matching threads
membersarray[thread member object]A thread member object for each returned thread the caller joined
has_morebooleanWhether more threads are available
total_resultsintegerThe number of matching threads
first_messages?array[message object]The first message of each returned forum post

While the thread index for the guild is being built, the API returns 202 with the body below, and you retry after retry_after seconds.

FieldTypeDescription
codestringAlways SEARCH_INDEX_NOT_READY
messagestringA description of the response
documents_indexedintegerAlways 0
retry_afternumberThe seconds to wait before retrying, always 2
StatusBodyCondition
200The response body aboveThe search finished
202The body after the response bodyThe thread index is being built
403error responseFEATURE_TEMPORARILY_DISABLED when thread search is off on the instance

The rate limit is 20 requests per 10 seconds, on the channel:threads:search::channel_id bucket.

ValueNameDescription
18THREAD_CREATEDA system message in the parent for a new public or announcement thread
21THREAD_STARTER_MESSAGEThe first message of a thread started from a message, which references the source message

A thread started from a message gets THREAD_CREATED only when that message is not among the 5 newest in the parent.

A message that started a thread has a thread field with the thread object and the HAS_THREAD flag (1 << 5). Sending a message in a thread adds you and every mentioned user who can view the parent as thread members.

A user request needs a session token and channel_threads in the X-Fluxer-Features header, or every route with a route header on this page returns 404 NOT_FOUND. An OAuth2 token can't declare the capability.

On other routes, a user without the capability sees no threads, and a route that looks up a thread by ID returns 404 UNKNOWN_CHANNEL. A Gateway session uses the CHANNEL_THREADS session flag.