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.
Thread member object
Section titled “Thread member object”Structure
Section titled “Structure”| Field | Type | Description |
|---|---|---|
| id?1 | snowflake | The ID of the thread |
| user_id?1 | snowflake | The ID of the user |
| join_timestamp | ISO8601 timestamp | The time the user last joined the thread |
| flags | integer | The thread member flags |
| muted?2 | boolean | Whether the user muted the thread |
| mute_config?2 | ?guild mute configuration object | The mute expiry of the thread, or null when none is stored |
| member?3 | guild member object | The 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
Example
Section titled “Example”{ "id": "1501320100000000000", "user_id": "1501314428688992222", "join_timestamp": "2026-05-05T20:30:05.018Z", "flags": 3, "muted": false, "mute_config": null}Thread member flags
Section titled “Thread member flags”| Value | Name | Description |
|---|---|---|
| 1 << 0 | HAS_INTERACTED1 | The user sent a message in the thread or created it |
| 1 << 1 | ALL_MESSAGES | Notify the user of every message in the thread |
| 1 << 2 | ONLY_MENTIONS | Notify the user only of mentions in the thread |
| 1 << 3 | NO_MESSAGES | Notify 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.
Join thread
Section titled “Join thread”PUT/v1/channels/{channel_id}/thread-members/@meAdds the caller to a thread. Returns 204 with no body. Emits a Thread Members Update Gateway event.
Limitations
Section titled “Limitations”- 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.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
Query parameters
Section titled “Query parameters”| Field | Type | Description |
|---|---|---|
| location? | string | A value Fluxer accepts and ignores (max 100 characters) |
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 204 | empty | Caller is a member |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 400 | error response | Thread is archived and the request returns THREAD_ARCHIVED |
| 400 | error response | Thread is locked and the caller is not a thread moderator, returning THREAD_LOCKED |
| 400 | error response | Thread has 1,000 members and the request returns MAX_THREAD_MEMBERS |
| 400 | error response | Caller needs an authenticator and the request returns TWO_FACTOR_REQUIRED |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
Rate limit
Section titled “Rate limit”10 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:member:put::channel_id bucket.
Add thread member
Section titled “Add thread member”PUT/v1/channels/{channel_id}/thread-members/{user_id}Adds another guild member to a thread. Requires SEND_MESSAGES_IN_THREADS. Returns 204 with no body. Emits a Thread Members Update Gateway event.
Limitations
Section titled “Limitations”- 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
invitablefalse 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.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
| user_id | snowflake | The ID of the user to add |
Query parameters
Section titled “Query parameters”| Field | Type | Description |
|---|---|---|
| location? | string | A value Fluxer accepts and ignores (max 100 characters) |
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 204 | empty | Target is a member |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 400 | error response | Thread is archived and the request returns THREAD_ARCHIVED |
| 400 | error response | Thread is locked and the caller is not a thread moderator, returning THREAD_LOCKED |
| 400 | error response | Thread has 1,000 members and the request returns MAX_THREAD_MEMBERS |
| 400 | error response | Caller needs an authenticator and the request returns TWO_FACTOR_REQUIRED |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
| 403 | error response | Caller lacks SEND_MESSAGES_IN_THREADS and the request returns MISSING_PERMISSIONS |
| 403 | error response | Neither user is a thread moderator in a private thread that is not invitable, returning MISSING_PERMISSIONS |
| 403 | error response | Target cannot view the parent and the request returns MISSING_ACCESS |
| 403 | error response | Caller is timed out and the request returns COMMUNICATION_DISABLED |
| 404 | error response | Target is not a guild member and the request returns UNKNOWN_MEMBER |
Side effects
Section titled “Side effects”Adding another user posts a RECIPIENT_ADD message in the thread that mentions the target. Fluxer emits Message Create for it.
Rate limit
Section titled “Rate limit”10 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:member:put::channel_id bucket.
Leave thread
Section titled “Leave thread”DELETE/v1/channels/{channel_id}/thread-members/@meRemoves 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.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
Query parameters
Section titled “Query parameters”| Field | Type | Description |
|---|---|---|
| location? | string | A value Fluxer accepts and ignores (max 100 characters) |
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 204 | empty | Caller left the thread |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 400 | error response | Thread is archived and the request returns THREAD_ARCHIVED |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
| 404 | error response | Caller is not a member and the request returns UNKNOWN_THREAD_MEMBER |
Rate limit
Section titled “Rate limit”10 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:member:delete::channel_id bucket.
Remove thread member
Section titled “Remove thread member”DELETE/v1/channels/{channel_id}/thread-members/{user_id}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.
Limitations
Section titled “Limitations”- 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.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
| user_id | snowflake | The ID of the user to remove |
Query parameters
Section titled “Query parameters”| Field | Type | Description |
|---|---|---|
| location? | string | A value Fluxer accepts and ignores (max 100 characters) |
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 204 | empty | Member was removed |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 400 | error response | Thread is archived and the request returns THREAD_ARCHIVED |
| 400 | error response | Caller needs an authenticator and the request returns TWO_FACTOR_REQUIRED |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
| 403 | error response | Caller is neither a thread moderator nor the owner of the private thread and the request returns MISSING_PERMISSIONS |
| 403 | error response | Caller is timed out and the request returns COMMUNICATION_DISABLED |
| 404 | error response | Target is not a member and the request returns UNKNOWN_THREAD_MEMBER |
Side effects
Section titled “Side effects”Removing another user posts a RECIPIENT_REMOVE message in the thread that mentions the target. Fluxer emits Message Create for it.
Rate limit
Section titled “Rate limit”10 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:member:delete::channel_id bucket.
Get thread member
Section titled “Get thread member”GET/v1/channels/{channel_id}/thread-members/{user_id}Returns the thread member object of a user. Requires a bot token.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
| user_id | snowflake | The ID of the user |
Query parameters
Section titled “Query parameters”| Field | Type | Description |
|---|---|---|
| with_member? | boolean | Whether to include the guild member of the user (default false) |
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 200 | thread member object | Member was returned |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
| 404 | error response | User is not a member and the request returns UNKNOWN_THREAD_MEMBER |
| 404 | error response | Caller is a user and the request returns NOT_FOUND |
Rate limit
Section titled “Rate limit”40 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:member:get::channel_id bucket.
List thread members
Section titled “List thread members”GET/v1/channels/{channel_id}/thread-membersReturns 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.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
Query parameters
Section titled “Query parameters”| Field | Type | Description |
|---|---|---|
| with_member? | boolean | Whether to include the guild member of each thread member (default false) |
| after? | snowflake | Return members with a user ID above this one |
| limit? | integer | The maximum number of members to return (1-100, default 100) |
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 200 | array[thread member object] | Members were returned |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
| 404 | error response | Caller is a user and the request returns NOT_FOUND |
Rate limit
Section titled “Rate limit”20 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:members:list::channel_id bucket.
Modify thread member settings
Section titled “Modify thread member settings”PATCH/v1/channels/{channel_id}/thread-members/@me/settingsChanges 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.
Path parameters
Section titled “Path parameters”| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The ID of the thread |
JSON body
Section titled “JSON body”| Field | Type | Description |
|---|---|---|
| flags?1 | integer | The notification thread member flags |
| muted? | boolean | Whether the thread is muted |
| mute_config? | ?guild mute configuration input object | The 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.
Response
Section titled “Response”| Status | Body | Condition |
|---|---|---|
| 200 | thread member object | Settings changed |
| 204 | empty | The body matched the stored settings |
| 400 | error response | flags sets more than one notification flag or any other bit and the request returns INVALID_THREAD_NOTIFICATION_SETTINGS |
| 400 | error response | Channel is not a thread and the request returns INVALID_CHANNEL_TYPE |
| 403 | error response | Caller is a bot and the request returns ACCESS_DENIED |
| 403 | error response | Caller cannot view the thread and the request returns MISSING_ACCESS |
| 404 | error response | Caller is not a member and the request returns UNKNOWN_THREAD_MEMBER |
Rate limit
Section titled “Rate limit”10 requests per 10 seconds for each authenticated user and channel ID, on the channel:thread:member:settings::channel_id bucket.