AnyTool
Your files never leave your device. All processing happens locally in your browser.

How do I build a Discord embed and get the webhook JSON?

Open a client-side embed builder, fill in the author, title, description (with markdown), a colour, up to 25 fields, a thumbnail, an image and a footer, and watch a Discord dark-theme preview render it live. The tool converts your hex colour to the integer Discord expects, enforces the real limits (title 256, description 4096, field value 1024, footer 2048, 25 fields, 10 embeds and a 6000-character total) with live counters, then gives you the webhook-ready JSON to copy or download — plus a curl example. You POST that JSON to your OWN Discord webhook; the tool never calls Discord and needs no token.

  • Visual editor for up to 10 embeds plus the message content
  • Discord-accurate live preview: left colour bar, inline-field columns, Discord-flavoured markdown
  • Real 2026 limits enforced live: 256 / 4096 / 1024 / 2048 and the 6000-character cap
  • Hex colour auto-converted to Discord’s integer; copy / download JSON and a curl example
  • Import existing embed JSON to edit — 100% client-side, nothing sent to Discord

What is

Discord Embed Builder

A Discord embed builder is a tool for designing a Discord rich embed — the bordered card with an author, title, description, fields, thumbnail, image, footer and a coloured left bar — and exporting it as the JSON you POST to a Discord webhook or send from a bot. A good builder previews the embed the way the Discord client renders it, converts the picked hex colour to the integer the API expects, and enforces Discord’s character limits (including the 6000-character per-message cap across all embeds) before you send.

Social Media

Related terms

Discord webhookrich embedembed fieldswebhook payloadDiscord markdownembed color integerbot messageinline fieldscurl

Frequently Asked Questions

No. It builds and previews the embed locally and gives you the JSON; you POST it to your own webhook yourself, so no token is needed.

The builder is 100% client-side. It models, validates, previews and serialises your embed entirely in your browser and never calls a Discord webhook or any server, so you never enter a bot token or authorise anything here. When you are happy, you copy the webhook-ready JSON (or the ready curl example) and POST it to your own Discord webhook URL from your app, terminal or automation. Your webhook URL, if you type one, is used only to fill in the curl example and is never contacted, and nothing you type is uploaded, logged or stored.

Title 256, description 4096, field name 256, field value 1024, footer 2048, author 256, up to 25 fields, 10 embeds, and a 6000-character total per message.

Discord enforces per-field limits — an embed title up to 256 characters, description up to 4096, each field name up to 256 and value up to 1024, the footer up to 2048 and the author name up to 256 — plus structural limits of at most 25 fields per embed and 10 embeds per message. The one that trips people up is the total: the sum of every character across all embed structures in a single message (titles, descriptions, field names and values, footer and author text) must not exceed 6000, or Discord rejects the whole message. This tool shows a live counter for each field and a running 6000-character total so you catch an over-limit embed before you send it.

The API stores the colour as a decimal integer, not a hex string; #5865F2 becomes 5793266. The builder converts it for you.

A Discord embed’s colour field is a single integer that packs the red, green and blue bytes (it equals red×65536 + green×256 + blue, i.e. the 0xRRGGBB value read as base 10). So the blurple #5865F2 is sent as 5793266, and teal #358172 as 3506546. If you put a hex string in the JSON it is ignored or errors. This builder lets you pick a colour visually or type a hex code and automatically emits the correct integer in the payload, and shows you that integer next to the picker.

Bold, italic, underline, strikethrough, spoilers, inline code, code blocks and masked [text](url) links all work; headers and @/#mentions do not render in embeds.

