Skip to content

Embed builder for Discord

Build your embed in the form and watch it in the preview as you type. The export gives you JSON, discord.js and discord.py, and every limit is counted so Discord never rejects the message.

Basics

Turns the title into a link.

Markdown is rendered: bold, italics, code, line breaks.

Six hex digits, colors the left edge.

Author

Fields

Fields are short name-and-value pairs, up to three side by side. Great for numbers, wrong for paragraphs.

Images and footer

Full width below the text.

Small, top right.

Export

Once the embed is complete, the JSON and code appear here, ready to copy.

The limits that actually bite

When an embed breaks a rule, the API answers with “Invalid Form Body” and leaves you to guess which field it means. The rules: 256 characters in the title, 4096 in the description, up to 25 fields with 256 per name and 1024 per value, 2048 in the footer. On top of that sits a combined ceiling of 6000 characters across all text in one embed.

That combined ceiling is the one that catches people, because every individual field can be within bounds while the sum is not. This builder therefore counts both ways, per field and in total, and tells you before you send anything.

From JSON to a posted message

The JSON this page produces is an embed object in the shape the Discord API expects. Through a webhook, wrap it as `{"embeds": [ … ]}` and POST it to the webhook URL. In discord.js, pass it straight into `send({ embeds: [ … ] })`; in discord.py, hydrate it with `Embed.from_dict`. A single message carries up to ten embeds.

One conversion is easy to miss: the API wants the color as a decimal integer, not a hex string. `4C8DFF` becomes `5017087`, and the builder does that for you. If you have ever wondered why `"color": "#4C8DFF"` renders no color at all, this is why.

Design notes from reading a lot of embeds

Treat an embed like a card, not an article. A title plus one or two sentences carries the message; fields work best for short pairs such as “Servers: 1,200” and fall apart when they hold paragraphs. Inline fields sit two or three to a row; a single non-inline field forces its own row.

Markdown works in the description and in field values: bold, italics, code blocks, links, even Discord timestamps. Titles and footers render everything literally. That is Discord’s behavior, not a preview quirk, so plan those two as plain text.

Frequently asked

Why does Discord reject my embed with “Invalid Form Body”?
Almost always a limit is exceeded or a field is half-filled. The usual suspects: total text above 6000 characters, a field that has a name but no value, a description past 4096 characters, or a color sent as a hex string instead of an integer. The builder checks each of these before you export.
What is the total character limit of an embed?
All text in one embed must stay within 6000 characters combined. Discord counts the title, the description, every field name and value, the footer text and the author name; URLs and the color do not count. With several embeds in one message, the 6000 apply to their sum.
How do I send this JSON through a webhook?
POST it to the webhook URL with the header Content-Type: application/json and a body of {"embeds": [your embed]}. Any HTTP client works, from curl to fetch. You create webhook URLs in the channel settings under Integrations, and you should guard them like passwords, since anyone holding one can post.
Does markdown work inside embeds?
In the description and in field values it does: bold, italics, strikethrough, code blocks, links written as [text](url), and Discord timestamps all render. Titles, footers and field names show markup literally. The preview on this page renders the common cases so you can check before posting.
Why is my embed color not showing up?
Because the API takes the color as a decimal integer such as 5017087, and silently ignores strings like "#4C8DFF". The embed then falls back to the neutral gray. Pick the color here and the export contains the correctly converted number, so this failure mode disappears.

Does your bot send embeds of its own?

Then show it off: a listing in the directory is free, and every bot is reviewed by hand.