## TL;DR
An incoming webhook posts to exactly one channel, chosen when the webhook was created. channel_not_found means that channel no longer exists under that name, or the webhook URL itself is wrong. You can't fix this by changing the channel parameter in the payload; you fix it by pointing at a live channel, which usually means creating a new webhook.

## The query

```text
slack incoming webhook 404 channel_not_found
```

## Use this when

- Posting to a Slack webhook returns 404 channel_not_found
- Messages stop after a channel is renamed or archived
- The same webhook URL fails in a different workspace


## Not for

- invalid_payload errors (JSON problem, not channel)
- 403 action_prohibited responses
- Slack API rate limiting


## Steps

### 1. Confirm the channel still exists

Open Slack and check the channel is there, unarchived, and spelled as expected. Renames break webhooks silently because the webhook stored the channel at creation time. Archived channels also fail.

Expected output: the channel visible and active in the Slack client.

### 2. Create a fresh webhook for the current channel

In Slack apps, add a new incoming webhook and select the current channel. Webhooks don't follow renames, so a new URL bound to the live channel is the reliable fix. Retire the old URL.

Expected output: a new webhook URL posting successfully to the channel.

### 3. Update every sender to the new URL

Search your codebase, CI configs, and monitoring tools for the old webhook URL. Anything still pointing at the old URL fails the same way. Rotate in one pass and verify each sender.

Expected output: zero remaining references to the old webhook URL.

### 4. Test with a minimal payload

POST a tiny JSON body with just a text field to the new URL. A 200 with 'ok' proves the channel binding is fixed before you reintroduce blocks and attachments.

Expected output: an 'ok' response from the minimal test post.

## Variant phrasings

### slack webhook stopped working after channel rename

Steps 1 and 2. Renames are the number one cause; new webhook is the fix.

### slack incoming webhook 404

Step 2 first. A 404 on the webhook URL itself means the URL is wrong or revoked; recreate it.

## Why it happens

Slack binds the webhook to the channel at creation time rather than resolving the channel on every post. That's why renames and archives break it without any error on Slack's side until you post. The channel parameter in your payload can't override the binding, which surprises everyone once.

## Edge cases

- Deleted Slack apps revoke their webhooks. Check the app still exists if the URL 404s entirely.
- One webhook per channel is the simple model. For many channels, switch to a bot with chat:write scope.
- Webhook URLs are secrets. A leaked URL posting spam gets disabled, which also presents as failures.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_b93PMnxnSHGSCNSoVjIvFQ
