Skip to content
Fluxer API

Thread members

A thread member records that a user joined a thread. A thread holds at most 1,000 members, and adding one more returns 400 MAX_THREAD_MEMBERS.

A route on this page returns 403 MISSING_PERMISSIONS when the caller is not a member of the guild, unless its own entry states an earlier result. A guild channel that is not a thread and that the caller cannot view also returns 403 MISSING_PERMISSIONS. A thread whose parent channel no longer exists returns 404 UNKNOWN_CHANNEL.

FieldTypeDescription
id?1snowflakeThe ID of the thread
user_id?1snowflakeThe ID of the user
join_timestampISO8601 timestampThe time the user last joined the thread
flagsintegerThe thread member flags
muted?2booleanWhether the user muted the thread
mute_config?2?guild mute configuration objectThe mute expiry of the thread, or null when none is stored
member?3guild member objectThe guild member of the user

1 Omitted on the member of a thread in Ready, Guild Create, and Guild Sync

2 Present only on the caller’s own membership

3 In an HTTP response, present only when the request sets with_member and the user is still a guild member. Thread Members Update defines it on each added_members entry

{
"id": "1501320100000000000",
"user_id": "1501314428688992222",
"join_timestamp": "2026-05-05T20:30:05.018Z",
"flags": 3,
"muted": false,
"mute_config": null
}
ValueNameDescription
1 << 0HAS_INTERACTED1The user sent a message in the thread or created it
1 << 1ALL_MESSAGESNotify the user of every message in the thread
1 << 2ONLY_MENTIONSNotify the user only of mentions in the thread
1 << 3NO_MESSAGESNotify the user of nothing in the thread

1 Set only by Fluxer. A bot that creates a thread starts without it

At most one of the three notification flags is set. With none set, the thread follows the notification level of its parent.

A member keeps the membership after losing access to the parent. Removal from the guild removes every membership in its threads. Fluxer emits a Thread Members Update for each of them.

PUT/v1/channels/{channel_id}/thread-members/@meBot

Adds the caller to a thread. Returns 204 with no body. Emits a Thread Members Update Gateway event.

  • The caller must be able to view the thread.
  • The thread must not be archived.
  • A locked thread requires a thread moderator.

Joining a thread the caller already belongs to runs the checks above, then returns 204 and changes nothing. Each session of a newly added user receives Thread Create when it has thread access and can view the thread. A session still connecting to the guild receives none.

Joining a locked thread needs an enrolled authenticator while the guild MFA level is elevated, unless the caller owns the guild.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
FieldTypeDescription
location?stringA value Fluxer accepts and ignores (max 100 characters)
StatusBodyCondition
204emptyCaller is a member
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
400error responseThread is archived and the request returns THREAD_ARCHIVED
400error responseThread is locked and the caller is not a thread moderator, returning THREAD_LOCKED
400error responseThread has 1,000 members and the request returns MAX_THREAD_MEMBERS
400error responseCaller needs an authenticator and the request returns TWO_FACTOR_REQUIRED
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS

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

PUT/v1/channels/{channel_id}/thread-members/{user_id}Bot

Adds another guild member to a thread. Requires SEND_MESSAGES_IN_THREADS. Returns 204 with no body. Emits a Thread Members Update Gateway event.

  • The caller must be able to view the thread.
  • The thread must not be archived.
  • A locked thread requires a thread moderator.
  • A private thread with invitable false requires the caller or the target to be a thread moderator.
  • The target must be a guild member who can view the parent.

user_id of @me behaves as Join thread. A request that names the caller’s own ID runs the checks above, and Fluxer posts no message for it. Adding a user who is already a member runs the checks above, then returns 204 and changes nothing. Each session of a newly added user receives Thread Create when it has thread access and can view the thread. A session still connecting to the guild receives none.

Adding to a locked thread needs an enrolled authenticator while the guild MFA level is elevated, unless the caller owns the guild. Adding a target who is not a thread moderator to a private thread with invitable false needs one too.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
user_idsnowflakeThe ID of the user to add
FieldTypeDescription
location?stringA value Fluxer accepts and ignores (max 100 characters)
StatusBodyCondition
204emptyTarget is a member
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
400error responseThread is archived and the request returns THREAD_ARCHIVED
400error responseThread is locked and the caller is not a thread moderator, returning THREAD_LOCKED
400error responseThread has 1,000 members and the request returns MAX_THREAD_MEMBERS
400error responseCaller needs an authenticator and the request returns TWO_FACTOR_REQUIRED
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS
403error responseCaller lacks SEND_MESSAGES_IN_THREADS and the request returns MISSING_PERMISSIONS
403error responseNeither user is a thread moderator in a private thread that is not invitable, returning MISSING_PERMISSIONS
403error responseTarget cannot view the parent and the request returns MISSING_ACCESS
403error responseCaller is timed out and the request returns COMMUNICATION_DISABLED
404error responseTarget is not a guild member and the request returns UNKNOWN_MEMBER

