Skip to content
16 changes: 15 additions & 1 deletion developers/change-log.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ rss: true

import {Route} from '/snippets/route.jsx'

<Update label="August 5, 2026" tags={["Interactions", "Components"]} rss={{
title: "Filter File Types in File Uploads and Attachment Options",
description: "File Upload components and ATTACHMENT command options now accept a file_types array that restricts which files a user can upload."
}}>
## Filter File Types in File Uploads and Attachment Options

You can now restrict which files a user is allowed to upload in both [File Upload](/developers/components/reference#file-upload) components and
[`ATTACHMENT`](/developers/interactions/application-commands#application-command-object-application-command-option-type) command options.

#### Developer Resources
- [File Type Filtering](/developers/reference#file-type-filtering)
- [File Upload Component](/developers/components/reference#file-upload-file-upload-structure)
- [Slash Command Option Structure](/developers/interactions/application-commands#application-command-object-application-command-option-structure)
</Update>

<Update label="August 5, 2026" tags={["HTTP API", "Breaking Change"]} rss={{
title: "Channel application_id is Now Nullable",
description: "The application_id field on the channel object is now documented as nullable, and will be serialized as null in some cases."
Expand Down Expand Up @@ -63,7 +78,6 @@ import {Route} from '/snippets/route.jsx'
- Fixed a crash from iterator invalidation in lobby dispatch callbacks, observed on PlayStation 5
- Routed the gateway bootstrap request through the shared API client for more reliable connectivity
- Fixed `GetCurrentInputDevice()`/`GetCurrentOutputDevice()` on Linux, which previously always reported the first enumerated device regardless of actual selection

</Update>

<Update label="July 22, 2026" tags={["Discord Social SDK"]} rss={{
Expand Down
19 changes: 11 additions & 8 deletions developers/components/reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2102,17 +2102,20 @@ File Uploads are available on modals. They must be placed inside a [Label](/deve
<ManualAnchor id="file-upload-file-upload-structure" />
###### File Upload Structure

| Field | Type | Description |
|---------------|---------|--------------------------------------------------------------------------------------------------------|
| type | integer | `19` for file upload |
| id? | integer | Optional identifier for component |
| custom_id | string | ID for the file upload; 1-100 characters |
| min_values?\* | integer | Minimum number of items that must be uploaded (defaults to 1); min 0 (see note), max 10 |
| max_values? | integer | Maximum number of items that can be uploaded (defaults to 1); max 10 |
| required? | boolean | Whether the file upload requires files to be uploaded before submitting the modal (defaults to `true`) |
| Field | Type | Description |
|-----------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type | integer | `19` for file upload |
| id? | integer | Optional identifier for component |
| custom_id | string | ID for the file upload; 1-100 characters |
| min_values?\* | integer | Minimum number of items that must be uploaded (defaults to 1); min 0 (see note), max 10 |
| max_values? | integer | Maximum number of items that can be uploaded (defaults to 1); max 10 |
| required? | boolean | Whether the file upload requires files to be uploaded before submitting the modal (defaults to `true`) |
| file_types?\*\* | array of strings | [File types to filter for](/developers/reference#file-type-filtering); can be `image`, `video`, `audio`, or any dot-prefixed extension such as `.pdf`; max 10 |

\* `min_values` must be either omitted or at least `1` if `required` is omitted or `true`.

\*\* `file_types` only matches against the file extension. See [File Type Filtering](/developers/reference#file-type-filtering) for details.

<ManualAnchor id="file-upload-file-upload-interaction-response-structure" />
###### File Upload Interaction Response Structure

Expand Down
35 changes: 19 additions & 16 deletions developers/interactions/application-commands.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -65,27 +65,30 @@ Application commands are native ways to interact with apps in the Discord client
Required `options` must be listed before optional options
</Warning>

| Field | Type | Description | Valid Option Types |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| type | one of [application command option type](/developers/interactions/application-commands#application-command-object-application-command-option-type) | Type of option | all |
| name \* | string | [1-32 character name](/developers/interactions/application-commands#application-command-object-application-command-naming) | all |
| name_localizations? | ?dictionary with keys in [available locales](/developers/reference#locales) | Localization dictionary for the `name` field. Values follow the same restrictions as `name` | all |
| description | string | 1-100 character description | all |
| description_localizations? | ?dictionary with keys in [available locales](/developers/reference#locales) | Localization dictionary for the `description` field. Values follow the same restrictions as `description` | all |
| required? | boolean | Whether the parameter is required or optional, default `false` | all but `SUB_COMMAND` and `SUB_COMMAND_GROUP` |
| choices? | array of [application command option choice](/developers/interactions/application-commands#application-command-object-application-command-option-choice-structure) | Choices for the user to pick from, max 25 | `STRING`, `INTEGER`, `NUMBER` |
| options? | array of [application command option](/developers/interactions/application-commands#application-command-object-application-command-option-structure) | 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](/developers/resources/channel#channel-object-channel-types) | The channels shown will be restricted to these types | `CHANNEL` |
| min_value? | integer for `INTEGER` options, double for `NUMBER` options | The minimum value permitted | `INTEGER` , `NUMBER` |
| max_value? | integer for `INTEGER` options, double for `NUMBER` options | The maximum value permitted | `INTEGER` , `NUMBER` |
| min_length? | integer | The minimum allowed length (minimum of `0`, maximum of `6000`) | `STRING` |
| max_length? | integer | The maximum allowed length (minimum of `1`, maximum of `6000`) | `STRING` |
| autocomplete? \*\* | boolean | If autocomplete interactions are enabled for this option | `STRING`, `INTEGER`, `NUMBER` |
| Field | Type | Description | Valid Option Types |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
| type | one of [application command option type](/developers/interactions/application-commands#application-command-object-application-command-option-type) | Type of option | all |
| name \* | string | [1-32 character name](/developers/interactions/application-commands#application-command-object-application-command-naming) | all |
| name_localizations? | ?dictionary with keys in [available locales](/developers/reference#locales) | Localization dictionary for the `name` field. Values follow the same restrictions as `name` | all |
| description | string | 1-100 character description | all |
| description_localizations? | ?dictionary with keys in [available locales](/developers/reference#locales) | Localization dictionary for the `description` field. Values follow the same restrictions as `description` | all |
| required? | boolean | Whether the parameter is required or optional, default `false` | all but `SUB_COMMAND` and `SUB_COMMAND_GROUP` |
| choices? | array of [application command option choice](/developers/interactions/application-commands#application-command-object-application-command-option-choice-structure) | Choices for the user to pick from, max 25 | `STRING`, `INTEGER`, `NUMBER` |
| options? | array of [application command option](/developers/interactions/application-commands#application-command-object-application-command-option-structure) | 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](/developers/resources/channel#channel-object-channel-types) | The channels shown will be restricted to these types | `CHANNEL` |
| min_value? | integer for `INTEGER` options, double for `NUMBER` options | The minimum value permitted | `INTEGER` , `NUMBER` |
| max_value? | integer for `INTEGER` options, double for `NUMBER` options | The maximum value permitted | `INTEGER` , `NUMBER` |
| min_length? | integer | The minimum allowed length (minimum of `0`, maximum of `6000`) | `STRING` |
| max_length? | integer | The maximum allowed length (minimum of `1`, maximum of `6000`) | `STRING` |
| autocomplete? \*\* | boolean | If autocomplete interactions are enabled for this option | `STRING`, `INTEGER`, `NUMBER` |
| file_types?\*\*\* | array of strings | [File types to filter for](/developers/reference#file-type-filtering); can be `image`, `video`, `audio`, or any dot-prefixed extension such as `.pdf`; max 10 | `ATTACHMENT` |

\* `name` must be unique within an array of [application command options](/developers/interactions/application-commands#application-command-object-application-command-option-structure).

\*\* `autocomplete` may not be set to true if `choices` are present.

\*\*\* `file_types` only matches against the file extension. See [File Type Filtering](/developers/reference#file-type-filtering) for details.

<Info>
Options using `autocomplete` are not confined to only use choices given by the application.
</Info>
Expand Down
Loading