When you send a message through a Discord webhook, the content often gets cut off at exactly 2000 characters with no error or warning. This happens because Discord enforces a strict 2000-character limit on the content field in webhook payloads. If your message exceeds this limit, Discord silently truncates the text, and you lose the remaining characters. This article explains why truncation occurs, how to split or restructure your payload to avoid hitting the limit, and what to do if your data still gets cut off.
Key Takeaways: Fixing Discord Webhook Truncation at 2000 Characters
- Use
embedsinstead ofcontentfor long text: Embeds allow up to 6000 characters in thedescriptionfield and support multiple fields. - Split your payload into multiple webhook calls: Send separate messages in sequence if the total text exceeds 6000 characters.
- Check character count before sending: Validate the length of
contentanddescriptionin your code to avoid silent truncation.
Why Discord Webhooks Truncate Content Without Notice
Discord webhooks accept a JSON payload with several fields. The content field holds plain text and is limited to 2000 characters. If you send a payload where content exceeds 2000 characters, Discord accepts the request with a 200 OK response but cuts the message at character 2000. No error is returned, so many developers assume the message was sent in full.
The root cause is that Discord prioritizes performance over strict validation. Rather than rejecting the payload and forcing the sender to fix it, Discord silently truncates the text to fit its internal limits. This behavior applies to both webhooks created via Server Settings > Integrations and those sent through the Discord API.
Discord Webhook Character Limits by Field
The limits vary depending on which field you use:
- content: 2000 characters
- embeds[0].description: 4096 characters (up to 6000 for bot accounts with certain permissions)
- embeds[0].title: 256 characters
- embeds[0].fields[].name: 256 characters
- embeds[0].fields[].value: 1024 characters
- embeds[0].footer.text: 2048 characters
- embeds[0].author.name: 256 characters
If you need to send more than 6000 total characters, you must split the message across multiple webhook calls.
Steps to Fix Webhook Truncation by Using Embeds
- Convert your payload from
contenttoembeds
Replace thecontentfield with anembedsarray. Move the main body of text intoembeds[0].description. This field allows up to 4096 characters. Example payload structure:{ "embeds": [{ "description": "Your long text here..." }] } - Split the text into multiple embed fields
If your text exceeds 4096 characters, break it into logical sections. Put each section into a separate embed object within theembedsarray. Each embed object can have its owndescriptionup to 4096 characters. You can send up to 10 embeds per webhook call, giving a total capacity of 40,960 characters. - Use
fieldsinside a single embed for structured data
If your content is tabular or has labeled sections, use thefieldsarray inside one embed. Each field has anameandvalue. Thevaluecan hold up to 1024 characters. You can include up to 25 fields per embed, allowing 25,600 characters of structured content. - Send multiple webhook calls in sequence
If your total text exceeds 40,960 characters, write a loop in your code that splits the text into chunks. For each chunk, send a separate POST request to the webhook URL. Add a small delay (500ms) between calls to avoid rate limiting. - Validate character count before sending
In your code, check the length ofcontentand eachdescriptionbefore sending. If the length exceeds the limit, raise an error or automatically switch to split mode. This prevents silent truncation.
If Discord Still Truncates or Rejects the Webhook
Webhook Content Still Gets Cut Off at 2000 Characters
This usually means you are still using the content field instead of embeds. Double-check your JSON payload. If you see "content": "..." with a long string, replace it with an embeds array. Also verify that you are not accidentally sending two payloads where the first one uses content and the second uses embeds.
Webhook Returns a 400 Bad Request
A 400 error means your payload is malformed or exceeds limits in a way Discord rejects. Common causes include:
- Embed
descriptionexceeds 4096 characters - More than 10 embeds in one payload
- Embed
fieldsarray has more than 25 items - Total payload size exceeds 8 MB
Check the error response body for details. Discord returns a JSON object with a message field that describes the issue.
Message Appears but Is Missing Some Text
This can happen if you have multiple embeds and one of them has a description that exceeds 4096 characters. Discord truncates that embed silently. Validate each embed individually before sending. Also check that you are not mixing content and embeds in the same payload, because content is still limited to 2000 characters.
Webhook Content vs Embeds: Character Limits Compared
| Item | content field | embeds field |
|---|---|---|
| Max characters per message | 2000 | up to 40,960 (10 embeds x 4096 description) |
| Silent truncation | Yes, at 2000 characters | Yes, per embed at 4096 characters |
| Supports formatting | Basic markdown only | Markdown, fields, colors, timestamps |
| Number of messages per request | 1 | 1 (with up to 10 embeds) |
Use embeds for any message that exceeds 2000 characters. Split into multiple webhook calls if you need more than 40,960 characters total.
Now you can send long messages through Discord webhooks without losing data. Start by converting your payload from content to embeds. Add character validation in your code to catch truncation before it happens. For very large messages, implement a loop that sends multiple webhook calls with a delay to stay within rate limits.