Discord webhooks let you send automated messages from external apps or scripts to a text channel. A single webhook message can include one embed, but you may want to send several embeds in one message to display related data together. This article explains how to structure a JSON payload that contains multiple embeds and how to send it using a simple POST request. You will learn the exact format required by Discord’s webhook API and see a working example you can adapt.
Key Takeaways: Sending Multiple Embeds via Discord Webhook
- JSON payload with “embeds” array: Replace the single “embed” object with an array of embed objects to send up to 10 embeds per message.
- POST request to webhook URL: Use any HTTP client like curl or Postman with Content-Type: application/json to deliver the payload.
- Embed object structure: Each embed requires a title or description; optional fields include fields, color, footer, image, and thumbnail.
Understanding Discord Webhook Embeds
A Discord webhook is a simple way to send messages to a channel without a bot. The webhook receives a JSON payload via an HTTP POST request. The payload can contain a content string and an embeds array. Each embed in the array is a separate rich card with its own title, description, fields, color, footer, and media.
The key requirement is that the payload uses the key embeds (plural) and sets its value to an array, not a single object. A common mistake is to use embed (singular) with multiple objects. That format only works for one embed. When you switch to the array format, Discord processes each embed and displays them stacked vertically in the channel.
Each embed object supports these fields:
- title: The bold heading of the embed.
- description: The main text body.
- url: Makes the title a clickable link.
- color: A decimal integer representing the sidebar color.
- fields: An array of inline or non-inline name/value pairs.
- footer: An object with
textand optionalicon_url. - image: An object with a
urlproperty for the large image. - thumbnail: An object with a
urlproperty for the small image in the top right. - author: An object with
nameand optionalurlandicon_url. - timestamp: An ISO 8601 date string displayed below the embed.
The maximum number of embeds per webhook message is 10. If you send more than 10, Discord returns a 400 Bad Request error. Also, the total character count across all embeds in a message cannot exceed 6000 characters.
Steps to Send a Webhook With Multiple Embeds
Follow these steps to create and send a webhook payload that contains multiple embeds. You need the webhook URL from your Discord server. If you do not have one, go to Server Settings > Integrations > Webhooks and click New Webhook.
Method 1: Using curl in a Terminal
- Prepare the JSON payload
Create a file namedpayload.jsonwith the following structure. Replace the example values with your own content.{ "content": "Here are the latest reports", "embeds": [ { "title": "Sales Summary", "description": "Monthly sales figures for Q3", "color": 5814783, "fields": [ {"name": "Revenue", "value": "$45,200", "inline": true}, {"name": "Expenses", "value": "$22,100", "inline": true} ] }, { "title": "Support Tickets", "description": "Open tickets by priority", "color": 16711680, "fields": [ {"name": "High", "value": "12", "inline": true}, {"name": "Medium", "value": "34", "inline": true}, {"name": "Low", "value": "28", "inline": true} ] } ] } - Send the POST request
Run this curl command in your terminal. ReplaceYOUR_WEBHOOK_URLwith the actual URL.curl -X POST -H "Content-Type: application/json" -d @payload.json YOUR_WEBHOOK_URL
- Verify the output
If successful, Discord returns a 204 No Content response and the message appears in the channel with both embeds stacked.
Method 2: Using a Programming Language
- Create the payload in your code
Below is a Python example using therequestslibrary. Install it withpip install requestsif needed.import requests import json webhook_url = "YOUR_WEBHOOK_URL" payload = { "content": "Automated build report", "embeds": [ { "title": "Build Status", "description": "All tests passed", "color": 3066993, "fields": [ {"name": "Commit", "value": "a1b2c3d", "inline": true}, {"name": "Branch", "value": "main", "inline": true} ] }, { "title": "Deployment", "description": "Staging environment updated", "color": 3447003, "fields": [ {"name": "Server", "value": "staging-01", "inline": true}, {"name": "Version", "value": "2.5.1", "inline": true} ] } ] } response = requests.post(webhook_url, json=payload) print(response.status_code) - Run the script
Execute the Python file. A status code of 204 means the webhook succeeded. Check your Discord channel for the two embeds.
Common Mistakes When Sending Multiple Embeds
Using “embed” Instead of “embeds”
The most frequent error is sending a payload with the key embed set to an array. Discord only reads embed as a single object. If you pass an array to embed, Discord ignores all but the first element. Always use embeds (plural) as the key.
Exceeding the 10-Embed Limit
If your payload contains 11 or more embeds, Discord returns a 400 Bad Request with the message “Embed size exceeded.” Count your embeds before sending. If you need more than 10, split the content into multiple webhook messages sent sequentially.
Exceeding the Character Limit
The total combined character count of all titles, descriptions, field names, field values, footer text, and author names across all embeds must not exceed 6000 characters. If you exceed the limit, Discord returns a 400 error. Reduce the length of your descriptions or fields to stay under the limit.
Missing Required Fields in an Embed
Each embed must have at least a title or a description. If an embed object lacks both, Discord rejects the entire payload. Always provide at least one of these fields for every embed in the array.
| Property | Single Embed | Multiple Embeds |
|---|---|---|
| JSON key | embed (object) |
embeds (array) |
| Maximum count | 1 | 10 |
| Character limit | 6000 total | 6000 total across all embeds |
| Field inline support | Yes | Yes |
| Color per embed | Yes | Yes, each embed has its own color |
You can now send a Discord webhook with multiple embeds using the correct JSON structure. Start by creating a payload with the embeds array and test it with a simple curl command. For automated workflows, embed the payload in a script using Python, JavaScript, or any language that supports HTTP POST. To reduce errors, validate your JSON with a linter before sending and always include a title or description in every embed.