API reference
Commands and interactions
Slash commands and interactions. Bots register commands; members with Use Commands invoke them; the bot answers within 3 seconds and can follow up for 15 minutes.
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.
Try it
Send real requests to https://api.palloo.app/v1 from this page. Open Try it under an operation, fill in its fields and send it.
A bot token is a password.
Anyone who has it can act as your bot. Use a test bot in a test server, never a production bot. The token stays in this tab's memory only: it is not saved, and it goes to the API and nowhere else. Reloading or leaving the page forgets it.
Starts with palloo_bot_. People's tokens are refused here.
On this page
List channel commands
/channels/{id}/commands
Bot token: Call it with a bot token (people can call it too).
The slash commands usable in a text channel. Requires View Channel and Use Commands.
Global commands and this community's commands of every bot in the community that can view the channel, ordered by name. Fetch it when the user starts typing /; there is no gateway event for command changes.
Required permissions
Requires View Channel and Use Commands.
Try it: GET /channels/{id}/commands
Sends the bot token from the top of this page.
Request
GET https://api.palloo.app/v1/channels/{id}/commands
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Channel ID. |
Responses
- 200
-
The commands.
Body: CommandList
Example response (200) { "commands": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": {}, "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "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-Authenticateheader. - 403
-
missing_permission: the caller is a member but lacks the permission.Body: Error
- 404
-
channel_not_found: no such channel, or the caller is not a member of its community or cannot view the channel.Body: Error
- 409
-
channel_not_text: messages only exist in text channels.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Answer interaction
/interactions/{id}/{token}/callback
Bots only: Only a bot token is accepted; people get 403 bot_required.
Answer an interaction, once, within 3 seconds. Bots only, and only the interaction's bot.
{"type": "message", "content", "ephemeral"} answers with a message; {"type": "deferred", "ephemeral"} shows the caller that the bot is thinking, and the bot then has
15 minutes to complete it (PATCH .../response). An ephemeral answer only reaches the
caller's connections and is never stored. Answers are messages by the bot: they need it to
still view the channel, a message that is not ephemeral also needs Send Messages there,
and @everyone and @here never ping.
Try it: POST /interactions/{id}/{token}/callback
Sends the bot token from the top of this page.
Prefilled from the example above. Replace the placeholder values; unknown fields are refused.
Request
POST https://api.palloo.app/v1/interactions/{id}/{token}/callback
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Interaction ID. |
| token Required | path | string |
The interaction's token from |
Request body
application/json:
InteractionCallbackRequest
(required)
| Field | Type | Description |
|---|---|---|
| typeRequired | string | One of |
| content | string | Required with |
| ephemeral | boolean | default false |
{
"type": "message",
"content": "string",
"ephemeral": false
}
Responses
- 204
-
Answered.
- 400
-
invalid_body,invalid_interaction_responseorinvalid_content.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.missing_permission: a message that is not ephemeral needs the bot to have Send Messages in the channel.Body: Error
- 404
-
interaction_not_found: no such interaction for the calling bot, or the token is wrong; orchannel_not_found: the bot can no longer view the channel.Body: Error
- 409
-
interaction_already_acknowledged: it was answered before, orinteraction_expired: the 3 seconds passed.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Complete interaction
/interactions/{id}/{token}/response
Bots only: Only a bot token is accepted; people get 403 bot_required.
Complete a deferred interaction with its message, within 15 minutes. Bots only.
The message is ephemeral when the deferral was.
Try it: PATCH /interactions/{id}/{token}/response
Sends the bot token from the top of this page.
Prefilled from the example above. Replace the placeholder values; unknown fields are refused.
Request
PATCH https://api.palloo.app/v1/interactions/{id}/{token}/response
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Interaction ID. |
| token Required | path | string |
The interaction's token from |
Request body
application/json:
UpdateMessageRequest
(required)
| Field | Type | Description |
|---|---|---|
| content | string | Same rules as when sending. |
| attachments | array of object | The attachments to keep, by ID; the others are removed. Attachments cannot be added. |
| attachments[].idRequired | ID |
{
"content": "string",
"attachments": [
{
"id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A"
}
]
}
Responses
- 200
-
The message.
Body: Message
Example response (200) { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "author": { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "username": "string", "display_name": "string", "kind": "user", "avatar": "string", "avatar_dark": "string" }, "webhook_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "content": "string", "attachments": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "filename": "string", "description": "string", "content_type": "string", "size": 1, "url": "string", "thumbnail_url": "string", "width": 0, "height": 0, "placeholder": "string", "spoiler": false, "risk": "none", "sensitive": "none", "quarantined": false } ], "sticker_items": [ { "id": "string", "name": "string", "format": "string", "animated": false, "community_id": "string", "pack_id": "string", "hash": "string", "available": false } ], "gif_url": "string", "created_at": "2026-10-15T09:00:00Z", "edited_at": "2026-10-15T09:00:00Z", "mentions": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "username": "string", "display_name": "string", "kind": "user", "avatar": "string", "avatar_dark": "string" } ], "mention_roles": [ "01J9ZQ3V5K8M2N4P6R8T0W2Y4A" ], "mention_everyone": false, "mention_here": false, "interaction": { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "user": { "id": {}, "username": "string", "display_name": "string", "kind": {}, "avatar": {}, "avatar_dark": {} } }, "ephemeral": false, "nonce": "string", "kind": "default", "pinned": false, "reactions": [ { "emoji": { "id": "string", "name": "string" }, "count": 1, "me": false } ], "message_reference": { "message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A" }, "thread": { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "kind": "text", "position": 0, "parent_id": "string", "topic": "string", "created_at": "2026-10-15T09:00:00Z", "overwrites": [ { "type": "role", "id": {}, "allow": {}, "deny": {} } ], "owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "message_count": 0, "member_count": 0, "thread_metadata": { "archived": false, "auto_archive_duration": 60, "archive_timestamp": "2026-10-15T09:00:00Z", "locked": false, "invitable": false, "create_timestamp": "2026-10-15T09:00:00Z" }, "user_limit": 0, "bitrate": 8000, "age_restricted": false }, "referenced_message": {}, "auto_moderation": { "rule_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "rule_name": "string", "trigger_type": "keyword", "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "message_id": "string", "blocked": false, "edit": false, "matched_keyword": "string", "matched_content": "string", "content": "string", "content_hidden": false, "content_removed": false, "attachments": [ "string" ], "timeout_seconds": 0, "timeout_until": "2026-10-15T09:00:00Z" } } - 400
-
invalid_bodyorinvalid_content.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.missing_permission: a message that is not ephemeral needs the bot to have Send Messages in the channel.Body: Error
- 404
-
interaction_not_found: no such interaction for the calling bot, or the token is wrong; orchannel_not_found: the bot can no longer view the channel.Body: Error
- 409
-
interaction_not_deferred: it was not deferred, or was already completed, orinteraction_expired.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Follow up interaction
/interactions/{id}/{token}/followups
Bots only: Only a bot token is accepted; people get 403 bot_required.
Send another message for an answered interaction, within 15 minutes. Bots only.
Try it: POST /interactions/{id}/{token}/followups
Sends the bot token from the top of this page.
Prefilled from the example above. Replace the placeholder values; unknown fields are refused.
Request
POST https://api.palloo.app/v1/interactions/{id}/{token}/followups
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Interaction ID. |
| token Required | path | string |
The interaction's token from |
Request body
application/json:
FollowupRequest
(required)
| Field | Type | Description |
|---|---|---|
| contentRequired | string | |
| ephemeral | boolean | default false |
{
"content": "string",
"ephemeral": false
}
Responses
- 201
-
The message.
Body: Message
Example response (201) { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "author": { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "username": "string", "display_name": "string", "kind": "user", "avatar": "string", "avatar_dark": "string" }, "webhook_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "content": "string", "attachments": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "filename": "string", "description": "string", "content_type": "string", "size": 1, "url": "string", "thumbnail_url": "string", "width": 0, "height": 0, "placeholder": "string", "spoiler": false, "risk": "none", "sensitive": "none", "quarantined": false } ], "sticker_items": [ { "id": "string", "name": "string", "format": "string", "animated": false, "community_id": "string", "pack_id": "string", "hash": "string", "available": false } ], "gif_url": "string", "created_at": "2026-10-15T09:00:00Z", "edited_at": "2026-10-15T09:00:00Z", "mentions": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "username": "string", "display_name": "string", "kind": "user", "avatar": "string", "avatar_dark": "string" } ], "mention_roles": [ "01J9ZQ3V5K8M2N4P6R8T0W2Y4A" ], "mention_everyone": false, "mention_here": false, "interaction": { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "user": { "id": {}, "username": "string", "display_name": "string", "kind": {}, "avatar": {}, "avatar_dark": {} } }, "ephemeral": false, "nonce": "string", "kind": "default", "pinned": false, "reactions": [ { "emoji": { "id": "string", "name": "string" }, "count": 1, "me": false } ], "message_reference": { "message_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A" }, "thread": { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "kind": "text", "position": 0, "parent_id": "string", "topic": "string", "created_at": "2026-10-15T09:00:00Z", "overwrites": [ { "type": "role", "id": {}, "allow": {}, "deny": {} } ], "owner_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "message_count": 0, "member_count": 0, "thread_metadata": { "archived": false, "auto_archive_duration": 60, "archive_timestamp": "2026-10-15T09:00:00Z", "locked": false, "invitable": false, "create_timestamp": "2026-10-15T09:00:00Z" }, "user_limit": 0, "bitrate": 8000, "age_restricted": false }, "referenced_message": {}, "auto_moderation": { "rule_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "rule_name": "string", "trigger_type": "keyword", "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "message_id": "string", "blocked": false, "edit": false, "matched_keyword": "string", "matched_content": "string", "content": "string", "content_hidden": false, "content_removed": false, "attachments": [ "string" ], "timeout_seconds": 0, "timeout_until": "2026-10-15T09:00:00Z" } } - 400
-
invalid_bodyorinvalid_content.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.missing_permission: a message that is not ephemeral needs the bot to have Send Messages in the channel.Body: Error
- 404
-
interaction_not_found: no such interaction for the calling bot, or the token is wrong; orchannel_not_found: the bot can no longer view the channel.Body: Error
- 409
-
interaction_not_acknowledged: answer it first, orinteraction_expired.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
List global commands
/bots/@me/commands
Bots only: Only a bot token is accepted; people get 403 bot_required.
The calling bot's global commands. Bots only.
Try it: GET /bots/@me/commands
Sends the bot token from the top of this page.
Request
GET https://api.palloo.app/v1/bots/@me/commands
curl command
Response
Responses
- 200
-
The commands, by name.
Body: CommandList
Example response (200) { "commands": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": {}, "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "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-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Register global command
/bots/@me/commands
Bots only: Only a bot token is accepted; people get 403 bot_required.
Register a global command, usable in every community the bot is in. Bots only.
A command with the same name is replaced (200); otherwise one is created (201). At most 100 global commands per bot.
Try it: POST /bots/@me/commands
Sends the bot token from the top of this page.
Prefilled from the example above. Replace the placeholder values; unknown fields are refused.
Request
POST https://api.palloo.app/v1/bots/@me/commands
curl command
Response
Request body
application/json:
RegisterCommandRequest
(required)
| Field | Type | Description |
|---|---|---|
| nameRequired | string | |
| descriptionRequired | string | |
| options | array of CommandOption |
{
"name": "string",
"description": "string",
"options": [
{
"name": "string",
"description": "string",
"type": "string",
"required": false,
"min_length": 1,
"max_length": 1,
"min_value": 0,
"max_value": 0
}
]
}
Responses
- 200
-
Replaced.
Body: Command
Example response (200) { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": "string", "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "created_at": "2026-10-15T09:00:00Z", "updated_at": "2026-10-15T09:00:00Z" } - 201
-
Created.
Body: Command
Example response (201) { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": "string", "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "created_at": "2026-10-15T09:00:00Z", "updated_at": "2026-10-15T09:00:00Z" } - 400
-
invalid_bodyorinvalid_command.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.Body: Error
- 409
-
command_limit_reached.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Delete command
/bots/@me/commands/{commandID}
Bots only: Only a bot token is accepted; people get 403 bot_required.
Delete one of the calling bot's commands, global or for a community. Bots only.
Try it: DELETE /bots/@me/commands/{commandID}
Sends the bot token from the top of this page.
Request
DELETE https://api.palloo.app/v1/bots/@me/commands/{commandID}
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| commandID Required | path | string |
Command ID. |
Responses
- 204
-
Deleted.
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.Body: Error
- 404
-
command_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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
List community commands
/bots/@me/communities/{id}/commands
Bots only: Only a bot token is accepted; people get 403 bot_required.
The calling bot's commands for one community it is in. Bots only.
Try it: GET /bots/@me/communities/{id}/commands
Sends the bot token from the top of this page.
Request
GET https://api.palloo.app/v1/bots/@me/communities/{id}/commands
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
Responses
- 200
-
The commands, by name.
Body: CommandList
Example response (200) { "commands": [ { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": {}, "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "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-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Register community command
/bots/@me/communities/{id}/commands
Bots only: Only a bot token is accepted; people get 403 bot_required.
Register a command for one community the bot is in. Bots only.
Replaces a command of the same name in that community (200) or creates one (201). At most 100 per bot in each community. The commands go when the bot leaves.
Try it: POST /bots/@me/communities/{id}/commands
Sends the bot token from the top of this page.
Prefilled from the example above. Replace the placeholder values; unknown fields are refused.
Request
POST https://api.palloo.app/v1/bots/@me/communities/{id}/commands
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
Request body
application/json:
RegisterCommandRequest
(required)
| Field | Type | Description |
|---|---|---|
| nameRequired | string | |
| descriptionRequired | string | |
| options | array of CommandOption |
{
"name": "string",
"description": "string",
"options": [
{
"name": "string",
"description": "string",
"type": "string",
"required": false,
"min_length": 1,
"max_length": 1,
"min_value": 0,
"max_value": 0
}
]
}
Responses
- 200
-
Replaced.
Body: Command
Example response (200) { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": "string", "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "created_at": "2026-10-15T09:00:00Z", "updated_at": "2026-10-15T09:00:00Z" } - 201
-
Created.
Body: Command
Example response (201) { "id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "bot_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "name": "string", "description": "string", "options": [ { "name": "string", "description": "string", "type": "string", "required": false, "min_length": 1, "max_length": 1, "min_value": 0, "max_value": 0 } ], "created_at": "2026-10-15T09:00:00Z", "updated_at": "2026-10-15T09:00:00Z" } - 400
-
invalid_bodyorinvalid_command.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
bot_required: only bot accounts can do this.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
-
command_limit_reached.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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error