server/docs/api/moderation.md
2024-08-19 15:16:01 +02:00

8.1 KiB

Moderation API

Warning

NOT IMPLEMENTED

The Versia Server project uses the Mastodon API to interact with clients. However, the moderation API is custom-made for Versia Server Server, as it allows for more fine-grained control over the server's behavior.

Flags, ModTags and ModNotes

Flags are used by Versia Server Server to automatically attribute tags to a status or account based on rules. ModTags and ModNotes are used by moderators to manually tag and take notes on statuses and accounts.

The difference between flags and modtags is that flags are automatically attributed by the server, while modtags are manually attributed by moderators.

Flag Types

  • content_filter: (Statuses only) The status contains content that was filtered by the server's content filter.
  • bio_filter: (Accounts only) The account's bio contains content that was filtered by the server's content filter.
  • emoji_filter: The status or account contains an emoji that was filtered by the server's content filter.
  • reported: The status or account was previously reported by a user.
  • suspended: The status or account was previously suspended by a moderator.
  • silenced: The status or account was previously silenced by a moderator.

ModTag Types

ModTag do not have set types and can be anything. Versia Server Server autosuggest previously used tags when a moderator is adding a new tag to avoid duplicates.

Data Format

type Flag = {
  id: string,
  // One of the following two fields will be present
  flaggedStatus?: Status,
  flaggedUser?: User,
  flagType: string,
  createdAt: string,
}

type ModTag = {
  id: string,
  // One of the following two fields will be present
  taggedStatus?: Status,
  taggedUser?: User,
  mod: User,
  tag: string,
  createdAt: string,
}

type ModNote = {
  id: string,
  // One of the following two fields will be present
  notedStatus?: Status,
  notedUser?: User,
  mod: User,
  note: string,
  createdAt: string,
}

The User and Status types are the same as the ones in the Mastodon API.

Moderation API Routes

GET /api/v1/moderation/accounts/:id

Returns full moderation data and flags for the account with the given ID.

Output format:

{
  id: string, // Same ID as in account field
  flags: Flag[],
  modtags: ModTag[],
  modnotes: ModNote[],
  account: User,
}

GET /api/v1/moderation/statuses/:id

Returns full moderation data and flags for the status with the given ID.

Output format:

{
  id: string, // Same ID as in status field
  flags: Flag[],
  modtags: ModTag[],
  modnotes: ModNote[],
  status: Status,
}

POST /api/v1/moderation/accounts/:id/modtags

Params:

  • tag: string

Adds a modtag to the account with the given ID

POST /api/v1/moderation/statuses/:id/modtags

Params:

  • tag: string

Adds a modtag to the status with the given ID

POST /api/v1/moderation/accounts/:id/modnotes

Params:

  • note: string

Adds a modnote to the account with the given ID

POST /api/v1/moderation/statuses/:id/modnotes

Params:

  • note: string

Adds a modnote to the status with the given ID

DELETE /api/v1/moderation/accounts/:id/modtags/:modtag_id

Deletes the modtag with the given ID from the account with the given ID

DELETE /api/v1/moderation/statuses/:id/modtags/:modtag_id

Deletes the modtag with the given ID from the status with the given ID

DELETE /api/v1/moderation/accounts/:id/modnotes/:modnote_id

Deletes the modnote with the given ID from the account with the given ID

DELETE /api/v1/moderation/statuses/:id/modnotes/:modnote_id

Deletes the modnote with the given ID from the status with the given ID

GET /api/v1/moderation/modtags

Returns a list of all modtags previously used by moderators

Output format:

{
  tags: string[],
}

Allows moderators to search for accounts based on their flags, this can also include status flags

Params:

  • limit: Number
  • min_id: String. Returns results immediately newer than this ID. In effect, sets a cursor at this ID and paginates forward.
  • max_id: String. All results returned will be lesser than this ID. In effect, sets an upper bound on results.
  • since_id: String. All results returned will be greater than this ID. In effect, sets a lower bound on results.
  • flags: String (optional). Comma-separated list of flag types to filter by. Can be left out to return accounts with at least one flag
  • flag_count: Number (optional). Minimum number of flags to filter by
  • include_statuses: Boolean (optional). If true, includes status flags in the search results
  • account_id: Array of strings (optional). Filters accounts by account ID

This method returns a Link header the same way Mastodon does, to allow for pagination.

Output format:

{
  accounts: {
    account: User,
    modnotes: ModNote[],
    flags: Flag[],
    statuses?: {
        status: Status,
        modnotes: ModNote[],
        flags: Flag[],
    }[],
  }[],
}

Allows moderators to search for statuses based on their flags

Params:

  • limit: Number
  • min_id: String. Returns results immediately newer than this ID. In effect, sets a cursor at this ID and paginates forward.
  • max_id: String. All results returned will be lesser than this ID. In effect, sets an upper bound on results.
  • since_id: String. All results returned will be greater than this ID. In effect, sets a lower bound on results.
  • flags: String (optional). Comma-separated list of flag types to filter by. Can be left out to return statuses with at least one flag
  • flag_count: Number (optional). Minimum number of flags to filter by
  • account_id: Array of strings (optional). Filters statuses by account ID

This method returns a Link header the same way Mastodon does, to allow for pagination.

Output format:

{
  statuses: {
    status: Status,
    modnotes: ModNote[],
    flags: Flag[],
  }[],
}

Allows moderators to search for accounts based on their modtags

Params:

  • limit: Number
  • min_id: String. Returns results immediately newer than this ID. In effect, sets a cursor at this ID and paginates forward.
  • max_id: String. All results returned will be lesser than this ID. In effect, sets an upper bound on results.
  • since_id: String. All results returned will be greater than this ID. In effect, sets a lower bound on results.
  • tags: String (optional). Comma-separated list of tags to filter by. Can be left out to return accounts with at least one tag
  • tag_count: Number (optional). Minimum number of tags to filter by
  • include_statuses: Boolean (optional). If true, includes status tags in the search results
  • account_id: Array of strings (optional). Filters accounts by account ID

This method returns a Link header the same way Mastodon does, to allow for pagination.

Output format:

{
  accounts: {
    account: User,
    modnotes: ModNote[],
    modtags: ModTag[],
    statuses?: {
        status: Status,
        modnotes: ModNote[],
        modtags: ModTag[],
    }[],
  }[],
}

Allows moderators to search for statuses based on their modtags

Params:

  • limit: Number
  • min_id: String. Returns results immediately newer than this ID. In effect, sets a cursor at this ID and paginates forward.
  • max_id: String. All results returned will be lesser than this ID. In effect, sets an upper bound on results.
  • since_id: String. All results returned will be greater than this ID. In effect, sets a lower bound on results.
  • tags: String (optional). Comma-separated list of tags to filter by. Can be left out to return statuses with at least one tag
  • tag_count: Number (optional). Minimum number of tags to filter by
  • account_id: Array of strings (optional). Filters statuses by account ID
  • include_statuses: Boolean (optional). If true, includes status tags in the search results

This method returns a Link header the same way Mastodon does, to allow for pagination.

Output format:

{
  statuses: {
    status: Status,
    modnotes: ModNote[],
    modtags: ModTag[],
  }[],
}