Skip to content
Developers
Menu

API reference

Moderation

Timeouts, reports, the report queues and the community moderation log. A timed-out member keeps only View Channel and Read Message History in the community, and anything else answers 403 timed_out.

Every path is relative to https://api.palloo.app/v1. Send a bot token as Authorization: Bearer palloo_bot_... unless the operation says otherwise; see Authentication.

On this page

Timeout member

PUT /communities/{id}/members/{userID}/timeout Bot token: Call it with a bot token (people can call it too).

Time a member out. Requires Moderate Members, and the member must be below the caller's highest role. Until the timeout ends the member keeps only View Channel and Read Message History everywhere in the community; anything else answers 403 timed_out. A second timeout replaces the first. Leaving and rejoining does not end it.

Required permissions

Requires Moderate Members, and the member must be below the caller's highest role.

Parameters

Parameters of Timeout member
Name In Type Description
id Required path string

Community ID.

userID Required path string

The member's user ID.

Request body

application/json: TimeoutRequest (required)

Fields of the application/json request body
FieldTypeDescription
until string (date-time)

When the timeout ends. In the future and at most 28 days after the server's clock.

duration_seconds integer

How long the timeout lasts, counted from the server's clock. Prefer this for presets.

at least 1; at most 2419200

reason string or null

Recorded in the moderation log. At most 512 characters with no control or invisible formatting characters.

Example request body
{
  "until": "2026-10-15T09:00:00Z",
  "duration_seconds": 1,
  "reason": "string"
}

Responses

200

The member with timeout_until set. Also sent to every member as member_update.

Body: Member

Example response (200)
{
  "user": {
    "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
    "username": "string",
    "display_name": "string",
    "kind": "user",
    "avatar": "string",
    "avatar_dark": "string"
  },
  "nickname": "string",
  "avatar": "string",
  "avatar_dark": "string",
  "banner": "string",
  "bio": "string",
  "pronouns": "string",
  "roles": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "joined_at": "2026-10-15T09:00:00Z",
  "timeout_until": "2026-10-15T09:00:00Z",
  "bot_presence_intent": false
}
400