Inside an embed’s description and field values Discord supports **bold**, *italic* (or _italic_), __underline__, ~~strikethrough~~, ||spoilers||, `inline code`, triple-backtick code blocks and masked links written as [label](https://…). Unlike a normal chat message, headers (# …) and subtext do not render inside embeds, and images can only be added through the image/thumbnail fields rather than inline markdown. This tool’s live preview renders the supported markdown the way Discord does so you can see the final look, but always send a quick test to a private channel because rendering can vary slightly by client.

Detailed Explanation

How It Works

What the Discord Embed Builder Does

The tool is a visual designer for Discord rich embeds — the bordered cards with a coloured left bar that bots and webhooks post. You fill in an author (name, URL, icon), a title (with an optional link), a markdown description, a colour, up to 25 fields (each name / value / inline), a thumbnail, a large image, a footer and a timestamp, and you can stack up to 10 embeds plus the plain message content. A Discord-accurate dark-theme preview updates as you type, showing the left colour bar, inline-field columns and Discord-flavoured markdown exactly where they land, and the tool outputs the webhook-ready JSON to copy or download along with a ready curl example. Crucially it never contacts Discord: it builds and previews everything locally and hands you the JSON to POST to your own webhook.

  • Author, title, description, up to 25 fields, thumbnail, image, footer, timestamp
  • Up to 10 embeds plus the message content in one payload
  • Live Discord dark-theme preview with the signature left colour bar
  • Exports webhook-ready JSON, a .json download and a curl example
Methodology

How the Model, Colour and JSON Are Built

A pure engine (discordEmbedEngine.ts) holds the embed model and does every transform with no network. Colours are converted from a #RRGGBB (or #RGB) hex string to the single decimal integer Discord stores (0xRRGGBB read as base 10), so #5865F2 becomes 5793266; the integer is shown next to the picker and written into the payload, while an invalid hex is flagged and dropped. Serialisation omits every empty part, includes a field only when it has BOTH a name and a value (Discord rejects a half-filled field), attaches the title URL only when there is a title, and emits an ISO-8601 timestamp when enabled. The description and field values are parsed by a Discord-flavoured markdown tokeniser into a node tree (bold, italic, underline, strike, spoiler, inline code, fenced code blocks and masked links) that the preview renders, and the importer reverses the process, coercing a full webhook payload, a single embed object or an array of embeds back into the editable model.

  • Hex → Discord integer colour (0xRRGGBB as decimal), invalid hex dropped
  • Empty parts omitted; a field needs both name and value or it is skipped
  • Markdown parsed into a node tree for the preview; ISO-8601 timestamps
  • Importer accepts a payload, a single embed or an array of embeds
Technical Details

Discord’s Real Limits and Field Layout

Discord enforces per-field character limits — title 256, description 4096, field name 256, field value 1024, footer 2048 and author name 256 — and structural limits of 25 fields per embed and 10 embeds per message. The subtle one is the 6000-character total: Discord sums every character across all embed structures in a message (titles, descriptions, field names and values, footer and author text) and rejects the whole message if that exceeds 6000, so several nearly-full embeds can be individually legal yet fail together. Fields also have a layout rule: consecutive inline fields pack into rows of up to three equal columns, while a non-inline field always takes a full row. This tool shows a live counter for each field, a running 6000 total and an embeds count, and its preview lays inline fields out in the same up-to-three-column grid Discord uses.

  • Per-field: title 256, desc 4096, field 256/1024, footer 2048, author 256
  • 25 fields per embed and 10 embeds per message
  • 6000-character total across ALL embeds in a message
  • Inline fields pack 3 per row; non-inline fields take a full row
Limitations

Honest Limitations

The tool builds and previews embeds but does NOT send them — there is no webhook call and no token, by design. Image, thumbnail and icon URLs are shown as sized placeholders rather than fetched, so the layout is faithful but the actual pictures only appear when Discord loads them from your public, direct URLs at post time. The limits enforced (256 / 4096 / 1024 / 2048 / 256, 25 fields, 10 embeds, 6000 total) are Discord’s real 2026 figures, but Discord can change them and applies extra server-side rules (rate limits, URL and content validation, one image per embed). Character counting uses JavaScript string length in UTF-16 code units, which can differ slightly from Discord’s count for some emoji and combined sequences. The preview approximates the Discord client and its markdown closely but is not the client, so always send a test message to a private channel before relying on an embed.

  • Builds & previews only — never sends; no token or webhook call
  • Images shown as placeholders; Discord fetches your URLs at post time
  • Limits are 2026 figures Discord can change; extra server rules apply
  • Counts use UTF-16 length; verify by sending a test to a private channel
Privacy & Security

Private by Design

Everything — the embed model, validation, live preview, colour conversion and JSON serialisation — runs on your device in JavaScript. The tool never calls a Discord webhook or any backend, so no bot token is ever requested and no message is posted from here; your webhook URL, if you type one, is used only to fill in the copyable curl example and is never contacted. Remote image URLs are shown as placeholders instead of being fetched, so no request leaves your browser for them either. Nothing you type is uploaded, logged or stored on a server, the tool works offline once cached, and closing the tab erases your work. The only optional network use anywhere on the site is consent-gated advertising, which never sees your embed content.

  • No webhook call, no backend, no bot token requested
  • Webhook URL only fills the curl example; never contacted
  • Image URLs shown as placeholders, not fetched; nothing uploaded
  • Works offline once cached; only optional network use is consent-gated ads
Discord embed limits enforced live by this builder (2026)
PartLimitHow it is counted
Title256 charactersPer embed; counts toward the 6000 total
Description4096 charactersPer embed; counts toward the 6000 total
Field name / value256 / 1024 charactersPer field, up to 25 fields per embed
Footer / author text2048 / 256 charactersPer embed; both count toward the 6000 total
Embeds per message10 embedsStructural cap per message
Total across all embeds6000 charactersSum of every embed’s text; over it the whole message is rejected

Figures reflect Discord’s documented limits in 2026 and can change without notice; Discord also applies extra server-side rules (rate limits, URL validation). Always test in a real channel.