Webhooks reject embed-only payloads from Discord and Slack compatible apps with error 400

(#297) Bug Awaiting confirmation api embeds

Summary

When attempting to use webhooks via many popular self hosted apps, I've found that embed only may not be supported on the webhook. For example, within seer sending a test payload I receive the following error in the apps logs: Using the discord webhook integration:
2026-02-23T16:08:46.438Z [debug][Notifications]: Sending Discord notification {"type":"TEST_NOTIFICATION","subject":"Test Notification"}
2026-02-23T16:08:46.559Z [error][Notifications]: Error sending Discord notification {"type":"TEST_NOTIFICATION","subject":"Test Notification","errorMessage":"Request failed with status code 400","response":{"code":"INVALID_FORM_BODY","message":"Invalid form body.","errors":[{"path":"message_data","message":"Invalid message data.","code":"INVALID_MESSAGE_DATA"}]}}
Using the slack webhook integration:
2026-02-23T16:10:39.644Z [debug][Notifications]: Sending Slack notification {"type":"TEST_NOTIFICATION","subject":"Test Notification"}
2026-02-23T16:10:39.796Z [error][Notifications]: Error sending Slack notification {"type":"TEST_NOTIFICATION","subject":"Test Notification","errorMessage":"Request failed with status code 400","response":{"code":"CANNOT_SEND_EMPTY_MESSAGE","message":"You can't send an empty message."}}
Zerobyte results in a generic 400 error:
16:15:12 error Failed to send notification: failed to send notification to generic webhook: server returned unexpected response status code: 400 Bad Request

16:15:12 error ...../api/v1/notifications/destinations/6/test: Failed *** send test notification: failed to send notification to generic webhook: server returned unexpected response status code: 400 Bad Request
Pretty sure Zerobyte uses Shoutrrr for sending out webhooks in most of its processes. Odd that the Unraid System notification works fine when using the discord notification - it shows up as an embed only which is intended. I originally thought that may have been the problem.

Steps to reproduce

Add webook under discord, slack, or generic webhook into Seer. Then test. Add webook under discord, slack, or generic webhook into Zerobyte. Then test.

3 comments

Sign in with Fluxer to comment and vote.
Comment by Rex
RexSystem 1 vote
Status changed from Fixed to Awaiting confirmation
This was closed in a bulk cleanup before Fluxer V2 without being checked or fixed. It may work now, so it is waiting for someone to confirm whether the bug still happens.
Comment by @Scout339
RexSystem 1 vote originally by @Scout339 on GitHub
im having a similar issue with my own selfhosted app I made... Works with other test webhook websites, but doesnt work with Fluxer's webhooks as of now image
  • 555685592-b79ccd3f-813b-4826-bcc9-e7b6a6f240bf.png

    555685592-b79ccd3f-813b-4826-bcc9-e7b6a6f240bf.png

    1193×822 | 88 kB

Comment by @vexcited
RexSystem 1 vote originally by @vexcited on GitHub
Happens the same here with Forgejo. When looking at the details, Forgejo sends a POST request to the Webhook URL with the following body...
Content-Type: application/json
X-Forgejo-Delivery: dafe99be-4bf4-4621-8485-3f2dd78fa6f1
X-Forgejo-Event: action_run_success
X-Forgejo-Event-Type: action_run_success

{
  "username": "Forgejo",
  "embeds": [
    {
      "title": "feat: add twemoji country flags Action Succeeded in hq/web main",
      "description": "",
      "url": "https://code.throwdown.live/hq/web/actions/runs/60",
      "color": 1754624,
      "footer": {},
      "author": {
        "name": "Vexcited",
        "url": "https://code.throwdown.live/Vexcited",
        "icon_url": "https://code.throwdown.live/avatars/cf9eb2f14e5408329576912748877a077e8c3445b7de697f976cb4ac632ad065"
      }
    }
  ]
}
...and Fluxer replies with a 400 error,
X-Infrastructure: web-nyc-3-api
X-Request-Id: 12dd61095b5be7505545fa8ac1217cab

{"code":"INVALID_FORM_BODY","message":"Invalid form body.","errors":[{"path":"message_data","message":"Invalid message data.","code":"INVALID_MESSAGE_DATA"}]}
Not sure which part of this controller is messing up everything... https://github.com/fluxerapp/fluxer/blob/77a6897180750801cc020262c94878736ff79799/packages/api/src/webhook/WebhookController.tsx#L353-L387