
Application Command Object
Application Command Naming
CHAT_INPUT command names and command option names must match the following regex ^[-_'\p{L}\p{N}\p{sc=Deva}\p{sc=Thai}]{1,32}$ with the unicode flag set. If there is a lowercase variant of any letters used, you must use those. Characters with no lowercase variants and/or uncased letters are still allowed. USER and MESSAGE commands may be mixed case and can include spaces.
Application Command Structure
| Field | Type | Description | Valid Types | 
|---|---|---|---|
| id | snowflake | Unique ID of command | all | 
| type? | one of command types | Type of command, defaults to 1 | all | 
| application_id | snowflake | ID of the parent application | all | 
| guild_id? | snowflake | Guild ID of the command, if not global | all | 
| name | string | Name of command, 1-32 characters | all | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for namefield. Values follow the same restrictions asname | all | 
| description | string | Description for CHAT_INPUTcommands, 1-100 characters. Empty string forUSERandMESSAGEcommands | all | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for descriptionfield. Values follow the same restrictions asdescription | all | 
| options? * | array of command options | Parameters for the command, max of 25 | CHAT_INPUT | 
| default_member_permissions | ?string | Set of permissions represented as a bit set | all | 
| dm_permission? | boolean | Deprecated (use contextsinstead); Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible. | all | 
| default_permission? | ?boolean | Not recommended for use as field will soon be deprecated. Indicates whether the command is enabled by default when the app is added to a guild, defaults to true | all | 
| nsfw? | boolean | Indicates whether the command is age-restricted, defaults to false | all | 
| integration_types? | list of integration types | Installation contexts where the command is available, only for globally-scoped commands. Defaults to your app’s configured contexts | all | 
| contexts? | ?list of interaction context types | Interaction context(s) where the command can be used, only for globally-scoped commands. | all | 
| version | snowflake | Autoincrementing version identifier updated during substantial record changes | all | 
| handler? | one of command handler types | Determines whether the interaction is handled by the app’s interactions handler or by Discord | PRIMARY_ENTRY_POINT | 
options can only be set for application commands of type CHAT_INPUT.
* handler can only be set for application commands of type PRIMARY_ENTRY_POINT for applications with the EMBEDDED flag (i.e. applications that have an Activity).
default_permission will soon be deprecated. You can instead set default_member_permissions to "0" to disable the command for everyone except admins by default, and/or use contexts to disable globally-scoped commands inside of DMs with your appApplication Command Types
| Name | Type | Description | 
|---|---|---|
| CHAT_INPUT | 1 | Slash commands; a text-based command that shows up when a user types / | 
| USER | 2 | A UI-based command that shows up when you right click or tap on a user | 
| MESSAGE | 3 | A UI-based command that shows up when you right click or tap on a message | 
| PRIMARY_ENTRY_POINT | 4 | A UI-based command that represents the primary way to invoke an app’s Activity | 
Application Command Option Structure
Required 
options must be listed before optional options| Field | Type | Description | Valid Option Types | 
|---|---|---|---|
| type | one of application command option type | Type of option | all | 
| name * | string | 1-32 character name | all | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | all | 
| description | string | 1-100 character description | all | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for the descriptionfield. Values follow the same restrictions asdescription | all | 
| required? | boolean | Whether the parameter is required or optional, default false | all but SUB_COMMANDandSUB_COMMAND_GROUP | 
| choices? | array of application command option choice | Choices for the user to pick from, max 25 | STRING,INTEGER,NUMBER | 
| options? | array of application command option | If the option is a subcommand or subcommand group type, these nested options will be the parameters or subcommands respectively; up to 25 | SUB_COMMAND,SUB_COMMAND_GROUP | 
| channel_types? | array of channel types | The channels shown will be restricted to these types | CHANNEL | 
| min_value? | integer for INTEGERoptions, double forNUMBERoptions | The minimum value permitted | INTEGER,NUMBER | 
| max_value? | integer for INTEGERoptions, double forNUMBERoptions | The maximum value permitted | INTEGER,NUMBER | 
| min_length? | integer | The minimum allowed length (minimum of 0, maximum of6000) | STRING | 
| max_length? | integer | The maximum allowed length (minimum of 1, maximum of6000) | STRING | 
| autocomplete? ** | boolean | If autocomplete interactions are enabled for this option | STRING,INTEGER,NUMBER | 
name must be unique within an array of application command options.
** autocomplete may not be set to true if choices are present.
Options using 
autocomplete are not confined to only use choices given by the application.Application Command Option Type
| Name | Value | Note | 
|---|---|---|
| SUB_COMMAND | 1 | |
| SUB_COMMAND_GROUP | 2 | |
| STRING | 3 | |
| INTEGER | 4 | Any integer between -2^53 and 2^53 | 
| BOOLEAN | 5 | |
| USER | 6 | |
| CHANNEL | 7 | Includes all channel types + categories | 
| ROLE | 8 | |
| MENTIONABLE | 9 | Includes users and roles | 
| NUMBER | 10 | Any double between -2^53 and 2^53 | 
| ATTACHMENT | 11 | attachment object | 
Application Command Option Choice Structure
If you specify 
choices for an option, they are the only valid values for a user to pick| Field | Type | Description | 
|---|---|---|
| name | string | 1-100 character choice name | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | 
| value | string, integer, or double * | Value for the choice, up to 100 characters if string | 
value depends on the option type that the choice belongs to.
Entry Point Command Handler Types
| Name | Value | Note | 
|---|---|---|
| APP_HANDLER | 1 | The app handles the interaction using an interaction token | 
| DISCORD_LAUNCH_ACTIVITY | 2 | Discord handles the interaction by launching an Activity and sending a follow-up message without coordinating with the app | 
Authorizing Your Application
Application commands do not depend on a bot user in the guild; they use the interactions model. To create commands in a guild, your app must be authorized with theapplications.commands scope which can be used independently, but is also automatically included with the bot scope.
When requesting this scope, we “shortcut” the OAuth2 flow similar to adding a bot. You don’t need to complete the flow, exchange for a token, or any of that.
If your application does not require a bot user in the guild for its commands to work, you don’t need to add the bot scope or a permission bitfield to the URL.
Registering a Command
Commands can only be registered via HTTP endpoint.
- Your app cannot have two global CHAT_INPUTcommands with the same name
- Your app cannot have two guild CHAT_INPUTcommands within the same name on the same guild
- Your app cannot have two global USERcommands with the same name
- Your app can have a global and guild CHAT_INPUTcommand with the same name
- Your app can have a global CHAT_INPUTandUSERcommand with the same name
- Your app cannot have a PRIMARY_ENTRY_POINTguild command
- Multiple apps can have commands with the same names
- 100 global CHAT_INPUTcommands
- 5 global USERcommands
- 5 global MESSAGEcommands
- 1 global PRIMARY_ENTRY_POINTcommand
PRIMARY_ENTRY_POINT, you can have the same amount of guild-specific commands per guild.
There is a global rate limit of 200 application command creates per day, per guild
Making a Global Command
Global commands are available on all your app’s guilds. Global commands have inherent read-repair functionality. That means that if you make an update to a global command, and a user tries to use that command before it has updated for them, Discord will do an internal version check and reject the command, and trigger a reload for that command. To make a global command, make an HTTP POST call like this:Making a Guild Command
Guild commands are available only within the guild specified on creation. Guild commands update instantly. We recommend you use guild commands for quick testing, and global commands when they’re ready for public use. To make a guild command, make a similar HTTP POST call, but scope it to a specificguild_id:
Updating and Deleting a Command
Commands can be deleted and updated by makingDELETE and PATCH calls to the command endpoint. Those endpoints are
- applications/<my_application_id>/commands/<command_id>for global commands, or
- applications/<my_application_id>/guilds/<guild_id>/commands/<command_id>for guild commands
POST requests for new commands as upserts. That means making a new command with an already-used name for your application will update the existing command.
Detailed documentation about application command endpoints and their parameters are in the endpoints section.
Contexts
Commands have two sets of contexts on the application command object that let you to configure when and where it can be used:- integration_typesdefines the installation contexts that a command supports
- contextsdefines the interaction contexts where a command can be used
Contexts are distinct from, and do not affect, any command permissions for apps installed to a server.
Installation Context
The installation context is where your app was installed—to a server, a user, or both. If your app supports both installation contexts, there may be cases where you want some of your app’s commands to only be available for one or the other. For example, maybe your app has a/profile command that is only relevant when it’s installed to a user.
A command’s supported installation context(s) can be set using the integration_types field when creating or updating a command as long as any included contexts are already supported on the application-level.
A command’s value for integration_types may affect which interaction contexts a command is visible in.
Interaction Contexts
The interaction contexts for a command determines where in the Discord client it can be used, and can be configured by setting thecontexts field when creating or updating a command.
There are three interaction context types that correspond to different surfaces: GUILD (0), BOT_DM (1), and PRIVATE_CHANNEL (2). However, the PRIVATE_CHANNEL interaction context is only meaningful for commands installed to a user (when the command’s integration_types includes USER_INSTALL).
Permissions
Application command permissions allow your app to enable or disable commands for up to 100 users, roles, and channels within a guild. Command permissions can also be updated by users in the client if they have the necessary permissions.Command permissions can only be updated using a Bearer token. Authenticating with a bot token will result in an error.
GET /applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions endpoint. The response will include an array called permissions with associated IDs and permission types.
Command permissions can be updated with the PUT /applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions endpoint. To call the endpoint, apps must use a Bearer token that’s authorized with the applications.commands.permissions.update scope from a user with sufficient permissions. For their permissions to be considered sufficient, all of the following must be true for the authenticating user (not your app or bot user):
- Has permission to Manage Guild and Manage Roles in the guild where the command is being edited
- Has the ability to run the command being edited
- Has permission to manage the resources that will be affected (roles, users, and/or channels depending on the permission types)
Syncing and Unsyncing Permissions
The command permissions interface can be accessed in the client by navigating toServer Settings > Integrations, then clicking Manage to the right of an installed app. At the top of the interface, users can edit permissions for a specific user, role, or channel. By default, these top-level permissions will apply to all of an app’s commands. However, each permission can also be unsynced and customized for individual commands to provide more granular control.
When the permissions for a specific command are unsynced, meaning it doesn’t align with the top-level permissions, the interface will display “Not Synced” to users.
Application Command Permissions Object
Guild Application Command Permissions Structure
Returned when fetching the permissions for an app’s command(s) in a guild.| Field | Type | Description | 
|---|---|---|
| id | snowflake | ID of the command or the application ID | 
| application_id | snowflake | ID of the application the command belongs to | 
| guild_id | snowflake | ID of the guild | 
| permissions | array of application command permissions | Permissions for the command in the guild, max of 100 | 
id field is the application ID instead of a command ID, the permissions apply to all commands that do not contain explicit overwrites.
Application Command Permissions Structure
Application command permissions allow you to enable or disable commands for specific users, roles, or channels within a guild.| Field | Type | Description | 
|---|---|---|
| id | snowflake | ID of the role, user, or channel. It can also be a permission constant | 
| type | application command permission type | role ( 1), user (2), or channel (3) | 
| permission | boolean | trueto allow,false, to disallow | 
Application Command Permissions Constants
The following constants can be used in theid field for command permissions payloads.
| Permission | Value | Type | Description | 
|---|---|---|---|
| @everyone | guild_id | snowflake | All members in a guild | 
| All Channels | guild_id - 1 | snowflake | All channels in a guild | 
Application Command Permission Type
| Name | Value | 
|---|---|
| ROLE | 1 | 
| USER | 2 | 
| CHANNEL | 3 | 
If you don’t have permission to use a command, it will not show up in the command picker. Members with the Administrator permission can use all commands.
Using Default Permissions
Default permissions can be added to a command during creation using thedefault_member_permissions and context fields. Adding default permissions doesn’t require any Bearer token since it’s configured during command creation and isn’t targeting specific roles, users, or channels.
The default_member_permissions field can be used when creating a command to set the permissions a user must have to use it. The value for default_member_permissions is a bitwise OR-ed set of permissions, serialized as a string. Setting it to "0" will prohibit anyone in a guild from using the command unless a specific overwrite is configured or the user has admin permissions.
You can also include BOT_DM (1) in contexts when setting a global command’s interaction contexts to control whether it can be run in DMs with your app. Guild commands don’t support the BOT_DM interaction context.
Example of editing permissions
As an example, the following command would not be usable by anyone except admins in any guilds by default:MANAGE_GUILD permission:
Slash Commands
Slash commands—theCHAT_INPUT type—are a type of application command. They’re made up of a name, description, and a block of options, which you can think of like arguments to a function. The name and description help users find your command among many others, and the options validate user input as they fill out your command.
Slash commands can also have groups and subcommands to further organize commands. More on those later.
Slash commands can have a maximum of 8000 characters for combined name, description, and value properties for each command, its options (including subcommands and groups), and choices. When localization fields are present, only the longest localization for each field (including the default value) is counted towards the size limit.
Example Slash Command
Example Interaction
Slash Command Interaction
View sample payload for Slash Command interactions
Slash Command Interaction
View sample payload for Slash Command interactions
Subcommands and Subcommand Groups
Currently, subcommands and subcommand groups all appear at the top level in the command explorer. This may change in the future to include them as nested autocomplete options.
Using subcommands or subcommand groups will make your base command unusable. You can’t send the base 
/permissions command as a valid command if you also have /permissions add | remove as subcommands or subcommand groupsExample Walkthrough
Let’s look at an example. Let’s imagine you run a moderation bot. You want to make a/permissions command that can do the following:
- Get the guild permissions for a user or a role
- Get the permissions for a user or a role on a specific channel
- Change the guild permissions for a user or a role
- Change the permissions for a user or a role on a specific channel
/permissions:

permissions. We want this command to be able to affect users and roles. Rather than making two separate commands, we can use subcommand groups. We want to use subcommand groups here because we are grouping commands on a similar resource: user or role.
user and role “folders”, we want to be able to either get and edit permissions. Within the subcommand groups, we can make subcommands for get and edit:

user, we need to be able to pick a user; if we chose role, we need to be able to pick a role. We also want to be able to pick between guild-level permissions and channel-specific permissions. For that, we can use optional arguments:

User Commands
User commands are application commands that appear on the context menu (right click or tap) of users. They’re a great way to surface quick actions for your app that target users. They don’t take any arguments, and will return the user on whom you clicked or tapped in the interaction response.A user must have permission to send text messages in the channel they invoke a user command in. If they don’t have this permission, they will receive a ‘Permission Denied’ error from the interaction.
The 
description field is not allowed when creating user commands. However, to avoid breaking changes to data models, description will be an empty string (instead of null) when fetching commands.Example User Command

Example Interaction
User Command Interaction
View sample payload for User Command interactions
User Command Interaction
View sample payload for User Command interactions
Message Commands
Message commands are application commands that appear on the context menu (right click or tap) of messages. They’re a great way to surface quick actions for your app that target messages. They don’t take any arguments, and will return the message on whom you clicked or tapped in the interaction response.The 
description field is not allowed when creating message commands. However, to avoid breaking changes to data models, description will be an empty string (instead of null) when fetching commands.Example Message Command

Example Interaction
Message Command Interaction
View sample payload for Message Command interactions
Message Command Interaction
View sample payload for Message Command interactions
Entry Point Commands
An Entry Point command serves as the primary way for users to open an app’s Activity from the App Launcher. For the Entry Point command to be visible to users, an app must have Activities enabled.
Example Entry Point Command
Entry Point handlers
When a user invokes an app’s Entry Point command, the value ofhandler will determine how the interaction is handled:
- For APP_HANDLER(1), the app is responsible for responding to the interaction. It can respond by launching the app’s associated Activity using theLAUNCH_ACTIVITY(type12) interaction callback type, or take another action (like sending a follow-up message in channel).
- For DISCORD_LAUNCH_ACTIVITY(2), Discord will handle the interaction automatically by launching the associated Activity and sending a message to the channel where it was launched.
Default Entry Point command
When you enable Activities, an Entry Point command (named “Launch”) is automatically created for your app withDISCORD_LAUNCH_ACTIVITY (2) set as the Entry Point handler. You can retrieve details for the automatically-created command, like its ID, by calling the Get Global Application Commands endpoint and looking for the “Launch” command.
Details about updating or replacing the default Entry Point command is in the Setting Up an Entry Point Command guide.
Autocomplete
Autocomplete interactions allow your application to dynamically return option suggestions to a user as they type. An autocomplete interaction can return partial data for option values. Your application will receive partial data for any existing user input, as long as that input passes client-side validation. For example, you may receive partial strings, but not invalid numbers. The option the user is currently typing will be sent with afocused: true boolean field and options the user has already filled will also be sent but without the focused field. This is a special case where options that are otherwise required might not be present, due to the user not having filled them yet.
This validation is client-side only.
Localization
Application commands can be localized, which will cause them to use localized names and descriptions depending on the client’s selected language. This is entirely optional. Localization is available for names and descriptions of commands, subcommands, and options, as well as the names of choices, by submitting the appropriatename_localizations and description_localizations fields when creating or updating the application command.
Application commands may be partially localized - not all available locales are required, nor do different fields within a command need to support the same set of locales. If a locale is not present in a localizations dictionary for a field, users in that locale will see the default value for that field. It’s not necessary to fill out all locales with the default value. Any localized values that are identical to the default will be ignored.
Localized option names are subject to an additional constraint, which is that they must be distinct from all other default option names of that command, as well as all other option names within that locale on that command.
When taking advantage of command localization, the interaction payload received by your client will still use default command, subcommand, and option names. To localize your interaction response, you can determine the client’s selected language by using the locale key in the interaction payload.
An application command furnished with localizations might look like this:
Locale fallbacks
For application commands, there are built-in fallbacks in case a user’s locale isn’t present in the localizations. If the fallback locale is also missing, it will use the default.You should make sure to include your default value in its proper locale key, otherwise it may use a fallback value unexpectedly. For example, if your default value is 
en-US, but you don’t specify the en-US value in your localizations, users with en-US selected will see the en-GB value if it’s specified. For example, if you have a command with the default name “color”, and your localizations specify only the en-GB value as “colour”, users in the en-US locale will see “colour” because the en-US key is missing.| Locale | Fallback | 
|---|---|
| en-US | en-GB | 
| en-GB | en-US | 
| es-419 | es-ES | 
Retrieving localized commands
While most endpoints that return application command objects will return thename_localizations and description_localizations fields, some will not by default. This includes GET endpoints that return all of an application’s guild or global commands. Instead, those endpoints will supply additional name_localized or description_localized fields, which only contain the localization relevant to the requester’s locale. (The full dictionaries can still be obtained by supplying the appropriate query argument).
For example, if a batch GET request were made with locale zh-CN, including the above command, the returned object would look as follows:
name_localization or description_localization for that field will also not be present.
Locale is determined by looking at the X-Discord-Locale header, then the Accept-Language header if not present, then lastly the user settings locale.
Age-Restricted Commands
A command that contains age-restricted content should have thensfw field set to true upon creation or update. Marking a command as age-restricted will limit who can see and access the command, and from which channels.
Apps with discovery enabled (which is required to appear in the App Directory) cannot contain any age-restricted commands or content.
Using Age-Restricted Commands
To use an age-restricted command, a user must be 18 years or older and access the command from either:- an age-restricted channel or
- a DM with the app after enabling age-restricted commands within their User Settings.
Endpoints
For authorization, all endpoints take either a bot token or client credentials token for your application
Get Global Application Commands
GET/applications/{application.id}/commands
The objects returned by this endpoint may be augmented with additional fields if localization is active.
Query String Params
| Field | Type | Description | 
|---|---|---|
| with_localizations? | boolean | Whether to include full localization dictionaries ( name_localizationsanddescription_localizations) in the returned objects, instead of thename_localizedanddescription_localizedfields. Defaultfalse. | 
Create Global Application Command
POST/applications/{application.id}/commands
Creating a command with the same name as an existing command for your application will overwrite the old command.
201 if a command with the same name does not already exist, or a 200 if it does (in which case the previous command will be overwritten). Both responses include an application command object.
JSON Params
| Field | Type | Description | 
|---|---|---|
| name | string | Name of command, 1-32 characters | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | 
| description? | string | 1-100 character description for CHAT_INPUTcommands | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for the descriptionfield. Values follow the same restrictions asdescription | 
| options? | array of application command option | the parameters for the command, max of 25 | 
| default_member_permissions? | ?string | Set of permissions represented as a bit set | 
| dm_permission? | ?boolean | Deprecated (use contextsinstead); Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible. | 
| default_permission? | boolean | Replaced by default_member_permissionsand will be deprecated in the future. Indicates whether the command is enabled by default when the app is added to a guild. Defaults totrue | 
| integration_types? | list of integration types | Installation context(s) where the command is available | 
| contexts? | list of interaction context types | Interaction context(s) where the command can be used | 
| type? | one of application command type | Type of command, defaults 1if not set | 
| nsfw? | boolean | Indicates whether the command is age-restricted | 
Get Global Application Command
GET/applications/{application.id}/commands/{command.id}
Fetch a global command for your application. Returns an application command object.
Edit Global Application Command
PATCH/applications/{application.id}/commands/{command.id}
All parameters for this endpoint are optional.
200 and an application command object. All fields are optional, but any fields provided will entirely overwrite the existing values of those fields.
JSON Params
| Field | Type | Description | 
|---|---|---|
| name? | string | Name of command, 1-32 characters | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | 
| description? | string | 1-100 character description | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for the descriptionfield. Values follow the same restrictions asdescription | 
| options? | array of application command option | the parameters for the command | 
| default_member_permissions? | ?string | Set of permissions represented as a bit set | 
| dm_permission? | ?boolean | Deprecated (use contextsinstead); Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible. | 
| default_permission? | boolean | Replaced by default_member_permissionsand will be deprecated in the future. Indicates whether the command is enabled by default when the app is added to a guild. Defaults totrue | 
| integration_types? | list of integration types | Installation context(s) where the command is available | 
| contexts? | list of interaction context types | Interaction context(s) where the command can be used | 
| nsfw? | boolean | Indicates whether the command is age-restricted | 
Delete Global Application Command
DELETE/applications/{application.id}/commands/{command.id}
Deletes a global command. Returns 204 No Content on success.
Bulk Overwrite Global Application Commands
PUT/applications/{application.id}/commands
Takes a list of application commands, overwriting the existing global command list for this application. Returns 200 and a list of application command objects. Commands that do not already exist will count toward daily application command create limits.
This will overwrite all types of application commands: slash commands, user commands, and message commands.
Get Guild Application Commands
GET/applications/{application.id}/guilds/{guild.id}/commands
The objects returned by this endpoint may be augmented with additional fields if localization is active.
Query String Params
| Field | Type | Description | 
|---|---|---|
| with_localizations? | boolean | Whether to include full localization dictionaries ( name_localizationsanddescription_localizations) in the returned objects, instead of thename_localizedanddescription_localizedfields. Defaultfalse. | 
Create Guild Application Command
POST/applications/{application.id}/guilds/{guild.id}/commands
Creating a command with the same name as an existing command for your application will overwrite the old command.
201 if a command with the same name does not already exist, or a 200 if it does (in which case the previous command will be overwritten). Both responses include an application command object.
JSON Params
| Field | Type | Description | 
|---|---|---|
| name | string | Name of command, 1-32 characters | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | 
| description? | string | 1-100 character description for CHAT_INPUTcommands | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for the descriptionfield. Values follow the same restrictions asdescription | 
| options? | array of application command option | Parameters for the command, max of 25 | 
| default_member_permissions? | ?string | Set of permissions represented as a bit set | 
| default_permission? | boolean | Replaced by default_member_permissionsand will be deprecated in the future. Indicates whether the command is enabled by default when the app is added to a guild. Defaults totrue | 
| type? | one of application command type | Type of command, defaults 1if not set | 
| nsfw? | boolean | Indicates whether the command is age-restricted | 
Get Guild Application Command
GET/applications/{application.id}/guilds/{guild.id}/commands/{command.id}
Fetch a guild command for your application. Returns an application command object.
Edit Guild Application Command
PATCH/applications/{application.id}/guilds/{guild.id}/commands/{command.id}
All parameters for this endpoint are optional.
200 and an application command object. All fields are optional, but any fields provided will entirely overwrite the existing values of those fields.
JSON Params
| Field | Type | Description | 
|---|---|---|
| name? | string | Name of command, 1-32 characters | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | 
| description? | string | 1-100 character description | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for the descriptionfield. Values follow the same restrictions asdescription | 
| options? | array of application command option | Parameters for the command, max of 25 | 
| default_member_permissions? | ?string | Set of permissions represented as a bit set | 
| default_permission? | boolean | Replaced by default_member_permissionsand will be deprecated in the future. Indicates whether the command is enabled by default when the app is added to a guild. Defaults totrue | 
| nsfw? | boolean | Indicates whether the command is age-restricted | 
Delete Guild Application Command
DELETE/applications/{application.id}/guilds/{guild.id}/commands/{command.id}
Delete a guild command. Returns 204 No Content on success.
Bulk Overwrite Guild Application Commands
PUT/applications/{application.id}/guilds/{guild.id}/commands
Takes a list of application commands, overwriting the existing command list for this application for the targeted guild. Returns 200 and a list of application command objects.
This will overwrite all types of application commands: slash commands, user commands, and message commands.
JSON Params
| Field | Type | Description | 
|---|---|---|
| id? | snowflake | ID of the command, if known | 
| name | string | Name of command, 1-32 characters | 
| name_localizations? | ?dictionary with keys in available locales | Localization dictionary for the namefield. Values follow the same restrictions asname | 
| description | string | 1-100 character description | 
| description_localizations? | ?dictionary with keys in available locales | Localization dictionary for the descriptionfield. Values follow the same restrictions asdescription | 
| options? | array of application command option | Parameters for the command | 
| default_member_permissions? | ?string | Set of permissions represented as a bit set | 
| dm_permission? | ?boolean | Deprecated (use contextsinstead); Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible. | 
| default_permission? | boolean | Replaced by default_member_permissionsand will be deprecated in the future. Indicates whether the command is enabled by default when the app is added to a guild. Defaults totrue | 
| integration_types | list of integration types | Installation context(s) where the command is available, defaults to GUILD_INSTALL([0]) | 
| contexts | list of interaction context types | Interaction context(s) where the command can be used, defaults to all contexts [0,1,2] | 
| type? | one of application command type | Type of command, defaults 1if not set | 
Get Guild Application Command Permissions
GET/applications/{application.id}/guilds/{guild.id}/commands/permissions
Fetches permissions for all commands for your application in a guild. Returns an array of guild application command permissions objects.
Get Application Command Permissions
GET/applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions
Fetches permissions for a specific command for your application in a guild. Returns a guild application command permissions object.
Edit Application Command Permissions
PUT/applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions
This endpoint will overwrite existing permissions for the command in that guild
This endpoint requires authentication with a Bearer token that has permission to manage the guild and its roles. For more information, read above about application command permissions.
Deleting or renaming a command will permanently delete all permissions for the command
JSON Params
| Field | Type | Description | 
|---|---|---|
| permissions | array of application command permissions | Permissions for the command in the guild | 
Batch Edit Application Command Permissions
PUT/applications/{application.id}/guilds/{guild.id}/commands/permissions
This endpoint has been disabled with updates to command permissions (Permissions v2). Instead, you can edit each application command permissions (though you should be careful to handle any potential rate limits).