Skip to main content
All articles
· Updated February 17, 2026

How to Send Discord Webhook Messages to Threads and Forums

Learn how to send webhook messages to existing threads, create new forum posts, and automate thread-based communication in Discord.

threadsforumswebhookdiscordautomationdiscord forum post webhookthread webhook 2026
How to Send Discord Webhook Messages to Threads and Forums

Discord threads and forum channels are great for keeping conversations organized. But if you’re automating notifications with webhooks, you need to know a couple of extra tricks to target them correctly. This guide covers both scenarios: posting into an existing thread and creating a brand-new forum post.

Two Different Scenarios

Before diving into code, it’s worth understanding the distinction:

  • Existing thread — a thread that already lives inside a regular text channel. You want your webhook message to appear there, not in the parent channel.
  • Forum post — forum channels work differently. Each post is its own thread. To create one via webhook, you tell Discord the post title and it spins up a new thread automatically.

The API handles these two cases differently, so let’s look at each one.


Scenario 1: Send to an Existing Thread

When a webhook is attached to a text channel, it normally posts to that channel. To redirect the message into a specific thread, append ?thread_id= to the webhook URL with the thread’s ID.

How to get the thread ID

Right-click the thread name in Discord and choose Copy Thread ID (you need Developer Mode enabled under User Settings > Advanced).

The URL

POST https://discord.com/api/webhooks/{webhook_id}/{webhook_token}?thread_id=123456789012345678

Everything else stays the same. The payload is a normal webhook body.

JSON example

{
  "content": "Deployment finished successfully.",
  "username": "Deploy Bot",
  "embeds": [
    {
      "title": "Build #42 passed",
      "color": 3066993,
      "description": "All tests green. Deployed to production."
    }
  ]
}

curl example

curl -X POST \
  "https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN?thread_id=123456789012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Deployment finished successfully.",
    "username": "Deploy Bot"
  }'

JavaScript example

const webhookUrl =
  "https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN";
const threadId = "123456789012345678";

const payload = {
  content: "Deployment finished successfully.",
  username: "Deploy Bot",
  embeds: [
    {
      title: "Build #42 passed",
      color: 3066993,
      description: "All tests green. Deployed to production.",
    },
  ],
};

await fetch(`${webhookUrl}?thread_id=${threadId}`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});

That’s all it takes. The thread_id query parameter tells Discord exactly where to drop the message.


Scenario 2: Create a New Forum Post

Forum channels don’t have a general chat area. Every message is a post, and every post is a thread. To create a new post via webhook, you include thread_name in the request body. Discord creates the thread and posts your message as the opening message.

Your webhook must be attached to the forum channel itself for this to work.

JSON example

{
  "content": "Weekly status update for the team.",
  "thread_name": "Week 7 Status Update",
  "applied_tags": ["987654321098765432"]
}
  • thread_name — the title of the new forum post (required for forum channels)
  • applied_tags — an optional array of tag snowflake IDs to apply to the post

curl example

curl -X POST \
  "https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Weekly status update for the team.",
    "thread_name": "Week 7 Status Update",
    "applied_tags": ["987654321098765432"]
  }'

JavaScript example

const webhookUrl =
  "https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN";

const payload = {
  content: "Weekly status update for the team.",
  thread_name: "Week 7 Status Update",
  applied_tags: ["987654321098765432"],
  embeds: [
    {
      title: "Progress this week",
      color: 5793266,
      fields: [
        { name: "Completed", value: "12 tasks", inline: true },
        { name: "In progress", value: "4 tasks", inline: true },
        { name: "Blocked", value: "1 task", inline: true },
      ],
    },
  ],
};

await fetch(webhookUrl, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});

Each call with a thread_name creates a fresh forum post. If you want to reply to an existing forum post (which is itself a thread), use the ?thread_id= approach from Scenario 1.


Working with Forum Tags

Forum channels can have tags that help organize posts. When creating a post via webhook, you can apply tags by passing their IDs in the applied_tags array.

To find tag IDs, you currently need to use the Discord API or a bot. The endpoint GET /channels/{channel_id} returns the forum channel’s available_tags array, each with an id field. Copy those IDs into your applied_tags payload.

Keep in mind:

  • Some forum channels require at least one tag. If yours does, omitting applied_tags will return a 400 error.
  • You can apply multiple tags: "applied_tags": ["tag_id_1", "tag_id_2"]
  • Tag IDs are snowflakes (large integers), so pass them as strings in JSON.

Using discord-webhook.com for Threads and Forums

If you’d rather not write raw HTTP requests, discord-webhook.com/app has built-in support for all three modes:

  • Normal — standard message to the webhook’s channel
  • To Thread — paste a thread ID and the message goes there
  • Forum Post — set a post title and optional tags, and the tool creates the forum post for you

The visual editor lets you build embeds, preview the output, and switch between modes without touching any code. It’s handy for one-off posts or for testing your payload before wiring it into an automation pipeline.

You can also schedule a forum post or thread message for a specific date and time using the built-in scheduler. And if you want buttons in your thread messages that actually respond to clicks — assigning roles, opening forms, or triggering automations — check out the interactive buttons and actions guide.


Common Errors

400 Bad Request — usually means a required field is missing. For forum channels, check that thread_name is present and that you’ve supplied required tags if the channel enforces them.

404 Not Found — the thread ID doesn’t exist or the webhook doesn’t have access to it. Double-check the ID and make sure the webhook is in the same server.

405 Method Not Allowed — you’re sending to a forum channel without thread_name. Forum channels don’t accept plain messages; every post needs a title.


Quick Reference

GoalHow
Post to existing threadAdd ?thread_id=THREAD_ID to the webhook URL
Create new forum postInclude "thread_name": "Post Title" in the body
Apply forum tagsInclude "applied_tags": ["tag_id"] in the body
Reply to forum postUse ?thread_id= with the forum post’s thread ID

Threads and forums give your Discord server structure. With the thread_id parameter and thread_name field, your webhooks can work within that structure instead of around it.