---
title: "POST /channels/{channel_id}/threads"
method: POST
path: "/channels/{channel_id}/threads"
---

# POST /channels/{channel_id}/threads

`POST /channels/{channel_id}/threads`

## Request body

- union
  - object
    - `name` string, required
    - `auto_archive_duration` union
      - 60 — One hour
      - 1440 — One day
      - 4320 — Three days
      - 10080 — Seven days
    - `rate_limit_per_user` integer, nullable
    - `applied_tags` SnowflakeType[], nullable
    - `message` BaseCreateMessageCreateRequest, required
      - `content` string, nullable
      - `embeds` RichEmbed[], nullable
        - `type` string, nullable
        - `url` string, uri, nullable
        - `title` string, nullable
        - `color` integer, nullable
        - `timestamp` string, date-time, nullable
        - `description` string, nullable
        - `author` RichEmbedAuthor
          - `name` string, nullable
          - `url` string, uri, nullable
          - `icon_url` string, uri, nullable
        - `image` RichEmbedImage
          - `url` string, uri, nullable
          - `width` integer, nullable
          - `height` integer, nullable
          - `placeholder` string, nullable
          - `placeholder_version` integer, nullable
          - `is_animated` boolean, nullable
          - `description` string, nullable
        - `thumbnail` RichEmbedThumbnail
          - `url` string, uri, nullable
          - `width` integer, nullable
          - `height` integer, nullable
          - `placeholder` string, nullable
          - `placeholder_version` integer, nullable
          - `is_animated` boolean, nullable
          - `description` string, nullable
        - `footer` RichEmbedFooter
          - `text` string, nullable
          - `icon_url` string, uri, nullable
        - `fields` RichEmbedField[], nullable
          - `name` string, required
          - `value` string, required
          - `inline` boolean, nullable
        - `provider` RichEmbedProvider
          - `name` string, nullable
          - `url` string, uri, nullable
        - `video` RichEmbedVideo
          - `url` string, uri, nullable
          - `width` integer, nullable
          - `height` integer, nullable
          - `placeholder` string, nullable
          - `placeholder_version` integer, nullable
          - `is_animated` boolean, nullable
          - `description` string, nullable
      - `allowed_mentions` MessageAllowedMentionsRequest
        - `parse` AllowedMentionTypes[], nullable
          - union
            - 'users' — Controls role mentions
            - 'roles' — Controls user mentions
            - 'everyone' — Controls @everyone and @here mentions
        - `users` SnowflakeType[], nullable
        - `roles` SnowflakeType[], nullable
        - `replied_user` boolean, nullable
      - `sticker_ids` SnowflakeType[], nullable
      - `components` union[], nullable
        - union
          - ActionRowComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `components` union[], required
              - …
          - ContainerComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `accent_color` integer, nullable
            - `components` union[], required
              - …
            - `spoiler` boolean, nullable
          - FileComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `spoiler` boolean, nullable
            - `file` UnfurledMediaRequestWithAttachmentReferenceRequired, required
              - …
          - MediaGalleryComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `items` MediaGalleryItemRequest[], required
              - …
          - SectionComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `components` TextDisplayComponentForMessageRequest[], required
              - …
            - `accessory` union, required
              - …
          - SeparatorComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `spacing` union
              - …
            - `divider` boolean, nullable
          - TextDisplayComponentForMessageRequest
            - `type` union, required
              - …
            - `id` integer, nullable
            - `content` string, required
      - `flags` integer, nullable
      - `attachments` MessageAttachmentRequest[], nullable
        - `id` string, snowflake, required
        - `filename` string, nullable
        - `description` string, nullable
        - `duration_secs` number, double, nullable
        - `waveform` string, nullable
        - `title` string, nullable
        - `is_spoiler` boolean, nullable
        - `is_remix` boolean, nullable
      - `poll` PollCreateRequest
        - `question` PollMedia, required
          - `text` string, nullable — The text of the field
          - `emoji` PollEmoji
            - `id` string, snowflake
            - `name` string, nullable — The name of the emoji, or the unicode emoji character
            - `animated` boolean, nullable — Whether the emoji is animated
        - `answers` PollAnswerCreateRequest[], required — Each of the answers available in the poll, up to 10
          - `poll_media` PollMediaCreateRequest, required
            - `text` string, nullable — The text of the field
            - `emoji` PollEmojiCreateRequest
              - …
        - `allow_multiselect` boolean, nullable — Whether a user can select multiple answers
        - `layout_type` 1 — The, uhm, default layout type.
        - `duration` integer, nullable — Number of hours the poll should be open for, up to 32 days. Defaults to 24
      - `shared_client_theme` CustomClientThemeShareRequest
        - `colors` string[], required
        - `gradient_angle` integer, required
        - `base_mix` integer, required
        - `base_theme` union
          - 0 — No base theme
          - 1 — Dark base theme
          - 2 — Light base theme
          - 3 — Darker base theme
          - 4 — Midnight base theme
  - object
    - `name` string, required
    - `auto_archive_duration` union
      - 60 — One hour
      - 1440 — One day
      - 4320 — Three days
      - 10080 — Seven days
    - `rate_limit_per_user` integer, nullable
    - `type` union
      - 1 — A direct message between users
      - 3 — A direct message between multiple users
      - 0 — A text channel within a server
      - 2 — A voice channel within a server
      - 4 — An organizational category that contains up to 50 channels
      - 5 — A channel that users can follow and crosspost into their own server (formerly news channels)
      - 10 — A temporary sub-channel within a GUILD_ANNOUNCEMENT channel
      - 11 — A temporary sub-channel within a GUILD_TEXT or GUILD_THREADS_ONLY channel type set
      - 12 — A temporary sub-channel within a GUILD_TEXT channel that is only viewable by those invited and those with the MANAGE_THREADS permission
      - 13 — A voice channel for hosting events with an audience
      - 14 — The channel in a hub containing the listed servers
      - 15 — Channel that can only contain threads
    - `invitable` boolean, nullable

