— Discord

Free Discord Embed Builder

Paste embed or webhook JSON to preview it as Discord shows it, check it against every limit, and copy a clean payload.

— Samples
Embeds 1Problems 0Valid
Live

What is a Discord Embed Builder?

Discord embeds are the rich cards bots and webhooks post: a coloured bar, an author, a linked title, a description, fields, images and a footer. They are sent as JSON, and Discord rejects any embed that breaks one of its limits. This builder previews that JSON and checks it before you send.

It reads a single embed, an array of embeds or a whole webhook payload with content and a username, lays the message out the way Discord does, and checks every documented limit, from the 256-character title to the 6,000 characters shared across all embeds. Remote images and icons are shown as labelled placeholders rather than loaded.

Key Features

Discord-Style Preview

Colour bar, author, title, Discord markdown, inline fields, image spaces and footer.

Every Limit Checked

Title, description, fields, footer, author, embed count, total and content.

Webhook Payload

A clean JSON body with content, username and embeds, ready to POST.

Type Mistakes

Hex colour strings, image URLs as strings and invalid timestamps.

No Remote Images

Image and icon addresses show as placeholders, so nothing is fetched.

Perfect for everyone

  • Discord bot developers
  • Server admins
  • Community managers and anyone using webhooks

How to Use the Discord Embed Builder

Paste the JSON your bot sends, a webhook body, or a single embed you are drafting. The preview, payload and check all read the same JSON, so a fix in one place shows up everywhere before anything reaches your server.

1

Paste the JSON

An embed object, an array of embeds or a full webhook payload.

2

Preview It

See the card as Discord lays it out.

3

Check the Limits

Fix anything the check lists before sending.

4

Copy the Payload

POST it to your webhook URL or pass it to your bot library.

Worked Examples

Discord Embeds, Previewed and Checked

Each row is embed JSON of the kind bots and webhooks send, from a full release announcement to common mistakes. Each answer is this tool’s output in the mode on the chip: the check, the webhook payload or the HTML the preview draws.

REF_001A release announcement, checked

“{ "username": "Release Bot", "content": "New version is live! <@&123456789012345678>", "embeds": [ { "author": { "name": "Night Ferries Studio", "icon_url": "https://cdn.example.com/studio.png" }, "title": "Harbour Lights 2.4", "url": "https://example.com/changelog/2-4", "description": "Big update for **co-op** players:\n> Saves now sync across devices\nFull notes in the [changelog](https://example.com/changelog/2-4).", "color": 3108845, "fields": [ { "name": "Platforms", "value": "PC, Switch", "inline": true }, { "name": "Size", "value": "1.2 GB", "inline": true }, { "name": "Known issue", "value": "||The lighthouse boss can clip through walls||" } ], "thumbnail": { "url": "https://cdn.example.com/icon.png" }, "footer": { "text": "Patch 2.4.0" }, "timestamp": "2026-10-27T18:00:00.000Z" } ] }”

REF_002A bare embed as a webhook payload

“{ "title": "Server rules", "description": "1. Be kind\n2. No spam", "color": 5763719 }”

REF_003Four common mistakes

“{ "title": "Giveaway", "color": "#ff0000", "image": "https://example.com/prize.png", "fields": [ { "name": "", "value": "Ends Friday" } ], "timestamp": "next friday" }”

REF_004Markdown in a description as HTML

“{ "title": "Weekly poll", "description": "Vote with reactions: __underlined__, **bold**, ~~struck~~ and `code`", "color": 16705372 }”

REF_005Two embeds as a payload

“[ { "title": "Part 1", "description": "First embed" }, { "title": "Part 2", "description": "Second embed", "color": 15548997 } ]”

REF_006A title over 256 characters

“{ "title": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }”

REF_00726 fields

“{ "fields": [ { "name": "Field 1", "value": "ok", "inline": true }, { "name": "Field 2", "value": "ok", "inline": true }, { "name": "Field 3", "value": "ok", "inline": true }, { "name": "Field 4", "value": "ok", "inline": true }, { "name": "Field 5", "value": "ok", "inline": true }, { "name": "Field 6", "value": "ok", "inline": true }, { "name": "Field 7", "value": "ok", "inline": true }, { "name": "Field 8", "value": "ok", "inline": true }, { "name": "Field 9", "value": "ok", "inline": true }, { "name": "Field 10", "value": "ok", "inline": true }, { "name": "Field 11", "value": "ok", "inline": true }, { "name": "Field 12", "value": "ok", "inline": true }, { "name": "Field 13", "value": "ok", "inline": true }, { "name": "Field 14", "value": "ok", "inline": true }, { "name": "Field 15", "value": "ok", "inline": true }, { "name": "Field 16", "value": "ok", "inline": true }, { "name": "Field 17", "value": "ok", "inline": true }, { "name": "Field 18", "value": "ok", "inline": true }, { "name": "Field 19", "value": "ok", "inline": true }, { "name": "Field 20", "value": "ok", "inline": true }, { "name": "Field 21", "value": "ok", "inline": true }, { "name": "Field 22", "value": "ok", "inline": true }, { "name": "Field 23", "value": "ok", "inline": true }, { "name": "Field 24", "value": "ok", "inline": true }, { "name": "Field 25", "value": "ok", "inline": true }, { "name": "Field 26", "value": "ok", "inline": true } ] }”