Adding another user posts a RECIPIENT_ADD message in the thread that mentions the target. Fluxer emits Message Create for it.

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

DELETE/v1/channels/{channel_id}/thread-members/@meBot

Removes the caller from a thread. Returns 204 with no body. Emits a Thread Members Update Gateway event.

A timed-out member can leave a thread. A member who can no longer view the thread receives 403 MISSING_ACCESS.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
FieldTypeDescription
location?stringA value Fluxer accepts and ignores (max 100 characters)
StatusBodyCondition
204emptyCaller left the thread
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
400error responseThread is archived and the request returns THREAD_ARCHIVED
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS
404error responseCaller is not a member and the request returns UNKNOWN_THREAD_MEMBER

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

DELETE/v1/channels/{channel_id}/thread-members/{user_id}Bot

Removes a member from a thread. Requires MANAGE_THREADS, or ownership of a private thread. Returns 204 with no body. Emits a Thread Members Update Gateway event.

  • The caller must be able to view the thread.
  • The thread must not be archived.
  • The caller must be a thread moderator or the owner of the private thread.

user_id of @me or of the caller behaves as Leave thread.

Removing a member needs an enrolled authenticator while the guild MFA level is elevated, unless the caller owns the guild or the private thread.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
user_idsnowflakeThe ID of the user to remove
FieldTypeDescription
location?stringA value Fluxer accepts and ignores (max 100 characters)
StatusBodyCondition
204emptyMember was removed
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
400error responseThread is archived and the request returns THREAD_ARCHIVED
400error responseCaller needs an authenticator and the request returns TWO_FACTOR_REQUIRED
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS
403error responseCaller is neither a thread moderator nor the owner of the private thread and the request returns MISSING_PERMISSIONS
403error responseCaller is timed out and the request returns COMMUNICATION_DISABLED
404error responseTarget is not a member and the request returns UNKNOWN_THREAD_MEMBER

Removing another user posts a RECIPIENT_REMOVE message in the thread that mentions the target. Fluxer emits Message Create for it.

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

GET/v1/channels/{channel_id}/thread-members/{user_id}Bot

Returns the thread member object of a user. Requires a bot token.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
user_idsnowflakeThe ID of the user
FieldTypeDescription
with_member?booleanWhether to include the guild member of the user (default false)
StatusBodyCondition
200thread member objectMember was returned
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS
404error responseUser is not a member and the request returns UNKNOWN_THREAD_MEMBER
404error responseCaller is a user and the request returns NOT_FOUND

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

GET/v1/channels/{channel_id}/thread-membersBot

Returns the thread member objects of a thread in ascending user ID order. Requires a bot token.

A user client reads member lists through the thread_member_lists option of Lazy Request.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
FieldTypeDescription
with_member?booleanWhether to include the guild member of each thread member (default false)
after?snowflakeReturn members with a user ID above this one
limit?integerThe maximum number of members to return (1-100, default 100)
StatusBodyCondition
200array[thread member object]Members were returned
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS
404error responseCaller is a user and the request returns NOT_FOUND

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

PATCH/v1/channels/{channel_id}/thread-members/@me/settings

Changes the caller’s notification settings for a thread they joined. User-only. Returns the updated thread member object, or 204 when nothing changed. Emits a Thread Member Update Gateway event.

FieldTypeDescription
channel_idsnowflakeThe ID of the thread
FieldTypeDescription
flags?1integerThe notification thread member flags
muted?booleanWhether the thread is muted
mute_config??guild mute configuration input objectThe mute expiry of the thread, or null to clear it

1 Replaces the three notification flags and keeps HAS_INTERACTED. A value of 0 clears them

While muted is true, the member receives no push notification from the thread, including for a mention. A mute with an end_time stops when that time passes.

StatusBodyCondition
200thread member objectSettings changed
204emptyThe body matched the stored settings
400error responseflags sets more than one notification flag or any other bit and the request returns INVALID_THREAD_NOTIFICATION_SETTINGS
400error responseChannel is not a thread and the request returns INVALID_CHANNEL_TYPE
403error responseCaller is a bot and the request returns ACCESS_DENIED
403error responseCaller cannot view the thread and the request returns MISSING_ACCESS
404error responseCaller is not a member and the request returns UNKNOWN_THREAD_MEMBER

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