## Response `201`

201 response for create_thread

- CreatedThreadResponse
  - `id` string, snowflake, required
  - `type` union, required
    - 1 — A direct message between users
    - 3 — A direct message between multiple users
    - 0 — A text channel within a server
    - 2 — A voice channel within a server
    - 4 — An organizational category that contains up to 50 channels
    - 5 — A channel that users can follow and crosspost into their own server (formerly news channels)
    - 10 — A temporary sub-channel within a GUILD_ANNOUNCEMENT channel
    - 11 — A temporary sub-channel within a GUILD_TEXT or GUILD_THREADS_ONLY channel type set
    - 12 — A temporary sub-channel within a GUILD_TEXT channel that is only viewable by those invited and those with the MANAGE_THREADS permission
    - 13 — A voice channel for hosting events with an audience
    - 14 — The channel in a hub containing the listed servers
    - 15 — Channel that can only contain threads
  - `last_message_id` string, snowflake
  - `flags` integer, required
  - `last_pin_timestamp` string, date-time, nullable
  - `guild_id` string, snowflake, required
  - `name` string, required
  - `parent_id` string, snowflake
  - `rate_limit_per_user` integer
  - `bitrate` integer
  - `user_limit` integer
  - `rtc_region` string, nullable
  - `video_quality_mode` union
    - 1 — Discord chooses the quality for optimal performance
    - 2 — 720p
  - `permissions` string
  - `owner_id` string, snowflake, required
  - `thread_metadata` ThreadMetadataResponse, required
    - `archived` boolean, required
    - `archive_timestamp` string, date-time, nullable, required
    - `auto_archive_duration` union, required
      - 60 — One hour
      - 1440 — One day
      - 4320 — Three days
      - 10080 — Seven days
    - `locked` boolean, required
    - `create_timestamp` string, date-time
    - `invitable` boolean
  - `message_count` integer, required
  - `member_count` integer, required
  - `total_message_sent` integer, required
  - `applied_tags` SnowflakeType[]
  - `member` ThreadMemberResponse
    - `id` string, snowflake, required
    - `user_id` string, snowflake, required
    - `join_timestamp` string, date-time, required
    - `flags` integer, required
    - `member` GuildMemberResponse
      - `avatar` string, nullable, required — the member's guild avatar hash
      - `avatar_decoration_data` UserAvatarDecorationResponse
        - `asset` string, required — the avatar decoration hash
        - `sku_id` string, snowflake, required
      - `banner` string, nullable, required — the member's guild banner hash
      - `communication_disabled_until` string, date-time, nullable, required — when the user's timeout will expire and the user will be able to communicate in the guild again, null or a time in the past if the user is not timed out
      - `flags` integer, required — guild member flags represented as a bit set, defaults to 0
      - `joined_at` string, date-time, required — when the user joined the guild
      - `nick` string, nullable, required — this user's guild nickname
      - `pending` boolean, required — whether the user has not yet passed the guild's Membership Screening requirements
      - `premium_since` string, date-time, nullable, required — when the user started boosting the guild
      - `roles` SnowflakeType[], required — array of role object ids
      - `collectibles` UserCollectiblesResponse
        - `nameplate` UserNameplateResponse, required
          - `sku_id` string, snowflake, required
          - `asset` string, required — Path to the nameplate asset
          - `label` string, required — The label of this nameplate. Currently unused
          - `palette` union, required
            - 'crimson' — Crimson color palette
            - 'berry' — Berry color palette
            - 'sky' — Sky color palette
            - 'teal' — Teal color palette
            - 'forest' — Forest color palette
            - 'bubble_gum' — Bubble gum color palette
            - 'violet' — Violet color palette
            - 'cobalt' — Cobalt color palette
            - 'clover' — Clover color palette
            - 'lemon' — Lemon color palette
            - 'white' — White color palette
            - 'black' — Black color palette
      - `user` UserResponse, required
        - `id` string, snowflake, required
        - `username` string, required — the user's username, not unique across the platform
        - `avatar` string, nullable, required — the user's avatar hash
        - `discriminator` string, required — the user's Discord-tag
        - `public_flags` integer, required — the public flags on a user's account
        - `flags` integer, required
        - `bot` boolean — whether the user belongs to an OAuth2 application
        - `system` boolean — whether the user is an Official Discord System user (part of the urgent message system)
        - `banner` string, nullable — the user's banner hash
        - `accent_color` integer, nullable — the user's banner color encoded as an integer representation of hexadecimal color code
        - `global_name` string, nullable, required — the user's display name, if it is set
        - `avatar_decoration_data` UserAvatarDecorationResponse
          - `asset` string, required — the avatar decoration hash
          - `sku_id` string, snowflake, required
        - `collectibles` UserCollectiblesResponse
          - `nameplate` UserNameplateResponse, required
            - `sku_id` string, snowflake, required
            - `asset` string, required — Path to the nameplate asset
            - `label` string, required — The label of this nameplate. Currently unused
            - `palette` union, required
              - …
        - `primary_guild` UserPrimaryGuildResponse, required
          - `identity_guild_id` string, snowflake, required
          - `identity_enabled` boolean, nullable, required — whether the user is displaying the primary guild's server tag
          - `tag` string, nullable, required — the text of the user's server tag, limited to 4 characters
          - `badge` string, nullable, required — the server tag badge hash
      - `mute` boolean, required — whether the user is muted in voice channels
      - `deaf` boolean, required — whether the user is deafened in voice channels

## Other responses

- `429` — Client ratelimited response
- `4XX` — Client error response

## Changes

- **2026-07-16** `a0996c886249` — 3 breaking
  - the `anyOf[#/components/schemas/CreateForumThreadRequest]/message/attachments/items/filename` request property's minLength was increased from `0` to `1` (media type: application/json)
  - the `anyOf[#/components/schemas/CreateForumThreadRequest]/message/attachments/items/filename` request property's minLength was increased from `0` to `1` (media type: application/x-www-form-urlencoded)
  - the `anyOf[#/components/schemas/CreateForumThreadRequest]/message/attachments/items/filename` request property's minLength was increased from `0` to `1` (media type: multipart/form-data)
- …earlier changes not shown

[Full history](https://skmtc.dev/discord/apis/discord-http-api-preview/changes/channels/:channel_id/threads/post.md)

---

[API](https://skmtc.dev/discord/apis/discord-http-api-preview.md) · [All operations](https://skmtc.dev/discord/apis/discord-http-api-preview/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/discord/discord-http-api-preview/revisions/49efa428e0dd/schema)
