Complete Guide to Discord Embed Formatting
Master Discord embed builder techniques: fields, colors, images, footers, timestamps, and character limits. Includes practical examples and best practices.
What Are Discord Embeds?
Discord embeds are rich message components that display formatted content with colors, images, fields, and structured layouts. Unlike plain text messages, embeds let you create visually organized information blocks that stand out in chat.
Embeds are commonly used for:
- Bot responses and notifications
- Status dashboards and monitoring alerts
- News feeds and content aggregation
- Game stats and leaderboards
- Documentation and help commands
This guide covers every embed property, character limits, and practical formatting techniques.
Basic Embed Structure
A minimal embed requires just a description or title:
{
"embeds": [{
"title": "Hello World",
"description": "This is a basic embed.",
"color": 5814783
}]
}
The embeds array can contain up to 10 embed objects per message.
Embed Properties Reference
Title and Description
The title appears as bold text at the top, while the description provides the main content:
{
"embeds": [{
"title": "Server Maintenance Notice",
"description": "The server will be offline for maintenance on March 25th from 2:00 AM to 4:00 AM UTC.\n\nExpected downtime: 2 hours",
"color": 16776960
}]
}
Limits:
- Title: 256 characters
- Description: 4096 characters
Use \n for line breaks in the description.
Color
The color property sets the left border color. It accepts a decimal integer:
{
"embeds": [{
"title": "Status: Online",
"color": 5763719
}]
}
Common colors:
- Red:
15548997(#ED4245) - Green:
5763719(#57F287) - Blue:
3447003(#3498DB) - Discord Blurple:
5793266(#5865F2) - Yellow:
16776960(#FFFF00) - Orange:
15105570(#E67E22) - Purple:
10181046(#9B59B6)
Convert hex colors to decimal: parseInt("5865F2", 16) returns 5793266.
URL
Make the title clickable by adding a URL:
{
"embeds": [{
"title": "Read the Documentation",
"url": "https://discord.com/developers/docs",
"description": "Click the title to view the full API reference.",
"color": 5793266
}]
}
The URL must be a valid HTTP/HTTPS link.
Timestamp
Add an ISO 8601 timestamp to display a formatted date/time in the footer:
{
"embeds": [{
"title": "Deployment Complete",
"description": "Version 2.4.1 deployed successfully.",
"color": 5763719,
"timestamp": "2025-03-22T14:30:00.000Z"
}]
}
Discord automatically formats the timestamp based on the user’s locale and timezone. In JavaScript: new Date().toISOString().
Footer
The footer appears at the bottom with optional icon:
{
"embeds": [{
"title": "System Alert",
"description": "High CPU usage detected.",
"footer": {
"text": "Monitoring Bot v1.2",
"icon_url": "https://example.com/bot-icon.png"
},
"timestamp": "2025-03-22T14:30:00.000Z"
}]
}
Limits:
- Footer text: 2048 characters
- Icon URL must be a valid image URL (HTTPS recommended)
Author
The author section displays above the title:
{
"embeds": [{
"author": {
"name": "GitHub",
"url": "https://github.com",
"icon_url": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
},
"title": "New Pull Request",
"description": "User @johndoe opened PR #42: Fix authentication bug"
}]
}
Limits:
- Author name: 256 characters
Fields
Fields create a grid layout for structured data. Each field has a name, value, and optional inline property:
{
"embeds": [{
"title": "Server Statistics",
"color": 5793266,
"fields": [
{
"name": "Total Members",
"value": "1,234",
"inline": true
},
{
"name": "Online Now",
"value": "567",
"inline": true
},
{
"name": "Active Today",
"value": "892",
"inline": true
},
{
"name": "Top Channel",
"value": "#general (4,521 messages)",
"inline": false
}
]
}]
}
Limits:
- Maximum 25 fields per embed
- Field name: 256 characters
- Field value: 1024 characters
Inline behavior:
inline: trueplaces fields side-by-side (up to 3 per row)inline: falsecreates a full-width field- Mix inline and non-inline fields to create custom layouts
Images
Add a large image below the description:
{
"embeds": [{
"title": "New Artwork",
"description": "Check out this amazing fan art!",
"image": {
"url": "https://example.com/artwork.png"
},
"color": 10181046
}]
}
The image scales to fit the embed width (max 400px wide).
Thumbnail
Add a small image in the top-right corner:
{
"embeds": [{
"title": "User Profile",
"description": "Level 42 Warrior",
"thumbnail": {
"url": "https://example.com/avatar.png"
},
"color": 15105570
}]
}
Thumbnails display at 80x80 pixels.
Video
Embeds can include video URLs, but this only works for auto-embedded links (YouTube, Twitch, etc.). Webhooks cannot directly embed arbitrary videos.
{
"embeds": [{
"title": "Tutorial Video",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}]
}
Discord will auto-embed the video player if the URL is supported.
Complete Example: Rich Embed
Here’s a full-featured embed using multiple properties:
{
"embeds": [{
"author": {
"name": "Weather Bot",
"icon_url": "https://example.com/weather-icon.png"
},
"title": "Weather Forecast - San Francisco",
"url": "https://weather.example.com/san-francisco",
"description": "Partly cloudy with a chance of rain in the evening.",
"color": 3447003,
"fields": [
{
"name": "Temperature",
"value": "18°C / 64°F",
"inline": true
},
{
"name": "Humidity",
"value": "65%",
"inline": true
},
{
"name": "Wind Speed",
"value": "12 km/h NW",
"inline": true
},
{
"name": "UV Index",
"value": "Moderate (5)",
"inline": true
},
{
"name": "Precipitation",
"value": "30% chance",
"inline": true
},
{
"name": "Visibility",
"value": "10 km",
"inline": true
}
],
"thumbnail": {
"url": "https://example.com/partly-cloudy.png"
},
"footer": {
"text": "Data from OpenWeatherMap",
"icon_url": "https://example.com/owm-icon.png"
},
"timestamp": "2025-03-22T14:30:00.000Z"
}]
}
Character Limits Summary
Discord enforces strict limits on embed content:
| Property | Limit |
|---|---|
| Title | 256 characters |
| Description | 4096 characters |
| Fields (total) | 25 fields |
| Field name | 256 characters |
| Field value | 1024 characters |
| Footer text | 2048 characters |
| Author name | 256 characters |
| Total characters | 6000 characters |
The total character count includes all text across title, description, field names, field values, footer, and author name.
Multiple Embeds
Send up to 10 embeds in a single message:
{
"embeds": [
{
"title": "Embed 1",
"description": "First embed content",
"color": 15548997
},
{
"title": "Embed 2",
"description": "Second embed content",
"color": 5763719
}
]
}
This is useful for:
- Paginated data (e.g., multiple search results)
- Grouped information (e.g., separate embeds for different categories)
- Visual separation of unrelated content
Common Formatting Techniques
Markdown in Embeds
Embed descriptions and field values support Discord markdown:
{
"embeds": [{
"description": "**Bold text**\n*Italic text*\n__Underline__\n~~Strikethrough~~\n`Code`\n```Code block```\n[Link](https://example.com)"
}]
}
Empty Field Values
Discord requires non-empty field values. Use a zero-width space for “blank” fields:
{
"fields": [
{
"name": "Section Divider",
"value": "\u200b",
"inline": false
}
]
}
Progress Bars
Create visual progress bars using Unicode block characters:
{
"fields": [
{
"name": "Download Progress",
"value": "█████████░░░░░░░ 60%",
"inline": false
}
]
}
Tables
Use code blocks with monospace formatting for aligned tables:
{
"description": "```\nName | Score\n------------|------\nAlice | 95\nBob | 87\nCharlie | 92\n```"
}
Best Practices
Keep it concise: Users skim embeds. Put the most important information in the title and first few fields.
Use color meaningfully: Green for success, red for errors, yellow for warnings. Consistent color coding improves readability.
Optimize field layout: Use inline fields for compact data (stats, metrics). Use full-width fields for longer text.
Test on mobile: Embeds render differently on mobile. Inline fields stack vertically on small screens.
Avoid walls of text: Break long descriptions into fields or multiple embeds.
Include timestamps: For time-sensitive information (alerts, logs, events), always add a timestamp.
Troubleshooting
Embed not appearing: Check that your JSON is valid and the webhook URL is correct. Use a JSON validator.
Images not loading: Ensure image URLs are publicly accessible and use HTTPS. Discord blocks HTTP images.
Character limit exceeded: Discord silently truncates embeds that exceed 6000 total characters. Validate your content length.
Fields not inline: Inline fields require exactly 3 or fewer fields in a row. The 4th field wraps to a new line.
Next Steps
Now you understand every aspect of Discord embed formatting. To design complex embeds visually without writing JSON by hand, try our free Discord Webhook Builder. Build your embed layout, preview it in real-time, then export the JSON for use in your applications.
Beyond embeds, discord-webhook.com also supports polls for gathering community feedback, scheduled messages for timed announcements, and interactive buttons with actions that let users assign roles and submit forms — all configurable through the visual builder.
Related Articles
- Discord Embed Colors - Complete Color Code Reference Guide — Master Discord embed colors with hex codes, decimal values, and color picker tools
- Discord Components V2: Buttons, Selects, and Text Inputs in Webhooks — Learn how to add interactive buttons, select menus, and text inputs to webhook messages
- How to Send Discord Webhook Messages with Python — A practical guide to sending Discord webhook messages using Python and the requests library
- Best Discohook Alternative — Compare Discord webhook builders and find the best Discohook replacement
- Thread and Forum Support for Webhooks — Send webhook messages to threads and create forum posts
- Interactive Buttons and Actions — Add buttons that assign roles, open forms, and trigger automations
Try it in our tool
Open Discord Webhook Builder