Discord Slash Command Builder

Build slash commands and context menu commands with options, subcommands and localizations. The builder checks every Discord rule live and gives you JSON, SlashCommandBuilder code and a curl command.

Runs entirely in your browser

Command

Kind
Shows up when you type /.
6/32
1–32 characters, lowercase, no spaces. Letters, digits, - and _.
14/100
Translations1

The name above is the default language (usually English). Pick languages Discord should show a translation for.

de

Options3/25

Stringtext*
4/32
28/100
de
Fixed choices (0/25)
Integerminutes*
7/32
19/100
de
Fixed choices (0/25)
Channelchannel
7/32
30/100
de
Allowed channel types
None picked = all.

Settings

Who can use the command by default?
Server admins can change this later under Integrations. This is only the default.
Registration
Guild commands show up instantly and are good for testing. Install type and contexts only apply to global commands.
Install type integration_types
Usable in contexts

Preview

Commands matching /remind
  • /remindtextminutes+1 optionalSet a reminderYour bot
/remindtext:Stringminutes:Integerchannel:Channel
Simplified preview in our own style – not pixel-perfect.

Validation124/8000 characters

All valid – ready to register.

Output

{
  "name": "remind",
  "type": 1,
  "name_localizations": {
    "de": "erinnern"
  },
  "description": "Set a reminder",
  "description_localizations": {
    "de": "Erinnerung stellen"
  },
  "options": [
    {
      "type": 3,
      "name": "text",
      "name_localizations": {
        "de": "text"
      },
      "description": "What should I remind you of?",
      "description_localizations": {
        "de": "Woran soll ich dich erinnern?"
      },
      "required": true,
      "max_length": 200
    },
    {
      "type": 4,
      "name": "minutes",
      "name_localizations": {
        "de": "minuten"
      },
      "description": "In how many minutes",
      "description_localizations": {
        "de": "In wie vielen Minuten"
      },
      "required": true,
      "min_value": 1,
      "max_value": 10080
    },
    {
      "type": 7,
      "name": "channel",
      "name_localizations": {
        "de": "kanal"
      },
      "description": "Where to post it (default: DM)",
      "description_localizations": {
        "de": "Wo posten (Standard: DM)"
      },
      "channel_types": [
        0,
        5
      ]
    }
  ],
  "integration_types": [
    0,
    1
  ],
  "contexts": [
    0,
    1,
    2
  ]
}

How it works

  1. Pick the kind: slash command, user menu or message menu. Or load an example or import existing JSON.
  2. Enter name and description and add translations, e.g. German.
  3. Add options – string, number, user, channel, attachment … – or subcommands and groups.
  4. Set who can use the command and where it shows up (servers, DMs, user install).
  5. Fix everything listed under “Validation”, then copy JSON, discord.js code or curl.

FAQ

Why is my command name rejected?

Slash commands and options need 1–32 characters, lowercase, without spaces. Letters (including accented ones), digits, - and _ are allowed. Context menu commands may use uppercase and spaces.

How many options and choices are allowed?

At most 25 options per level and 25 fixed choices per option. Required options must come before optional ones. In total, a command's names, descriptions and choice values may not exceed 8000 characters.

Can I mix subcommands and regular options?

No. The top level holds either only subcommands and groups or only regular options. Groups contain only subcommands; deeper nesting isn't possible.

How do I make a command admin-only?

Set default_member_permissions to "0" (“Admins only”) or to specific permissions like Ban Members. Server admins can adjust it later under Server Settings → Integrations.

Why doesn't my global command show up?

Check contexts and integration_types: the command only appears where both match. For testing, register it as a guild command – it shows up instantly. Each app may have 100 global slash commands and 15 user and 15 message commands.

Do I need to enter my bot token here?

No, never. The builder only creates the JSON. You run the curl command yourself, with the token in an environment variable.