invalid_body, invalid_timeout or invalid_reason.

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission, timed_out (the caller is timed out), role_hierarchy (the member is not below the caller's highest role) or cannot_timeout_owner.

Body: Error

404

community_not_found (no such community, or the caller is not a member) or member_not_found (the target is not a member).

Body: Error

409

cannot_timeout_self.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Remove timeout

DELETE /communities/{id}/members/{userID}/timeout Bot token: Call it with a bot token (people can call it too).

End a timeout early. Requires Moderate Members, and the user must be below the caller's highest role. Works for a user who has left while timed out.

Required permissions

Requires Moderate Members, and the user must be below the caller's highest role.

Parameters

Parameters of Remove timeout
Name In Type Description
id Required path string

Community ID.

userID Required path string

The member's user ID.

X-Audit-Log-Reason header string

A reason recorded in the community's moderation log, percent-encoded UTF-8. Trimmed, then at most 512 characters with no control or invisible formatting characters.

Responses

204

Removed. A member gets member_update with timeout_until null.

400

invalid_reason: the X-Audit-Log-Reason header is not valid.

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission, timed_out, role_hierarchy or cannot_timeout_owner.

Body: Error

404

community_not_found or timeout_not_found (no active timeout).

Body: Error

409

cannot_timeout_self.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Moderation log

GET /communities/{id}/moderation-log Bot token: Call it with a bot token (people can call it too).

A page of the community's moderation log, newest first. Requires View Audit Log. Callers without Moderate Members never see report.update entries and get report_id as null. message.delete entries in a channel the caller cannot view now carry {"channel_hidden": true} as their details (Administrators see everything). Channel entries (channel.create, channel.update, channel.delete, channel.reorder and the overwrite actions) name and list channels whatever the caller can view, as on Discord: View Audit Log is a trusted permission that shows the community's whole structure.

Required permissions

Requires View Audit Log.

Parameters

Parameters of Moderation log
Name In Type Description
id Required path string

Community ID.

before query string

Return entries older than this entry ID. Use next from the previous page.

action query ModerationAction
actor_id query string

Only entries by this user.

target_id query string

Only entries about this user, role, channel, message or report.

limit query integer

at least 1; at most 100; default 50

Responses

200

One page of entries.

Body: ModerationLogPage

Example response (200)
{
  "entries": [
    {
      "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
      "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
      "action": "community.update",
      "actor_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
      "actor_kind": "member",
      "actor": {
        "id": {},
        "username": "string",
        "display_name": "string",
        "kind": {},
        "avatar": {},
        "avatar_dark": {}
      },
      "target_type": "community",
      "target_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
      "target_user": {
        "id": {},
        "username": "string",
        "display_name": "string",
        "kind": {},
        "avatar": {},
        "avatar_dark": {}
      },
      "report_id": "string",
      "reason": "string",
      "details": {},
      "created_at": "2026-10-15T09:00:00Z"
    }
  ],
  "next": "string"
}
400

invalid_query: a filter, cursor or limit (1 to 100) is not valid.

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission: the caller is a member but lacks the permission.

Body: Error

404

community_not_found: no such community, or the caller is not a member. The two cases are indistinguishable on purpose.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

List auto moderation rules

GET /communities/{id}/auto-moderation/rules Bot token: Call it with a bot token (people can call it too).

The community's AutoMod rules. Requires Manage Server. Every rule route answers 403 auto_moderation_disabled while automod_enabled on GET /instance is false.

Required permissions

Requires Manage Server.

Parameters

Parameters of List auto moderation rules
Name In Type Description
id Required path string

Community ID.

Responses

200

The rules, oldest first.

Body: AutoModerationRuleList

Example response (200)
{
  "rules": [
    {
      "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
      "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
      "name": "string",
      "creator_id": "string",
      "updated_by": "string",
      "event_type": "message_send",
      "trigger_type": "keyword",
      "trigger_metadata": {
        "keyword_filter": [],
        "regex_patterns": [],
        "presets": [],
        "allow_list": [],
        "mention_total_limit": 1,
        "mention_raid_protection_enabled": false
      },
      "actions": [
        {
          "type": "block_message",
          "metadata": {}
        }
      ],
      "enabled": false,
      "exempt_roles": [
        "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
      ],
      "exempt_channels": [
        "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
      ],
      "created_at": "2026-10-15T09:00:00Z",
      "updated_at": "2026-10-15T09:00:00Z"
    }
  ]
}
401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission or timed_out (no Manage Server, or no Moderate Members for a rule with a timeout), or auto_moderation_disabled: AutoMod is turned off on this instance (PALLOO_AUTOMOD_ENABLED).

Body: Error

404

community_not_found: no such community, or the caller is not a member. The two cases are indistinguishable on purpose.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Create auto moderation rule

POST /communities/{id}/auto-moderation/rules Bot token: Call it with a bot token (people can call it too).

Create an AutoMod rule. Requires Manage Server, and Moderate Members when the rule has a timeout action. A community has at most 6 keyword rules and one rule of each other trigger type. Recorded in the moderation log with the optional reason.

Required permissions

Requires Manage Server, and Moderate Members when the rule has a `timeout` action.

Parameters

Parameters of Create auto moderation rule
Name In Type Description
id Required path string

Community ID.

X-Audit-Log-Reason header string

A reason recorded in the community's moderation log, percent-encoded UTF-8. Trimmed, then at most 512 characters with no control or invisible formatting characters.

Request body

application/json: CreateAutoModerationRuleRequest (required)

Fields of the application/json request body
FieldTypeDescription
nameRequired string
event_type string

One of message_send

trigger_typeRequired AutoModerationTriggerType
trigger_metadata AutoModerationTriggerMetadata
actionsRequired array of AutoModerationAction
enabled boolean

default true

exempt_roles array of string

IDs that are not roles of the community are dropped.

exempt_channels array of string

IDs that are not text channels or categories of the community are dropped.

Example request body
{
  "name": "string",
  "event_type": "message_send",
  "trigger_type": "keyword",
  "trigger_metadata": {
    "keyword_filter": [
      "string"
    ],
    "regex_patterns": [
      "string"
    ],
    "presets": [
      "profanity"
    ],
    "allow_list": [
      "string"
    ],
    "mention_total_limit": 1,
    "mention_raid_protection_enabled": false
  },
  "actions": [
    {
      "type": "block_message",
      "metadata": {
        "custom_message": "string",
        "channel_id": {},
        "duration_seconds": 1
      }
    }
  ],
  "enabled": true,
  "exempt_roles": [
    "string"
  ],
  "exempt_channels": [
    "string"
  ]
}

Responses

201

Created. Sent as auto_moderation_rule_create to members with Manage Server.

Body: AutoModerationRule

Example response (201)
{
  "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
  "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
  "name": "string",
  "creator_id": "string",
  "updated_by": "string",
  "event_type": "message_send",
  "trigger_type": "keyword",
  "trigger_metadata": {
    "keyword_filter": [
      "string"
    ],
    "regex_patterns": [
      "string"
    ],
    "presets": [
      "profanity"
    ],
    "allow_list": [
      "string"
    ],
    "mention_total_limit": 1,
    "mention_raid_protection_enabled": false
  },
  "actions": [
    {
      "type": "block_message",
      "metadata": {
        "custom_message": "string",
        "channel_id": {},
        "duration_seconds": 1
      }
    }
  ],
  "enabled": false,
  "exempt_roles": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "exempt_channels": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "created_at": "2026-10-15T09:00:00Z",
  "updated_at": "2026-10-15T09:00:00Z"
}
400

invalid_body, invalid_reason or invalid_auto_moderation_rule (the message names the field).

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission or timed_out (no Manage Server, or no Moderate Members for a rule with a timeout), or auto_moderation_disabled: AutoMod is turned off on this instance (PALLOO_AUTOMOD_ENABLED).

Body: Error

404

community_not_found: no such community, or the caller is not a member. The two cases are indistinguishable on purpose.

Body: Error

409

auto_moderation_rule_limit: the community has the most rules of that trigger type.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Get auto moderation rule

GET /communities/{id}/auto-moderation/rules/{ruleID} Bot token: Call it with a bot token (people can call it too).

One AutoMod rule. Requires Manage Server.

Required permissions

Requires Manage Server.

Parameters

Parameters of Get auto moderation rule
Name In Type Description
id Required path string

Community ID.

ruleID Required path string

AutoMod rule ID.

Responses

200

The rule.

Body: AutoModerationRule

Example response (200)
{
  "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
  "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
  "name": "string",
  "creator_id": "string",
  "updated_by": "string",
  "event_type": "message_send",
  "trigger_type": "keyword",
  "trigger_metadata": {
    "keyword_filter": [
      "string"
    ],
    "regex_patterns": [
      "string"
    ],
    "presets": [
      "profanity"
    ],
    "allow_list": [
      "string"
    ],
    "mention_total_limit": 1,
    "mention_raid_protection_enabled": false
  },
  "actions": [
    {
      "type": "block_message",
      "metadata": {
        "custom_message": "string",
        "channel_id": {},
        "duration_seconds": 1
      }
    }
  ],
  "enabled": false,
  "exempt_roles": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "exempt_channels": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "created_at": "2026-10-15T09:00:00Z",
  "updated_at": "2026-10-15T09:00:00Z"
}
401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission or timed_out (no Manage Server, or no Moderate Members for a rule with a timeout), or auto_moderation_disabled: AutoMod is turned off on this instance (PALLOO_AUTOMOD_ENABLED).

Body: Error

404

auto_moderation_rule_not_found or community_not_found.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Update auto moderation rule

PATCH /communities/{id}/auto-moderation/rules/{ruleID} Bot token: Call it with a bot token (people can call it too).

Change an AutoMod rule; fields left out keep their value, and trigger_type cannot change. Requires Manage Server, and Moderate Members when the rule has or gets a timeout action. The caller becomes the rule's updated_by, whose authority its timeouts use.

Required permissions

Requires Manage Server, and Moderate Members when the rule has or gets a `timeout` action.

Parameters

Parameters of Update auto moderation rule
Name In Type Description
id Required path string

Community ID.

ruleID Required path string

AutoMod rule ID.

X-Audit-Log-Reason header string

A reason recorded in the community's moderation log, percent-encoded UTF-8. Trimmed, then at most 512 characters with no control or invisible formatting characters.

Request body

application/json: UpdateAutoModerationRuleRequest (required)

Fields of the application/json request body
FieldTypeDescription
name string
event_type string

One of message_send

trigger_type AutoModerationTriggerType

Accepted only when it is the rule's own trigger type.

One of keyword, keyword_preset, mention_spam, spam

trigger_metadata AutoModerationTriggerMetadata
actions array of AutoModerationAction
enabled boolean
exempt_roles array of string
exempt_channels array of string
Example request body
{
  "name": "string",
  "event_type": "message_send",
  "trigger_type": "keyword",
  "trigger_metadata": {
    "keyword_filter": [
      "string"
    ],
    "regex_patterns": [
      "string"
    ],
    "presets": [
      "profanity"
    ],
    "allow_list": [
      "string"
    ],
    "mention_total_limit": 1,
    "mention_raid_protection_enabled": false
  },
  "actions": [
    {
      "type": "block_message",
      "metadata": {
        "custom_message": "string",
        "channel_id": {},
        "duration_seconds": 1
      }
    }
  ],
  "enabled": false,
  "exempt_roles": [
    "string"
  ],
  "exempt_channels": [
    "string"
  ]
}

Responses

200

The rule as it now is. Sent as auto_moderation_rule_update.

Body: AutoModerationRule

Example response (200)
{
  "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
  "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A",
  "name": "string",
  "creator_id": "string",
  "updated_by": "string",
  "event_type": "message_send",
  "trigger_type": "keyword",
  "trigger_metadata": {
    "keyword_filter": [
      "string"
    ],
    "regex_patterns": [
      "string"
    ],
    "presets": [
      "profanity"
    ],
    "allow_list": [
      "string"
    ],
    "mention_total_limit": 1,
    "mention_raid_protection_enabled": false
  },
  "actions": [
    {
      "type": "block_message",
      "metadata": {
        "custom_message": "string",
        "channel_id": {},
        "duration_seconds": 1
      }
    }
  ],
  "enabled": false,
  "exempt_roles": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "exempt_channels": [
    "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
  ],
  "created_at": "2026-10-15T09:00:00Z",
  "updated_at": "2026-10-15T09:00:00Z"
}
400

invalid_body, invalid_reason or invalid_auto_moderation_rule.

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission or timed_out (no Manage Server, or no Moderate Members for a rule with a timeout), or auto_moderation_disabled: AutoMod is turned off on this instance (PALLOO_AUTOMOD_ENABLED).

Body: Error

404

auto_moderation_rule_not_found or community_not_found.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Delete auto moderation rule

DELETE /communities/{id}/auto-moderation/rules/{ruleID} Bot token: Call it with a bot token (people can call it too).

Delete an AutoMod rule. Requires Manage Server, and Moderate Members when the rule has a timeout action.

Required permissions

Requires Manage Server, and Moderate Members when the rule has a `timeout` action.

Parameters

Parameters of Delete auto moderation rule
Name In Type Description
id Required path string

Community ID.

ruleID Required path string

AutoMod rule ID.

X-Audit-Log-Reason header string

A reason recorded in the community's moderation log, percent-encoded UTF-8. Trimmed, then at most 512 characters with no control or invisible formatting characters.

Responses

204

Deleted. Sent as auto_moderation_rule_delete with the rule as it was.

400

invalid_reason: the X-Audit-Log-Reason header is not valid.

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission or timed_out (no Manage Server, or no Moderate Members for a rule with a timeout), or auto_moderation_disabled: AutoMod is turned off on this instance (PALLOO_AUTOMOD_ENABLED).

Body: Error

404

auto_moderation_rule_not_found or community_not_found.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error

Quarantine attachment

PUT /attachments/{id}/quarantine Bot token: Call it with a bot token (people can call it too).

Hide an attachment from everyone. Requires Manage Messages in its channel.

Links stop working at once (with S3, as soon as the file has moved, normally within seconds); its message keeps it with quarantined: true and no URLs, and members receive message_update. Recorded in the moderation log as attachment.quarantine. Only instance admins can release it. DM attachments are quarantined through the admin route.

Required permissions

Requires Manage Messages in its channel.

Parameters

Parameters of Quarantine attachment
Name In Type Description
id Required path string

Attachment ID (the ID of the upload it came from).

Request body

application/json: QuarantineRequest

Fields of the application/json request body
FieldTypeDescription
reason string

Up to 512 characters, for the moderation log.

Example request body
{
  "reason": "string"
}

Responses

204

Quarantined, or it already was.

400

invalid_body or invalid_reason.

Body: Error

401

unauthenticated: the bearer token is missing, invalid or expired.

Body: Error

WWW-Authenticate header.

403

missing_permission: the caller is a member but lacks the permission.

Body: Error

404

attachment_not_found: no such attachment, or the caller cannot see its channel.

Body: Error

429

rate_limited: too many attempts. Every operation a bot calls is also limited per bot (50 at once, then 50 per second), so any authenticated operation can answer this to a bot. Changes to a community's structure (creating or changing the community, channels, roles, member roles, overwrites, invites, kicks, bans, timeouts, report updates and actions, and bots) are also limited per caller (30 at once, then 1 per second) and per community (60 at once, then 1 per second), and creating communities per caller (10 at once, then 1 every 5 minutes).

Body: Error

Retry-After header.

500

internal: an unexpected server error. Details are only in server logs.

Body: Error