Fix Discord Webhook Truncating Content at 2000 Characters Without Notice
🔍 WiseChecker

Fix Discord Webhook Truncating Content at 2000 Characters Without Notice

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 embeds instead of content for long text: Embeds allow up to 6000 characters in the description field 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 content and description in your code to avoid silent truncation.

ADVERTISEMENT

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

  1. Convert your payload from content to embeds
    Replace the content field with an embeds array. Move the main body of text into embeds[0].description. This field allows up to 4096 characters. Example payload structure:
    { "embeds": [{ "description": "Your long text here..." }] }
  2. 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 the embeds array. Each embed object can have its own description up to 4096 characters. You can send up to 10 embeds per webhook call, giving a total capacity of 40,960 characters.
  3. Use fields inside a single embed for structured data
    If your content is tabular or has labeled sections, use the fields array inside one embed. Each field has a name and value. The value can hold up to 1024 characters. You can include up to 25 fields per embed, allowing 25,600 characters of structured content.
  4. 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.
  5. Validate character count before sending
    In your code, check the length of content and each description before sending. If the length exceeds the limit, raise an error or automatically switch to split mode. This prevents silent truncation.

ADVERTISEMENT

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 description exceeds 4096 characters
  • More than 10 embeds in one payload
  • Embed fields array 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.

ADVERTISEMENT