How to Create a Discord Embed Without a Bot
You have seen them in every well-run Discord server — those clean, colored message cards with titles, descriptions, and structured fields. You want one for your announcements channel, but you do not have a bot and you do not want to write code.
The good news: you do not need either. Discord webhooks let any application (or your browser) send messages to a channel — including rich embeds. This guide walks through the entire process, from creating the webhook to sending your first embed, using only a browser.
What Is a Discord Webhook?
A webhook is a unique URL tied to a specific Discord channel. Any HTTP POST request sent to that URL with the correct JSON will appear as a message in the channel. No bot required, no coding required — just a URL and the right data.
Webhooks look like this:
https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz
They post as a "webhook bot" identity — the name and avatar you set when creating the webhook (or override per message). Webhooks cannot read messages, moderate users, or perform any server actions — they only post messages. This makes them safe to use for automated announcements and integrations.
Step 1: Create a Webhook in Your Discord Server
- Open Discord and go to the channel where you want to send the embed
- Click the gear icon next to the channel name to open channel settings
- Click Integrations in the left sidebar
- Click Webhooks, then New Webhook
- Set a name and optionally upload an avatar for the webhook bot
- Click Copy Webhook URL — save this, you will need it shortly
- Click Save
Keep this URL private. Anyone with the URL can post to your channel. If it gets leaked, delete it in the same Integrations → Webhooks menu and create a new one.
Step 2: Build Your Embed
Open our Discord Embed Builder — it is a visual editor with a live Discord-style preview and a JSON tab that shows the final payload.
The embed structure has several parts:
Title and Description
The title is the bold header line at the top of the embed (max 256 characters). It can be made clickable by adding a URL. The description is the main body text (max 4096 characters) and supports Discord markdown — **bold**, *italic*, `code`, and [links](url).
Color
The colored left border that makes embeds visually distinct. In the builder, pick any hex color — it is automatically converted to the decimal integer Discord requires in the API. This is one of the most common confusion points: Discord does not accept #hex colors in JSON, only decimal numbers. The builder handles this for you.
Fields
Fields are name/value pairs that appear below the description. You can have up to 25 fields. Mark a field as inline to display it side-by-side with the next inline field (up to 3 per row). Use fields for structured data like stats, settings, or schedules.
Author, Thumbnail, Image, Footer
- Author — small text + optional icon above the title. Good for branding ("Posted by Staff Team")
- Thumbnail — small image in the top-right corner of the embed
- Image — large image below the description
- Footer — small text at the bottom, often used for timestamps or disclaimers
Character Limits to Know
| Field | Limit |
|---|---|
| Title | 256 characters |
| Description | 4,096 characters |
| Field name | 256 characters |
| Field value | 1,024 characters |
| Footer text | 2,048 characters |
| Author name | 256 characters |
| Total embed | 6,000 characters |
| Embeds per message | 10 |
The 6,000 total character limit is the most commonly hit — Discord silently truncates or rejects embeds that exceed it with no clear error. Count your characters if you have a lot of fields.
Step 3: Preview Your Embed
Switch to the Preview tab in the embed builder to see a simulated Discord dark-theme rendering. Check that:
- Text length is readable and not overflowing
- Inline fields align correctly
- The color border is visible
- Image URLs load correctly (must be publicly accessible)
The preview is a close approximation. Minor differences may appear in the real Discord client for complex markdown or animated images.
Step 4: Send the Embed via Webhook
Switch to the JSON tab and copy the full payload. Then use our Discord Webhook Sender to POST it, or use curl:
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "Announcement",
"description": "Your embed content here.",
"color": 5793266
}]
}'
A successful delivery returns HTTP 204 No Content — no response body, just a status code. If you get 400, the JSON structure is invalid. If you get 404, the webhook URL was deleted.
Real-World Embed Templates
Server Announcement
{
"embeds": [{
"title": "📢 Important Announcement",
"description": "We are launching a new events channel. All upcoming events will be posted there.",
"color": 5793266,
"footer": { "text": "QuickWebTools Staff Team" },
"timestamp": "2026-04-25T18:00:00.000Z"
}]
}
Weekly Update with Fields
{
"embeds": [{
"title": "📅 Week 17 Update",
"color": 3066993,
"fields": [
{ "name": "New Members", "value": "47 this week", "inline": true },
{ "name": "Messages Sent", "value": "12,483", "inline": true },
{ "name": "Top Channel", "value": "#general", "inline": true }
],
"footer": { "text": "Stats auto-generated every Sunday" }
}]
}
Frequently Asked Questions
Do embeds show on Discord mobile?
Yes. Discord embeds render on iOS, Android, and all desktop clients. The layout adapts — inline fields may stack vertically on small screens to remain readable.
Can I use images from any URL?
The image must be publicly accessible over HTTPS. Discord fetches and caches it when rendering. Supported formats are PNG, JPG, GIF, and WebP. A URL behind authentication or on a private server will not load.
Can I edit a sent embed?
Webhooks can edit their own previously sent messages using a PATCH request to /webhooks/{id}/{token}/messages/{message_id}. The embed builder JSON tab output can be used as the PATCH body.
How many embeds can I send per minute?
Discord applies rate limits of approximately 30 requests per minute per webhook. If you are sending automated embeds at high frequency, space them out. The rate limit resets every 60 seconds.
Can I mention @everyone in an embed?
Mentions in embed fields are not pinged — they display as text only. To trigger a real notification ping alongside an embed, include the mention in the content field (the plain text message that accompanies the embeds array).