Reports

Discord has a reporting system that allows users to report messages or profiles that violate Discord's Terms of Service or Community Guidelines. When a user creates a report, it is sent to Discord's Trust and Safety team for review. The team evaluates the report and takes appropriate action, which may include warning the user, temporarily suspending their account, or permanently banning them from the platform.

There are multiple versions of the reporting API:

  • V1: The original version of the reporting API, also known as dirt. Supports reporting messages and users.
  • V2: An updated version of the original reporting API that includes detailed report types and saves a snapshot of the reported message for review. Supports reporting messages only.
  • V3: The latest version of the reporting API, known as in-app reports, that includes additional report types and improved functionality. Supports reporting messages, users, guilds, scheduled events, and more.
  • DSA: A special version of reports V3 that can be used by users living in the European Union to comply with the Digital Services Act.

Considerations

When using the reporting API, keep the following in mind:

  • Only resources you have access to can be reported. For example, you cannot report a message in a private channel you cannot access.
  • You must have a verified email on your account to create reports.
  • You cannot report your own messages or profile.
  • Reports are anonymous. The user being reported will not be notified of who reported them.
  • Abuse of the reporting system may result in action being taken against your account.

Reports V1

The original version of the reporting API, also known as "dirt". Supports reporting messages and users.

Endpoints

Get Report Reasons

GET/report

Returns a list of report reason objects that can be used when creating a report for a message or user.

Query String Params

Either channel_id and message_id, or user_id must be provided.

FieldTypeDescription
message_idsnowflakeThe ID of the message to report
channel_idsnowflakeThe ID of the channel the message is in
user_idsnowflakeThe ID of the user to report
Report Reason Structure
FieldTypeDescription
reasonintegerA unique identifier for the reason
labelstringThe display name of the reason
descriptionstringA brief description of the reason
Example Report Reason
{
"reason": 2,
"label": "Spam or Phishing Links",
"description": "Fake links, invites to a server via bot, malicious links or attachments."
}

Create Report

POST/report

Creates a report for a message or user.

JSON Params
FieldTypeDescription
message_id 1snowflakeThe ID of the message to report
channel_id 1snowflakeThe ID of the channel the message is in
user_id 1snowflakeThe ID of the user to report
reasonintegerThe report reason identifier

1 Either channel_id and message_id, or user_id must be provided.

Response Body
FieldTypeDescription
idsnowflakeThe ID of the created report

Reports V2

An updated version of the original reporting API that includes detailed report types and saves a snapshot of the reported message for review. Supports reporting messages only.

Endpoints

Get Report Options

GET/report/options

Returns a list of report option objects that can be used when creating a report for a message.

Report Option Structure
FieldTypeDescription
valuestringA unique identifier for the report option
labelstringThe display name of the report option
descriptionstringA brief description of the report option
sub_question?stringPrompt to ask the user for in order to select a sub-type
sub_types?array[report option sub-type object]Sub-types for the report option
Report Option Sub-Type Structure
FieldTypeDescription
valuestringA unique identifier for the sub-type
labelstringThe display name of the report sub-type
Example Report Option
{
"value": "spamming",
"label": "Spamming",
"description": "Unsolicited advertisements",
"sub_question": "How is this spam?",
"sub_types": [
{
"value": "sub_spam",
"label": "User is sending spam messages or requests"
},
{
"value": "sub_spambot",
"label": "This is a spambot account"
}
]
}

Stage Report

POST/reports/channels/{channel.id}/messages/{message.id}

Stages a report for a message, returning a token that can be used to create the report containing the serialized message data.

Response Body
FieldTypeDescription
tokenstringThe signed report token

Create Staged Report

POST/reports

Creates a report for a message, including a snapshot of the message for review. Requires the MANAGE_MESSAGES permission if the channel is in a guild. Returns a 204 empty response on success.

JSON Params
FieldTypeDescription
tokenstringThe signed report token
report_typestringThe report option value
report_subtype?stringThe report option sub-type value
subjectstringThe subject of the report (max 300 characters)
descriptionstringAdditional details for the report (max 800 characters)

Reports V3

The latest version of the reporting API, known as "in-app reports", that includes additional report types and improved functionality. Supports reporting messages, users, guilds, scheduled events, and more.

DSA

A special version of reports V3 that can be used by users living in the European Union to comply with the Digital Services Act. Unlike regular reports, DSA reports do not require an account to submit. Instead, users simply need to verify an email address. Additionally, instead of the standard report menu types, DSA reporters fetch their allowed report types from a separate endpoint.

Note that the unauthenticated reporting endpoints require that either authentication or a fingerprint is provided for experiment tracking purposes.

Report Menu Object