REF_008An author link without https

“{ "author": { "name": "Status Bot", "url": "status.example.com" }, "description": "All systems normal", "footer": { "text": "Checked every 5 minutes" } }”

REF_009Content and a timestamp as HTML

“{ "content": "Heads up <@&123456789012345678>!", "embeds": [ { "title": "Maintenance tonight", "description": "22:00–23:00 UTC", "timestamp": "2026-10-28T22:00:00Z" } ] }”

REF_010A title-only embed, checked

“{ "title": "Empty card", "embeds_note": "this embed has a title only" }”

Field Reference

Embed Fields and Their Limits

An embed is a JSON object with a handful of optional keys. These are the ones Discord displays, what each one shows, and the character limit or format Discord enforces for it when the message is sent.

01 / TITLE

title

Bold text at the top, linked when url is set. Up to 256 characters.

“What is the title limit?”

02 / DESCRIPTION

description

The main text, with Discord markdown. Up to 4,096 characters.

“What is the description limit?”

03 / URL

url

The address the title links to.

“Which key links the title?”

04 / COLOR

color

The bar colour as a whole number, such as 3108845 for #2f6fed.

“Is color a hex string?”

05 / FIELDS

fields

Up to 25 name and value pairs, with inline to sit side by side.

“How many fields can an embed have?”

06 / AUTHOR

author

An object with name (256 characters), url and icon_url.

“What is the author name limit?”

07 / FOOTER

footer

An object with text (2,048 characters) and icon_url.

“What is the footer text limit?”

08 / IMAGE

image

An object whose url points at a large image under the text.

“Is image a string?”

09 / THUMBNAIL

thumbnail

An object whose url points at a small image to the right.

“Where does the thumbnail sit?”

10 / TIMESTAMP

timestamp

An ISO 8601 date, shown in each reader’s own time zone.

“What format is the timestamp?”

Message-Wide Limits

Some limits apply to the whole message rather than one embed. They catch bots that build embeds in a loop, where every embed looks fine on its own but the message as a whole is too big and the send fails.

Ten Embeds

A single message can carry up to 10 embeds.

6,000 Characters

Titles, descriptions, field names and values, footers and author names across all embeds share 6,000.

2,000 for Content

The plain text above the embeds is limited to 2,000 characters.

Splitting Long Output

Send logs or long lists across several messages rather than one.

Errors Name the Field

Discord’s 400 errors point at the field path, such as embeds.0.fields.3.value.

Sending With a Webhook

A webhook is the quickest way to post an embed without writing a bot. You create one in a channel’s settings and send it a JSON body. The payload view gives you exactly that body, ready to use.

Tip 01

Create the Webhook

Channel settings, Integrations, Webhooks, then copy the webhook URL.

Tip 02

POST JSON

Send the payload with the Content-Type: application/json header.

Tip 03

Name and Avatar

username and avatar_url override the webhook’s defaults for one message.

Tip 04

Keep the URL Secret

Anyone with the webhook URL can post in that channel.

Tip 05

Attachments

Use attachment://name.png in image fields when uploading files with the message.

When to Use an Embed Builder

Whenever a bot, webhook or integration posts rich messages, and you want to see them and catch errors before the server’s members do.

Bot Development

Check embeds your code builds before shipping a command.

Announcements

Draft release notes and event posts with fields and images.

Alerts

Make monitoring and CI webhooks readable in a channel.

Debugging 400 Errors

Find which limit or type made Discord reject a message.

Server Rules

Lay out rules and info channels as tidy embeds.

Embed Pitfalls

Mistakes that make Discord reject an embed or show it differently than planned, most of which come from types rather than text.

Tip 01

Hex Colour Strings

"#ff0000" is rejected. Convert to a number such as 16711680.

Tip 02

Image as a String

image needs an object with url, not the address on its own.

Tip 03

Empty Field Values

A field needs both a name and a value, even if one is a single character.

Tip 04

Missing https://

Relative or bare addresses are rejected in url and image fields.

Tip 05

Too Many Inline Fields

Only three fit side by side on desktop, and phones stack them.

Tip 06

Mentions in Embeds

Mentions inside embeds don’t notify anyone. Put them in content.

Frequently Asked Questions