Create a webhook
Make a Discord webhook in the target channel and copy the URL.
This is the builder manual: how to send with a webhook, switch to channel delivery for buttons, load existing messages, structure embeds, manage files, stay inside Discord limits, and avoid the small mistakes that usually turn into rejected payloads.
If you are brand new to Meowhook, do these steps in order first. The later sections explain each area in more depth.
Make a Discord webhook in the target channel and copy the URL.
Meowhook validates it and shows webhook info when available.
Write content, add embeds, upload files, or start from a template.
The preview mirrors visible messages and lets you click back into the editor.
Send stays disabled until the full sequence is valid.
Use message IDs to load, edit, or delete messages from the same webhook.
The screen has five areas, but in practice you will live in two of them and only dip into the others when you need to.
Each card is one webhook message inside the current sequence. You can duplicate, delete, or extend the sequence up to ten messages.
Validate the webhook, confirm the endpoint, and reuse saved webhook shortcuts stored locally.
Paste a raw message ID or full Discord message link to load, edit, or delete messages sent by the same webhook.
Override username and avatar per message without changing the webhook globally.
Write message text with markdown preview, quick actions, and an expanded editor with formatting tools and its own undo/redo.
Upload content files and see total upload usage across files plus embed media in one shared slot counter.
Control message-level behaviors like suppressed embeds and other send-time flags surfaced in preview.
\n and \t are interpreted in preview and payload generation.Use this path when you want buttons, custom bot identity, or the Meowhook right-click tools inside Discord.
Webhook mode is best for plain sends. Channel mode unlocks buttons and uses a managed webhook so you can set a custom name and avatar.
Meowhook reads the servers you can manage. Servers with the bot installed show a checkmark; others say “needs bot”.
If a server says “needs bot”, click Add bot once. The bot creates a webhook in the chosen channel automatically.
Set a custom username and avatar in the profile section. Link buttons open a URL; custom buttons send their ID to your bot logic.
Embeds are modular. You can mix and match content pieces, reorder them, and move whole embeds between messages.
Titles, descriptions, URLs, color, author, fields, images, thumbnails, footer, and timestamp can be combined as Discord allows.
Fields can be inline or full-width, moved up or down, duplicated, and removed. Partial fields are highlighted until both name and value exist.
Author icons, footer icons, thumbnails, and large images can use URLs or uploaded files, but uploaded versions count toward the same upload budget.
Embeds reorder inside a message or move to another message. When moved, their attachment ownership moves too and the target message takes over the counts.
It mirrors the visible message sequence, shows readiness state, and lets you click specific content back into focus.
Content, embeds, grouped fields, attachments, profile overrides, suppressed-embed states, and sequence grouping.
Click avatars for profile settings, content blocks for text, files for uploads, and embeds or fields for their exact editor controls.
Use zoom controls for visual inspection and watch the ready/incomplete state so you know whether the current sequence can send.
Meowhook gives you several layers of persistence depending on whether you want local convenience, a full backup, or a shareable URL.
Drafts autosave locally, can be renamed and reordered, and stay tied to the current browser profile.
Use built-in layouts or save local custom templates from your current draft structure.
Save browser backups for quick restore and export JSON when you need portability between devices or profiles.
Create a shareable design link without exposing the webhook secret inside the URL.
The action bar is intentionally strict so malformed Discord payloads do not slip through as easily.
Each message is checked for real content, embed validity, and hard limit violations before send is allowed.
Messages are sent in order, and progress reflects the current step instead of pretending a partial failure was a full success.
Rate limits and wait states are surfaced in the UI so you know why uploads or sends are temporarily blocked.
A common webhook mistake is an embed with a color, footer, and author, but no title, description, field, image, or thumbnail. It looks styled, so it feels done, but Discord still treats it as empty. If the send button stays disabled, this is one of the first things to check.
If you load an old webhook message that had files, Meowhook can often show the attachment in preview because Discord already has a URL for it. That does not mean your browser still has the original upload blob needed to send it again. If Meowhook tells you to re-upload, it is not being picky; it is avoiding a broken resend.
These are not the features you notice in the first thirty seconds. They are the ones you end up relying on once the builder becomes part of your normal workflow.
The JSON editor is useful when someone hands you a raw payload or when you are comparing Meowhook output to Discord docs line by line. The feedback form is worth using when something visual is off and a screenshot explains it faster than a paragraph. Mobile mode is good enough for edits and checks, but if you are building a long multi-message draft from scratch, desktop is still the better place to do it.
These are the numbers that most often decide whether a payload is accepted or rejected.
| Item | Limit | Why it matters |
|---|---|---|
| Messages per sequence | 10 | A single draft can send up to ten webhook messages in order. |
| Embeds per message | 10 | Every message card can hold up to ten embeds. |
| Uploaded attachments per message | 10 | Files plus uploaded embed media share the same slot budget. |
| Message content | 2,000 chars | Whitespace-only text is treated as empty content. |
| Embed title | 256 chars | Over-limit titles will be rejected by Discord. |
| Embed description | 4,096 chars | Markdown still counts against the raw length. |
| Fields per embed | 25 | Each field needs a name and value for a valid result. |
| Field name / value | 256 / 1,024 chars | Inline mode changes layout, not the character budget. |
| Footer text | 2,048 chars | Can be combined with a timestamp. |
| Total embed characters | 6,000 chars | Discord counts the whole embed object. |
These are the mistakes and Discord responses people actually run into while testing webhook messages.
Message not found - wrong ID or different webhook: the pasted message was not sent by this webhook, or the ID/link is wrong.Nothing to send: the message has no text, no valid embed content, and no uploaded file.Field row incomplete: one embed field has only a name or only a value.Embed needs visible content: color, footer, or author styling is present, but there is still no title, description, field, image, or thumbnail.Too many uploaded attachments: content files and uploaded embed media together went over Discord's 10-upload cap for one message.Files need to be re-uploaded: imported or loaded file metadata is present, but the browser no longer has the real upload blob needed to send it again.This almost always means the message belongs to another webhook. Webhook routes can only edit messages created by that same webhook.
Usually one embed is technically empty, one field row is partial, or the current message has a limit violation that is easy to miss in a long draft.
Switch the draft to Channel mode, then confirm the selected server says Ready before you expect buttons to send.
If you refreshed, imported, or loaded an older draft, preview URLs can survive as display data even though the original local file no longer exists for a real upload.
That is expected. Draft storage is local until you export it, make a backup in the same browser, or generate a share link.