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.
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.
Paste the JSON
An embed object, an array of embeds or a full webhook payload.
Preview It
See the card as Discord lays it out.
Check the Limits
Fix anything the check lists before sending.
Copy the Payload
POST it to your webhook URL or pass it to your bot library.
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.
“{ "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" } ] }”
“{ "title": "Server rules", "description": "1. Be kind\n2. No spam", "color": 5763719 }”
“{ "title": "Giveaway", "color": "#ff0000", "image": "https://example.com/prize.png", "fields": [ { "name": "", "value": "Ends Friday" } ], "timestamp": "next friday" }”
“{ "title": "Weekly poll", "description": "Vote with reactions: __underlined__, **bold**, ~~struck~~ and `code`", "color": 16705372 }”
“[ { "title": "Part 1", "description": "First embed" }, { "title": "Part 2", "description": "Second embed", "color": 15548997 } ]”
“{ "title": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }”
“{ "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 } ] }”
“{ "author": { "name": "Status Bot", "url": "status.example.com" }, "description": "All systems normal", "footer": { "text": "Checked every 5 minutes" } }”
“{ "content": "Heads up <@&123456789012345678>!", "embeds": [ { "title": "Maintenance tonight", "description": "22:00–23:00 UTC", "timestamp": "2026-10-28T22:00:00Z" } ] }”
“{ "title": "Empty card", "embeds_note": "this embed has a title only" }”
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.
title
Bold text at the top, linked when url is set. Up to 256 characters.
“What is the title limit?”
description
The main text, with Discord markdown. Up to 4,096 characters.
“What is the description limit?”
url
The address the title links to.
“Which key links the title?”
color
The bar colour as a whole number, such as 3108845 for #2f6fed.
“Is color a hex string?”
fields
Up to 25 name and value pairs, with inline to sit side by side.
“How many fields can an embed have?”
author
An object with name (256 characters), url and icon_url.
“What is the author name limit?”
footer
An object with text (2,048 characters) and icon_url.
“What is the footer text limit?”
image
An object whose url points at a large image under the text.
“Is image a string?”
thumbnail
An object whose url points at a small image to the right.
“Where does the thumbnail sit?”
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.
Create the Webhook
Channel settings, Integrations, Webhooks, then copy the webhook URL.
POST JSON
Send the payload with the Content-Type: application/json header.
Name and Avatar
username and avatar_url override the webhook’s defaults for one message.
Keep the URL Secret
Anyone with the webhook URL can post in that channel.
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.
Hex Colour Strings
"#ff0000" is rejected. Convert to a number such as 16711680.
Image as a String
image needs an object with url, not the address on its own.
Empty Field Values
A field needs both a name and a value, even if one is a single character.
Missing https://
Relative or bare addresses are rejected in url and image fields.
Too Many Inline Fields
Only three fit side by side on desktop, and phones stack them.
Mentions in Embeds
Mentions inside embeds don’t notify anyone. Put them in content.