A report tells the instance's moderators that a message, a user profile or a guild breaks the rules. A signed-in user reports a message or a profile by answering a report flow , and anyone with a verified email address can file a Digital Services Act notice without an account. Moderators work with stored reports through the Admin Reports API .
A Digital Services Act notice takes three calls, Send DSA report email , Verify DSA report email and Create DSA report , and the reporter gets a receipt email with the report ID when the notice is filed.
Fluxer keeps a copy of the reported content and profile when a report is filed, and editing or deleting the content afterwards doesn't change it.
A report flow is the set of screens a reporter answers before a report is filed. Get report flow returns every screen of one flow, already translated, and a client renders the flow from that response.
Screen kind Field that is set What the reporter does Choice optionsPicks one option Checklist checklistTicks at least min_checked items and continues Info next_screen_idReads the text and continues
The reporter starts at start_screen_id and follows each outcome until one has the type submit, and this path is the walk. Each screen on the walk adds one step to the submission, and the report is filed under the reason of the final submit outcome. An end outcome finishes the walk without a report.
revision_hash identifies the structure of one flow variant and changes whenever a screen, option, item or outcome changes. A submission sends back the hash of the flow the reporter answered.
Walk Hash Result Valid Current or outdated The report is filed Invalid Current 400 INVALID_REPORT_FLOW_ANSWERS with step_index Invalid Outdated 409 REPORT_FLOW_OUTDATED, and the client fetches the flow again and restarts the walk
Field Type Description target_type string Report flow target type surface string Report flow surface revision_hash string The revision hash of this variant (16 hexadecimal characters) locale string The locale the copy was rendered in start_screen_id string The ID of the screen a walk starts on guidelines_url ?string The instance's community guidelines page, or null when the instance has none screens array[report flow screen object] Every screen of the variant notices array[report flow notice object] Every notice an end outcome lists
" revision_hash " : " 9c41d2a07e5b18f3 " ,
" start_screen_id " : " profile_parts " ,
" guidelines_url " : " https://example.com/guidelines " ,
" title " : " Which parts of their profile are a problem? " ,
" subtitle " : " Pick as many as you need. " ,
{ " id " : " photo " , " label " : " Pictures " , " description " : " What they use as avatar and banner " },
{ " id " : " name " , " label " : " Names " , " description " : " Username, display name or community nickname " }
" outcome " : { " type " : " screen " , " screen_id " : " root_user " , " reason " : null , " notice_id " : null , " url " : null }
Field Type Description id string The screen ID, unique within the flow title string The question or heading subtitle ?string Text shown under the title urgent boolean Whether the screen covers threats, self-harm, a risk to a minor or another serious harm, and needs an urgency notice options array[report flow option object] The options in display order, empty on a checklist screen options_heading ?string A heading shown above the options checklist ?report flow checklist object The checklist, set only on a checklist screen next_screen_id ?string The screen the Next button leads to, set only on an info screen
Field Type Description id string The option ID, unique within its screen label string The option text outcome report flow outcome objectWhat choosing the option does
Every field is present, and the ones that don't apply to type are null.
Field Type Description type string Report flow outcome type screen_id ?string The next screen when type is screen reason ?string The report reason when type is submit notice_id ?string The notice to show when type is end, or null for the thank-you screen url ?string The page to open when type is link
Field Type Description items array[report flow checklist item object] The items in display order min_checked integer The fewest items the reporter must tick outcome report flow outcome objectWhere the screen leads, a screen or submit outcome
Field Type Description id string The item ID, unique within its checklist label string The item text description ?string A second line shown under the label
A notice says why a walk ended without a report.
Field Type Description id string The notice ID title string The notice heading body string The notice text
A step is one answered screen in a submission. A choice screen's step sends option_id, a checklist screen's step sends item_ids and an info screen's step sends neither.
Field Type Description screen_id string The ID of the screen (1-48 characters) option_id? string The ID of the chosen option (1-48 characters) item_ids? array[string] The IDs of the ticked items (1-32 IDs of 1-48 characters)
Field Type Description report_id snowflake The ID of the report status string Report status , always pending on a new reportreported_at ISO8601 timestamp When the report was filed
Field Type Description ok boolean Always true
Field Type Description ticket string The credential for Create DSA report , valid for one hour
Value Description pending No moderator has resolved the report resolved A moderator closed the report unknown A status this API version doesn't know
Value Description message A message user A user profile guild A guild, on the dsa surface only
Value Description in_app The flow a signed-in client shows (the default) dsa The flow the public Digital Services Act form shows
Value Description screen Go to the screen in screen_id submit Show a summary, then file a report under reason end Finish without a report and show the notice in notice_id, or a thank-you screen link Open url and stay on the current screen
A report filed through a flow stores one of these reasons. Each reason maps to a category for each target type, and List report reasons returns that mapping. Handle a reason value you don't know, because new reasons can appear.
Value Description spam Spam fake_account Fake or deceptive account platform_abuse Scraping, automation or other platform abuse account_trading Buying or selling accounts, logins or card details metric_manipulation Faked member or reaction counts harassment Harassment or bullying unwanted_contact Stalking or unwanted contact raid Raid or coordinated attack false_claims_about_person False claims used to target a person hate_slurs Slurs, hateful symbols or stereotypes hate_dehumanizing Dehumanizing a group hate_incitement Calls for violence or exclusion against a group atrocity_denial Genocide or atrocity denial or celebration lgbtq_targeting Misgendering, deadnaming, outing or identity denial conversion_therapy Promoting conversion therapy hate_other Other attacks on people for who they are violent_threat Threat of violence violence_incitement Encouraging violence or instructions to harm violence_glorification Glorifying real-world violence graphic_violence Real violence shown to shock terrorism_extremism Terrorism or violent extremism harmful_false_claims False claims likely to cause serious harm deceptive_synthetic_media Fake or AI media presented as real sexual_unwanted Sexual images or messages nobody asked for adult_content_unmarked Adult content outside an 18+ space intimate_image_abuse Intimate images shared without consent sexual_exploitation Sexual exploitation, coercion or trafficking minor_fictional_sexualization Sexualized fictional child minor_sexualization Sexual comments about minors minor_sexual_contact Flirting with or sexually messaging a minor minor_sexual_content A minor sharing sexual content themselves csam Child sexual abuse material minor_grooming Grooming a minor minor_contact Predatory contact with a minor minor_in_adult_space A minor in an 18+ space minor_dating_community Community for dating between minors doxxing Private information shared without consent underage Under the minimum age wellbeing_concern Worried about someone's safety self_harm_promotion Encouraging self-harm or sharing methods suicide_promotion Encouraging suicide eating_disorder_promotion Encouraging disordered eating self_harm_graphic Graphic self-harm images self_harm_pressure Pressuring someone to harm themselves impersonation_staff Pretending to be staff or support impersonation_person Impersonating a person impersonation_public_figure Impersonating a well-known person impersonation_organization Impersonating a company, brand or group fraud Conning people out of money or accounts illegal_goods Drug, weapon or other illegal sales illegal_activity Other illegal activity malware_phishing Phishing, malware or hacking attempts ban_evasion Getting around a ban permits_violations Community allows serious rule-breaking copyright Copyright or trademark complaint other Something not listed
Every report stores one of these categories.
Value Description harassment Harassment, bullying or intimidation hate_speech Hatred against protected groups violent_content Content showing or promoting violence extremist_community A guild promoting extremist or terrorist ideologies raid_coordination A guild coordinating attacks on other communities spam Unsolicited bulk messages or promotional content spam_account An account used for spamming nsfw_violation Adult content outside age-restricted channels inappropriate_profile Inappropriate or offensive profile content illegal_activity Content promoting or facilitating illegal activities doxxing Content revealing private personal information self_harm Content promoting self-harm or suicide child_safety Content that endangers minors or shows child abuse underage_user Someone who appears to be under the minimum age malicious_links Links to malware, phishing or other malicious sites malware_distribution Distribution of malware impersonation Falsely claiming to be another person or entity other Anything the other categories don't cover
Value Description AT Austria BE Belgium BG Bulgaria HR Croatia CY Cyprus CZ Czechia DK Denmark EE Estonia FI Finland FR France DE Germany GR Greece HU Hungary IE Ireland IT Italy LV Latvia LT Lithuania LU Luxembourg MT Malta NL Netherlands PL Poland PT Portugal RO Romania SK Slovakia SI Slovenia ES Spain SE Sweden
GET/v1/reports/flows/{target_type} Unauthenticated
Returns the report flow object for one target type and surface, translated into one locale.
Field Type Description surface? string Report flow surface (default in_app)locale? string The language tag to translate into (1-35 characters), defaulting to the request locale
Status Body Condition 200 report flow objectThe flow was returned 400 error response INVALID_FORM_BODY for an unknown target type or surface, or guild outside the dsa surface
The rate limit is 40 requests per 10 seconds, on the report:list bucket.
POST/v1/reports/flows/message/submissions
Files a report about a message from the reporter's answers to the in_app message flow and returns a report object . It needs a user session token, and the reporter must be able to read the message.
Field Type Description channel_id snowflake The ID of the channel the message is in message_id snowflake The ID of the reported message revision_hash string The revision hash of the flow the reporter answered (1-64 characters) steps array[report flow step object] The answered screens in walk order (1-16 steps) locale? string The language tag the reporter saw the flow in (1-35 characters)
Status Body Condition 200 report objectThe report was filed 400 error response INVALID_REPORT_FLOW_ANSWERS when the answers don't fit the current flow400 error response UNCLAIMED_ACCOUNT_CANNOT_SUBMIT_REPORTS for an unclaimed account while interaction_tier is legacy400 error response CANNOT_REPORT_OWN_MESSAGE when the reporter wrote the message403 error response REPORT_EMAIL_VERIFICATION_REQUIRED for an unverified email while interaction_tier is legacy403 error response REPORT_BANNED when the account is banned from reporting403 error response MISSING_PERMISSIONS when the reporter can't view the channel404 error response UNKNOWN_CHANNEL or UNKNOWN_MESSAGE when the reporter can't see the channel or message404 error response UNKNOWN_USER when the author's account no longer exists409 error response REPORT_FLOW_OUTDATED when the answers came from an outdated flow409 error response CONFLICT when the reporter reported this message in the last 365 days
The rate limit is 10 requests per hour, on the report:create bucket. One reporter can file at most 5 reports an hour across the report routes, and Rate limits lists the lower limits for one channel, guild or message. When interaction_tier is enforced, an account that isn't verified can still report, up to 5 reports a day for the account and 10 a day from one IP address.
POST/v1/reports/flows/user/submissions
Files a report about a user's profile from the reporter's answers to the in_app user flow and returns a report object . It needs a user session token.
Field Type Description user_id snowflake The ID of the reported user guild_id? snowflake The ID of the guild the reporter saw the profile in revision_hash string The revision hash of the flow the reporter answered (1-64 characters) steps array[report flow step object] The answered screens in walk order (1-16 steps) locale? string The language tag the reporter saw the flow in (1-35 characters)
Status Body Condition 200 report objectThe report was filed 400 error response INVALID_REPORT_FLOW_ANSWERS when the answers don't fit the current flow400 error response UNCLAIMED_ACCOUNT_CANNOT_SUBMIT_REPORTS for an unclaimed account while interaction_tier is legacy400 error response CANNOT_REPORT_YOURSELF when the report is about the reporter's own account403 error response REPORT_EMAIL_VERIFICATION_REQUIRED for an unverified email while interaction_tier is legacy403 error response REPORT_BANNED when the account is banned from reporting404 error response UNKNOWN_USER when user_id isn't an account, or is the system account404 error response UNKNOWN_GUILD when guild_id isn't a guild the reporter is in409 error response REPORT_FLOW_OUTDATED when the answers came from an outdated flow409 error response CONFLICT when the reporter reported this user in the last 24 hours
The rate limit is 10 requests per hour, on the report:create bucket. One reporter can file at most 5 reports an hour across the report routes. When interaction_tier is enforced, an account that isn't verified can still report, up to 5 reports a day for the account and 10 a day from one IP address.
POST/v1/reports/dsa/email/sendUnauthenticated
Sends a Digital Services Act verification code to an email address and returns a success object . The code expires after 10 minutes, and one address can get one code per minute and 3 per hour.
Field Type Description email string The address that gets the code (1-254 characters)
Status Body Condition 200 success objectThe code was sent 400 error response EMAIL_UNAVAILABLE_ON_INSTANCE when the instance uses username sign-in400 error response INVALID_FORM_BODY when the address is invalid or its domain can't receive mail503 error response SERVICE_UNAVAILABLE when the email couldn't be sent
The rate limit is 5 requests per hour, on the dsa:report:email:send bucket.
POST/v1/reports/dsa/email/verifyUnauthenticated
Exchanges a verification code for a ticket object . Each address gets 5 attempts in 10 minutes, and a sixth attempt deletes the code until you send a new one.
Field Type Description email string The address that got the code (1-254 characters) code string The code in XXXX-XXXX form
Status Body Condition 200 ticket objectThe code matched 400 error response INVALID_DSA_VERIFICATION_CODE when the code is wrong or expired, or attempts ran out400 error response EMAIL_UNAVAILABLE_ON_INSTANCE when the instance uses username sign-in
The rate limit is 10 requests per hour, on the dsa:report:email:verify bucket.
POST/v1/reports/dsaUnauthenticated
Files a Digital Services Act notice about a message, user or guild and returns a report object . This is the only way to report a guild. Walk the flow with surface=dsa and send the fields for your report_type. The ticket is used up only when the notice is filed.
Field Type Description ticket string The ticket from Verify DSA report email (1-128 characters) report_type string The target type of the notice revision_hash string The revision hash of the dsa flow the reporter answered (1-64 characters) steps array[report flow step object] The answered screens in walk order (1-16 steps) additional_info string The reporter's explanation of the problem (1-1000 characters) good_faith_confirmed boolean Must be true, confirming the notice is accurate and complete reporter_full_legal_name?1 string The reporter's full legal name (1-160 characters) reporter_country_of_residence string The reporter's EU country code locale? string The language tag the reporter saw the flow in (1-35 characters)
1 Required unless the walk ends in the child_safety category
Field Type Description message_link1 string The link to the reported message (1-2048 characters) reported_user_tag? string The author's tag in username#1234 form, or the username (1-37 characters)
1 An absolute URL with the path /channels/{guild_id}/{channel_id}/{message_id}, with @me in place of the guild ID for a direct message
Field Type Description user_id?1 snowflake The ID of the reported user user_tag?1 string The user's tag in username#1234 form, or the username (1-37 characters)
1 Send at least one, and when you send both they must be the same account
Field Type Description guild_id snowflake The ID of the reported guild invite_code? string An invite code or URL for the guild (1-64 characters)
Status Body Condition 200 report objectThe notice was filed 400 error response INVALID_DSA_TICKET when the ticket is unknown or expired400 error response INVALID_DSA_REPORT_TARGET when the user ID and tag point to different accounts, or the invite isn't for guild_id400 error response INVALID_REPORT_FLOW_ANSWERS when the answers don't fit the current dsa flow404 error response UNKNOWN_MESSAGE when the message link or author tag doesn't match a message404 error response UNKNOWN_USER, UNKNOWN_GUILD or UNKNOWN_INVITE when the reported user, guild or invite doesn't exist409 error response REPORT_FLOW_OUTDATED when the answers came from an outdated flow
The rate limit is 5 requests per hour, on the dsa:report:create bucket.