Report Menu Structure
FieldTypeDescription
namestringThe type of report menu
versionstringThe version of the report menu schema (currently 1.0)
variantstringThe variant of the menu
postback_urlstringThe API URL endpoint for submitting the report
language?stringThe language code for the menu (default en)
root_node_idintegerThe ID of the starting node in the menu flow
success_node_idintegerThe ID of the node shown on successful submission
fail_node_idintegerThe ID of the node shown on failed submission
nodesmap[integer, report node object]A map of node IDs to their corresponding node objects
Report Node Structure
FieldTypeDescription
id 1integerThe unique identifier for the node
report_type?stringThe report type identifier if this is a submission node
keystringA unique key identifier for the node
headerstringThe main header text displayed for this node
subheader?stringOptional secondary header text
info?stringOptional informational text or warning
childrenarray[report node child object]Child options that lead to other nodes
elementsarray[report element object]UI elements to display on this node
button?report button objectThe action button for this node
is_multi_select_requiredbooleanWhether multi-select elements require at least one selection
is_auto_submitbooleanWhether this node automatically submits without user interaction

1 Node IDs are unique across all report menu types and often reused in multiple menus.

Report Button Structure
FieldTypeDescription
typestringThe type of button
target?integerThe target node ID for navigation (only applicable for next buttons)
Report Button Type
ValueDescription
nextNavigates to the next node in the report flow
submitSubmits the report
doneExits the modal successfully
cancelExits the modal without submitting the report
Report Node Child Structure

This object is represented as an array of the following fields:

FieldTypeDescription
namestringThe display label for the child option
target_node_idintegerThe node ID this option navigates to
Report Element Structure
FieldTypeDescription
namestringThe name identifier for the element
typestringThe type of element
dataobjectElement-specific data, varies by type
should_submit_databooleanWhether this element's data should be included in the submission
skip_if_unlocalizedbooleanWhether to skip this element if not localized
is_localizedbooleanWhether this element has been localized
Report Element Type
ValueDescriptionReceive DataSend Data
checkboxA checkbox input elementarray[array[string]] 1array[array[string]] 1
dropdownA dropdown select input elementdropdown element objectstring
free_textA free text input elementfree text element objectstring
radioA radio button input element
successA success elementnull
failA fail elementnull
breadcrumbsThe user's progress through the report flownull
text_line_resourceA phone number for the user to texttext line resource element object
textA block of texttext resource element object
external_linkAn external link referenceexternal link element object
more_you_can_doAdditional actions that can be taken
block_usersAn option to block the reported usernull
ignore_usersAn option to ignore the reported usernull
mute_usersAn option to mute the reported usernull
delete_messageAn option to delete the reported messagenull
leave_guildAn option to leave the reported guildnull
deauthorize_appAn option to deauthorize the reported appnull
share_with_parentsAn option to share the report with parentsnull
settings_upsellsAdditional settings actions that can be takennull
guild_previewDisplays a preview of the reported guildnull
guild_discovery_previewDisplays a preview of the reported guild listingnull
guild_directory_entry_previewDisplays a preview of the reported directory entrynull
guild_scheduled_event_previewDisplays a preview of the reported scheduled eventnull
message_previewDisplays a preview of the reported messagenull
channel_previewDisplays a preview of the reported channelnull
user_previewDisplays a preview of the reported usernull
app_previewDisplays a preview of the reported applicationnull
widget_previewDisplays a preview of the reported profile widgetnull

1 Nested array is in the format (name, label, description?).

FieldTypeDescription
titlestringThe title of the dropdown element
optionsarray[dropdown option object]The selectable options in the dropdown
FieldTypeDescription
valuestringThe unique identifier for the option
labelstringThe display name of the option
Free Text Element Structure
FieldTypeDescription
title?stringThe title of the free text element
subtitle?stringAn subtitle for the element
placeholder?stringPlaceholder text for the input field
rowsintegerThe number of visible text rows
character_limitintegerThe maximum number of characters allowed
pattern?stringA regex pattern that the input must match
Text Line Resource Element Structure
FieldTypeDescription
titlestringThe title of the text line resource
bodystringThe body text of the text line resource
smsstringThe SMS number to text
sms_body?stringExample SMS message to send
is_localizedbooleanWhether this element has been localized
Text Resource Element Structure
FieldTypeDescription
headerstringThe header text of the text resource
bodystringThe body text of the text resource
is_localizedbooleanWhether this element has been localized
FieldTypeDescription
urlstringThe URL for the external link
link_textstringThe display text for the external link
link_description?stringA description of the link's purpose
is_localizedbooleanWhether this element has been localized
Report Menu Type
ValueDescription
guildReport a guild
guild_discoveryReport a guild discovery listing
guild_directory_entryReport a guild directory entry
guild_scheduled_eventReport a guild scheduled event
messageReport a message
stage_channelReport a stage channel
first_dmReport the first message in a DM
userReport a user
applicationReport an application
widgetReport a profile widget
Example Report Menu
{
"name": "user",
"variant": "3",
"version": "1.0",
"postback_url": "/api/reporting/user",
"root_node_id": 1,
"success_node_id": 1,
"fail_node_id": 1,
"nodes": {
"1": {
"id": 1,
"key": "GENERIC_SUBMIT",
"header": "Report Summary",
"subheader": "Review your report before submitting.",
"info": null,
"button": {
"type": "submit",
"target": null
},
"elements": [
{
"name": "breadcrumbs",
"type": "breadcrumbs",
"data": null,
"should_submit_data": false,
"skip_if_unlocalized": false,
"is_localized": true
}
],
"report_type": null,
"children": [],
"is_multi_select_required": false,
"is_auto_submit": false
}
}
}

