Reports¶
A safety report tells TEBHOS moderators that a message, a user or a guild broke the rules. Any user account can file one. Reports are reviewed by TEBHOS staff.
| Operation | Target |
|---|---|
| Report message | One message |
| Report user | One account, optionally with a guild for context |
| Report guild | One guild |
| Create profile report | One account, with free text (used by the profile report dialog) |
Access rules¶
Every route requires a user session; a bot token is rejected with 403 ACCESS_DENIED. No permission is required, and TEBHOS does not check whether the reporter can see the reported content.
Every report is stored against a reported account: the message author for a message report, the reported user for a user report, and the guild owner for a guild report. Submission dispatches no Gateway event.
Categories are not validated by the server
The server stores category as given. Clients should send one of the values listed below, which are the values TEBHOS moderation tools expect.
Not supported on TEBHOS
Anonymous Digital Services Act notices (email verification, tickets) are not implemented; reports require an account. Reports are not deduplicated, and no evidence snapshot of the surrounding conversation is taken.
Report response¶
Every successful submission returns 201:
message is a human-readable confirmation. No report ID is returned.
Message report categories¶
| Value | Description |
|---|---|
| harassment | Harassment or bullying |
| hate_speech | Hate speech |
| violent_content | Violent or graphic content |
| spam | Spam or scam |
| nsfw_violation | Sexual or explicit content |
| illegal_activity | Illegal activity |
| doxxing | Sharing personal information |
| self_harm | Self-harm or suicide |
| child_safety | Child safety concerns |
| malicious_links | Malicious links |
| impersonation | Impersonation |
| other | Other |
User report categories¶
| Value | Description |
|---|---|
| harassment | Harassment or bullying |
| hate_speech | Hate speech |
| spam_account | Spam account |
| impersonation | Impersonation |
| underage_user | Underage user |
| inappropriate_profile | Inappropriate profile |
| other | Other |
Guild report categories¶
| Value | Description |
|---|---|
| harassment | Harassment |
| hate_speech | Hate speech |
| extremist_community | Extremist community |
| illegal_activity | Illegal activity |
| child_safety | Child safety concerns |
| raid_coordination | Raid coordination |
| spam | Spam or scam community |
| malware_distribution | Malware distribution |
| other | Other |
Report message¶
POST /reports/message
Reports one message. The message author becomes the reported account.
JSON body¶
| Field | Type | Description |
|---|---|---|
| channel_id | snowflake | The channel containing the message (stored as context) |
| message_id | snowflake | The reported message |
| category | string | A message report category |
| description? | string | Additional information (at most 2000 characters) |
Response¶
| Status | Body | Condition |
|---|---|---|
| 201 | report response | The report was stored |
| 400 | error response | message_id is not a valid ID, or description is longer than 2000 characters (BAD_REQUEST) |
| 403 | error response | The caller is a bot (ACCESS_DENIED) |
| 404 | error response | The message does not exist (NOT_FOUND) |
Example¶
curl -X POST "https://tebhos.com/api/v1/reports/message" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"channel_id":"1489002177550843905","message_id":"1501314428688998190","category":"spam"}'
Report user¶
POST /reports/user
Reports an account.
JSON body¶
| Field | Type | Description |
|---|---|---|
| user_id | snowflake | The reported user |
| category | string | A user report category |
| guild_id? | snowflake | The guild in which the conduct happened |
| description? | string | Additional information (at most 2000 characters) |
Response¶
| Status | Body | Condition |
|---|---|---|
| 201 | report response | The report was stored |
| 400 | error response | user_id is not a valid ID, or description is too long (BAD_REQUEST) |
| 403 | error response | The caller is a bot (ACCESS_DENIED) |
| 404 | error response | The user does not exist (NOT_FOUND) |
Report guild¶
POST /reports/guild
Reports a guild. The guild owner becomes the reported account.
JSON body¶
| Field | Type | Description |
|---|---|---|
| guild_id | snowflake | The reported guild |
| category | string | A guild report category |
| invite_code? | string | The invite through which the reporter found the guild |
Response¶
| Status | Body | Condition |
|---|---|---|
| 201 | report response | The report was stored |
| 400 | error response | guild_id is not a valid ID (BAD_REQUEST) |
| 403 | error response | The caller is a bot (ACCESS_DENIED) |
| 404 | error response | The guild does not exist (NOT_FOUND) |
Create profile report¶
POST /reports
A general report against an account, used by the TEBHOS profile report dialog.
JSON body¶
| Field | Type | Description |
|---|---|---|
| reported_profile_id | snowflake | The reported user |
| category | string | 1-50 characters. The profile dialog sends spam, harassment, hate_speech, impersonation or other |
| description? | string | Additional information (at most 2000 characters) |
| targets? | array[string] | Parts of the profile being reported, for example photo, name, bio, tag. Accepted but not currently stored |
| attachment_url? | string | A supporting image URL. Accepted but not currently stored |
Response¶
| Status | Body | Condition |
|---|---|---|
| 201 | report response | The report was stored |
| 400 | error response | category or description has an invalid length (INVALID_FORM_BODY), or reported_profile_id is not a valid ID (BAD_REQUEST) |
| 403 | error response | The caller is a bot (ACCESS_DENIED) |
Rate limit¶
All four routes share one bucket: 10 reports per hour per user, on the report bucket.