For Message Components, it includes identifying information about the component that was used, plus metadata about how the interaction was triggered: the guild_id, channel, member, and other fields.
* Always present on application command, message component, and modal submit interaction types. Optional for future-proofing.** member is sent when the interaction is invoked in a guild, and user is sent when invoked in a DM.*** app_permissions includes ATTACH_FILES | EMBED_LINKS | MENTION_EVERYONE for (G)DMs with other users, and additionally includes USE_EXTERNAL_EMOJIS for DMs with the app’s bot user.**** Available on all interaction types except PING.
Context in Discord where an interaction can be used, or where it was triggered from. Details about using interaction contexts for application commands is in the commands context documentation.
Name
Value
Description
GUILD
0
Interaction can be used within servers
BOT_DM
1
Interaction can be used within DMs with the app’s bot user
PRIVATE_CHANNEL
2
Interaction can be used within Group DMs and DMs other than the app’s bot user
The authorizing_integration_owners field includes details about the authorizing user or server for the installation(s) relevant to the interaction. For apps installed to a user, it can be used to tell the difference between the authorizing user and the user that triggered an interaction (like a message component).A key will only be present if:
The app has been authorized to the installation context corresponding to the key (GUILD_INSTALL or USER_INSTALL)
The interaction is supported in the source interaction context for the installation context corresponding to the key
For command invocations, the command must be supported in the installation context
The values in authorizing_integration_owners depend on the key:
If the key is GUILD_INSTALL ("0"), the value is the guild ID if triggered from a server, or "0" if triggered from a DM with the app’s bot user.
If the key is USER_INSTALL ("1"), the value is the ID of the authorizing user.
If data for a Member is included, data for its corresponding User will also be included.
Field
Type
Description
users?
Map of Snowflakes to user objects
IDs and User objects
members?*
Map of Snowflakes to partial member objects
IDs and partial Member objects
roles?
Map of Snowflakes to role objects
IDs and Role objects
channels?**
Map of Snowflakes to partial channel objects
IDs and partial Channel objects
messages?
Map of Snowflakes to partial message objects
IDs and partial Message objects
attachments?
Map of Snowflakes to attachment objects
IDs and attachment objects
* Partial Member objects are missing user, deaf, and mute fields.** Partial Channel objects only have id, name, type, permissions, last_message_id, last_pin_timestamp, nsfw, parent_id, guild_id, flags, rate_limit_per_user, topic, and position fields. Threads will also have the thread_metadata field.
Application Command Interaction Data Option Structure
All options have names, and an option can either be a parameter and input value—in which case value will be set—or it can denote a subcommand or group—in which case it will contain a top-level key and another array of options.value and options are mutually exclusive.
Field
Type
Description
name
string
Name of the parameter
type
integer
Value of application command option type
value?
string, integer, double, or boolean
Value of the option resulting from user input
options?
array of application command interaction data options
Present if this option is a group or subcommand
focused?
boolean
true if this option is the currently focused option for autocomplete
These two methods are mutually exclusive. The INTERACTION_CREATE gateway event may be handled by connected clients, while the webhook method does not require a connected client.If you want to receive interactions via HTTP-based outgoing webhooks, you must configure an Interactions Endpoint URL for your app. You can read about preparing and adding an Interactions Endpoint URL in the Preparing for Interactions section.
An Interaction includes metadata to aid your application in handling it, as well as data specific to the interaction type. You can find samples for each interaction type on their respective pages:
Message flags combined as a bitfield (only SUPPRESS_EMBEDS, EPHEMERAL, IS_COMPONENTS_V2, IS_VOICE_MESSAGE, and SUPPRESS_NOTIFICATIONS can be set)
components?
array of components
Message components
attachments?**
array of partial attachment objects
Attachment objects with filename and description
poll?
poll request object
Details about the poll
* If you create a callback with type DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE, the only valid message flag is EPHEMERAL. To create a component-based message with IS_COMPONENTS_V2, use the edit original response endpoint.** See Uploading Files for details.
When responding to an interaction, make a POST request to /interactions/<interaction_id>/<interaction_token>/callback. The interaction_id is the unique ID of that individual Interaction from the received payload. The interaction_token is the unique token for that interaction from the received payload.If you are receiving Interactions over the gateway, you have to respond via HTTP. Responses to Interactions are not sent as commands over the gateway.If you send this request for an interaction received over HTTP, respond to the original HTTP request with a 202 and no body.
import requestsurl = "https://discord.com/api/v10/interactions/<interaction_id>/<interaction_token>/callback"json = { "type": 4, "data": { "content": "Congrats on sending your command!" }}r = requests.post(url, json=json)
Interaction tokens are valid for 15 minutes and can be used to send followup messages, but you must send an initial response within 3 seconds of receiving the event. If the 3-second deadline is exceeded, the token will be invalidated.
Inline HTTP Response Behavior
If you receive interactions over HTTP, your server can also respond to the received POST request directly. Respond with a 200 status code and specify a type and optional data:
Sometimes, you want to send followup messages to a user after responding to an interaction, or edit your original response. Whether you receive Interactions over the gateway or by outgoing webhook, you can use the following endpoints:
PATCH /webhooks/<application_id>/<interaction_token>/messages/@original — Edit your initial response
DELETE /webhooks/<application_id>/<interaction_token>/messages/@original — Delete your initial response
POST /webhooks/<application_id>/<interaction_token> — Send a new followup message
PATCH /webhooks/<application_id>/<interaction_token>/messages/<message_id> — Edit a message sent with that token
Interactions webhooks share the same rate limit properties as normal webhooks.
Interaction tokens are valid for 15 minutes, meaning you can respond to an interaction within that time frame.
The endpoints below are not bound to the application’s Global Rate Limit.
POST /interactions/{interaction.id}/{interaction.token}/callbackCreate a response to an Interaction. Body is an interaction response object. Returns 204 unless with_response is set to true, which returns 200 with the body as an interaction callback response object.This endpoint also supports file attachments similar to the webhook endpoints. Refer to Uploading Files for details.Query String Params
Field
Type
Description
with_response?
boolean
Whether to include an interaction callback object as the response
GET /webhooks/{application.id}/{interaction.token}/messages/@originalReturns the initial Interaction response. Functions the same as Get Webhook Message.
PATCH /webhooks/{application.id}/{interaction.token}/messages/@originalEdits the initial Interaction response. Functions the same as Edit Webhook Message.
POST /webhooks/{application.id}/{interaction.token}
Apps are limited to 5 followup messages per interaction if it was initiated from a user-installed app and isn’t installed in the server.
Create a followup message for an Interaction. Functions the same as Execute Webhook, but wait is always true. The thread_id, avatar_url, and username parameters are not supported for interaction followups. You can use the EPHEMERAL message flag (1 << 6, value 64) to send a message only the user can see.
GET /webhooks/{application.id}/{interaction.token}/messages/{message.id}Returns a followup message for an Interaction. Functions the same as Get Webhook Message.
PATCH /webhooks/{application.id}/{interaction.token}/messages/{message.id}Edits a followup message for an Interaction. Functions the same as Edit Webhook Message.
DELETE /webhooks/{application.id}/{interaction.token}/messages/{message.id}Deletes a followup message for an Interaction. Returns 204 No Content on success.