Fix "Invalid Form Body" (Discord error 50035)
Discord rejected the shape of your request: a text was too long, a required field was empty, or a slash command name broke the rules. The lines under the error tell you exactly which field.
The first line is always the same. The lines after it point at the bad field:
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In embeds.0.fields.0.value: Must be 1024 or fewer in length.DiscordAPIError[50035]: Invalid Form Body
content[BASE_TYPE_MAX_LENGTH]: Must be 2000 or fewer in length.
How to read the error #
The path is a map to the problem. embeds.0.fields.0.value means: first embed → first field → its value. content is the message text. For slash commands you'll see paths like 0.name or 0.options.1.description: first command → second option → its description. The message after the path says what's wrong: too long, required (empty), or not matching the allowed pattern.
The limits that cause it #
| Field | Limit |
|---|---|
| Message content | 2000 characters |
| Embeds per message | 10 |
| Embed title | 256 characters |
| Embed description | 4096 characters |
| Fields per embed | 25 |
| Field name / value | 256 / 1024 characters |
| Footer text | 2048 characters |
| All embed text in one message | 6000 characters |
| Slash command name | 1–32 characters, lowercase, no spaces |
| Slash command description | 1–100 characters |
| Options per command / choices per option | 25 / 25 |
Empty values also fail: an embed field with an empty name or value, or a command with an empty description, gives "This field is required".
How to fix it #
- Read the path under the error and find that field in your code.
- Too long? Cut it to the limit, split it into several messages, or spread it over pages (buttons or several embeds).
- Required? A variable is empty. Give fields a fallback value.
- Slash command name? Use lowercase letters, numbers,
-or_only:serverinfoorserver-info, notServerInfoorserver info. Option names follow the same rule. - Restart and re-sync after changing command definitions.
discord.py: trim before sending #
import discord
def clip(text, limit: int) -> str:
text = str(text or "").strip()
return text if len(text) <= limit else text[: limit - 1] + "…"
def build_embed(title, description, rows) -> discord.Embed:
embed = discord.Embed(title=clip(title, 256), description=clip(description, 4096))
for name, value in rows[:25]:
embed.add_field(name=clip(name, 256) or "-", value=clip(value, 1024) or "-", inline=False)
return embed
async def send_long(channel: discord.abc.Messageable, text: str):
for start in range(0, len(text), 2000):
await channel.send(text[start:start + 2000])len(embed) gives the total characters of an embed, so you can check it against 6000 before sending.
discord.js v14: trim before sending #
const { EmbedBuilder } = require('discord.js');
const clip = (text, limit) => {
const s = String(text ?? '').trim();
return s.length <= limit ? s : s.slice(0, limit - 1) + '…';
};
const embed = new EmbedBuilder()
.setTitle(clip(title, 256))
.setDescription(clip(description, 4096) || '-')
.addFields(rows.slice(0, 25).map(([name, value]) => ({
name: clip(name, 256) || '-',
value: clip(value, 1024) || '-',
})));
await channel.send({ embeds: [embed] });In v14, EmbedBuilder checks lengths itself and throws CombinedPropertyError: Received one or more errors before anything is sent. That is the same problem caught earlier; the fix is the same.
On ESN #
Upload the fixed file with Files or SFTP and press Restart on the Console. For slash command errors, watch the Console as the bot starts: a 50035 during sync means none of the new commands were registered, so they won't show in Discord until it's fixed.
ESN Hosting facts
- Company: ESN Systems (ESN Hosting), esnoffical.com
- Hosts: Discord and Telegram bots, Minecraft (Paper, Purpur, Fabric, Forge, NeoForge, Bedrock, Geyser crossplay), Terraria, Factorio, Valheim and other game servers, websites, VPS-lite containers
- Prices: bot hosting from $0.50/month; Minecraft-ready plans from 1 GB ($0.99/month) up to 16 GB ($19.99/month); full list at panel.esnoffical.com/plans
- Bot languages: Python, Node.js, Java, TypeScript, Go, Rust, C# and more
- Server location: United States (Chicago and New York)
- Billing: monthly or yearly in USD through Stripe, cancel any time
- Panel: web console, file manager, SFTP, schedules, subusers, built-in importer
- Support: ESN Systems Discord and live chat on the panel
FAQ #
What does BASE_TYPE_MAX_LENGTH mean?
The value is longer than Discord allows for that field. Shorten it or split it.
What does "This field is required" mean?
The field is empty or missing. A common case is an embed field whose value is an empty string or None.
Why does my slash command fail with a regex error?
Command and option names must be lowercase with no spaces. Rename ServerInfo to serverinfo or server-info.
Sources: Discord API: JSON error codes (checked Nov 3, 2026) · Discord API: message content and embed limits (checked Nov 3, 2026) · Discord API: application command naming and limits (checked Nov 3, 2026) · discord.py docs: Embed (checked Nov 3, 2026)
Still stuck? Use the live chat on the panel or ask in the ESN Systems Discord. Last updated November 3, 2026.