Endpoints

Get Report Menu

GET/reporting/menu/{type}

Returns a report menu object for the specified type. The menu contains a hierarchical tree of nodes that guide users through the reporting process, including questions, options, and submission steps.

Query String Params
FieldTypeDescription
variant?stringThe version variant of the menu to retrieve (max 256 characters, default latest)

Submit Report Menu

POST/reporting/{type}

Submits a completed report based on the user's navigation through a report menu. This endpoint processes the collected information from the menu flow and creates a formal report for review by Discord's Trust and Safety team.

JSON Params
FieldTypeDescription
versionstringThe version of the report menu schema that was used
variantstringThe variant of the menu that was used
namestringThe report menu type
languagestringThe language code used for the report
breadcrumbsarray[integer]Node IDs clicked in the report menu flow, representing the user's path through the menu
elements?map[string, array[string]]Map of element names to their selected values (for checkboxes and other inputs)
channel_id?snowflakeThe ID of the channel being reported (required for message, first_dm, stage_channel, and guild_directory_entry report menus)
message_id?snowflakeThe ID of the message being reported (required for message and first_dm report menus)
guild_id?snowflakeThe ID of the guild being reported (required for guild, stage_channel, guild_scheduled_event, guild_directory_entry, and guild_discovery report menus)
stage_instance_id?snowflakeThe ID of the stage instance being reported (required for stage_channel report menus)
guild_scheduled_event_id?snowflakeThe ID of the scheduled event being reported (required for guild_scheduled_event report menus)
reported_user_id?snowflakeThe ID of the user being reported (required for user report menus)
application_id?snowflakeThe ID of the application being reported (required for application report menus)
user_id?snowflakeThe ID of the user being reported (required for widget report menus)
widget_id?snowflakeThe ID of the profile widget being reported (required for widget report menus)
Response Body
FieldTypeDescription
report_idsnowflakeThe ID of the created report

Query Unauthenticated Report Eligibility

GET/reporting/unauthenticated/experiment

Queries whether the user can use unauthenticated reporting. Returns an empty object on success.

Get Unauthenticated Report Capabilities

GET/reporting/unauthenticated/capabilities

Returns the report menu types available for unauthenticated reporting.

Response Body
FieldTypeDescription
capabilitiesarray[string]The available report menu types

Get Unauthenticated Report Verification Code

POST/reporting/unauthenticated/{type}/code

Sends a verification code to the user's email address to initiate the unauthenticated reporting process for the specified type (must be one of the types returned by Get Unauthenticated Report Capabilities). Returns an empty object on success.

JSON Params
FieldTypeDescription
namestringThe report menu type (same as the type path parameter)
emailstringThe email address to send the verification code to (max 320 characters)

Verify Unauthenticated Report

POST/reporting/unauthenticated/{type}/verify

Verifies the email code sent to the user to confirm their email address for unauthenticated reporting for the specified type (must be one of the types returned by Get Unauthenticated Report Capabilities).

JSON Params
FieldTypeDescription
namestringThe report menu type (same as the type path parameter)
emailstringThe email address used to request the code
codestringThe verification code sent to the email (max 6 characters)
Response Body
FieldTypeDescription
tokenstringThe email verification token

Get Unauthenticated Report Menu

GET/reporting/unauthenticated/menu/{type}

Returns a report menu object for the specified type (must be one of the types returned by Get Unauthenticated Report Capabilities). The menu contains a hierarchical tree of nodes that guide users through the reporting process, including questions, options, and submission steps.

Query String Params
FieldTypeDescription
variant?stringThe version variant of the menu to retrieve (max 256 characters, default latest)

Submit Unauthenticated Report Menu

POST/reporting/unauthenticated/{type}

Submits a completed unauthenticated report based on the user's navigation through a report menu. This endpoint processes the collected information from the menu flow and creates a formal report for review by Discord's Trust and Safety team.

JSON Params
FieldTypeDescription
versionstringThe version of the report menu schema that was used
variantstringThe variant of the menu that was used
namestringThe report menu type
languagestringThe language code used for the report
breadcrumbsarray[integer]Node IDs clicked in the report menu flow, representing the user's path through the menu
elements?map[string, array[string]]Map of element names to their selected values (for checkboxes and other inputs)
email_tokenstringThe verification token obtained from the Verify Unauthenticated Report endpoint

Request Report Review

POST/reporting/review

Submits a request to have a report on your account reviewed. Report review links are present in emails sent informing you of actions taken on your account. When clicked, these links redirect to https://discord.com/report-review?token=..., where the token can be used with this endpoint to request a review. Returns an empty object on success.

JSON Params
FieldTypeDescription
tokenstringThe report review token obtained from the report review link