API reference
Members
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 members
/communities/{id}/members
Bot token: Call it with a bot token (people can call it too).
A page of members, ordered by user ID. Members only.
Try it: GET /communities/{id}/members
Sends the bot token from the top of this page.
Request
GET https://api.palloo.app/v1/communities/{id}/members
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
| after | query | string |
Return members whose user ID sorts after this one. Use |
| limit | query | integer |
at least 1; at most 1000; default 100 |
Responses
- 200
-
One page of members.
Body: MemberPage
Example response (200) { "members": [ { "user": { "id": {}, "username": "string", "display_name": "string", "kind": {}, "avatar": {}, "avatar_dark": {} }, "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 } ], "next": "string" } - 400
-
invalid_query:limitis not an integer from 1 to 1000, or a boolean parameter is nottrueorfalse.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 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
Update own member
/communities/{id}/members/@me
Bot token: Call it with a bot token (people can call it too).
Change your server profile in this community: nickname, server avatar, server banner, server pronouns and server About Me. Requires Change Nickname (or Manage Nicknames).
Omitted fields keep their value; null or an empty string goes back to the global profile. Images take a finalized member_avatar or member_banner upload made for this community.
Required permissions
Requires Change Nickname (or Manage Nicknames).
Try it: PATCH /communities/{id}/members/@me
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/communities/{id}/members/@me
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
Request body
application/json:
UpdateMemberRequest
(required)
| Field | Type | Description |
|---|---|---|
| nickname | string or null | Trimmed, then at most 32 characters with no control or invisible formatting characters. Null or an empty string clears the nickname. |
| avatar | string or null | A finalized |
| avatar_dark | string or null | A finalized |
| banner | string or null | A finalized |
| bio | AboutMe or null | |
| pronouns | Pronouns or null |
{
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string"
}
Responses
- 200
-
The updated member. 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_nickname,name_reserved(a reserved nickname),invalid_bio,invalid_pronounsorinvalid_attachment(not a finished upload of the caller's for that purpose and community).Body: Error
- 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
-
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
Leave community
/communities/{id}/members/@me
Bot token: Call it with a bot token (people can call it too).
Leave a community.
Try it: DELETE /communities/{id}/members/@me
Sends the bot token from the top of this page.
Request
DELETE https://api.palloo.app/v1/communities/{id}/members/@me
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
Responses
- 204
-
Left.
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
terms_acceptance_required: the instance's terms of service changed (or were never accepted) and this account has not accepted the current version. Show the terms and callPOST /users/@me/terms, then retry.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
-
owner_cannot_leave: the owner must delete the community instead.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
Get own permissions
/communities/{id}/members/@me/permissions
Bot token: Call it with a bot token (people can call it too).
The caller's community-wide permissions and effective permissions in every channel they can view, so a client can show or hide controls.
Try it: GET /communities/{id}/members/@me/permissions
Sends the bot token from the top of this page.
Request
GET https://api.palloo.app/v1/communities/{id}/members/@me/permissions
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
Responses
- 200
-
The caller's permissions.
Body: PermissionSet
Example response (200) { "community_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "permissions": "2748678791", "channels": [ { "channel_id": "01J9ZQ3V5K8M2N4P6R8T0W2Y4A", "permissions": "2748678791" } ], "timeout_until": "2026-10-15T09:00:00Z" } - 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 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
Update member
/communities/{id}/members/{userID}
Bot token: Call it with a bot token (people can call it too).
Set or clear a member's nickname, or reset their server profile. For another member this requires Manage Nicknames and the member must be below the caller's highest role.
For another member, nickname can be set or cleared, while avatar, banner, bio and pronouns can only be cleared (null or an empty string). A nickname change is recorded as member.nickname; clearing any other field as member.profile_reset. For the caller's own ID this behaves like PATCH .../members/@me.
Try it: PATCH /communities/{id}/members/{userID}
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/communities/{id}/members/{userID}
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
| userID Required | path | string |
The member's user ID. |
Request body
application/json:
UpdateMemberRequest
(required)
| Field | Type | Description |
|---|---|---|
| nickname | string or null | Trimmed, then at most 32 characters with no control or invisible formatting characters. Null or an empty string clears the nickname. |
| avatar | string or null | A finalized |
| avatar_dark | string or null | A finalized |
| banner | string or null | A finalized |
| bio | AboutMe or null | |
| pronouns | Pronouns or null |
{
"nickname": "string",
"avatar": "string",
"avatar_dark": "string",
"banner": "string",
"bio": "string",
"pronouns": "string"
}
Responses
- 200
-
The updated member. 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_nickname,name_reserved(a reserved nickname),invalid_bio,invalid_pronouns,invalid_attachment, orcannot_set_member_profile(setting another member's avatar, banner, pronouns or About Me instead of clearing them).Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
missing_permission: the caller lacks the permission, or would grant one it lacks, orrole_hierarchy: the target role or member is not below the caller's highest role.Body: Error
- 404
-
community_not_found(no such community, or the caller is not a member) ormember_not_found(the target is not a member).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
Kick member
/communities/{id}/members/{userID}
Bot token: Call it with a bot token (people can call it too).
Remove a member from a community. Requires Kick Members, and the member must be below the caller's highest role.
Required permissions
Requires Kick Members, and the member must be below the caller's highest role.
Try it: DELETE /communities/{id}/members/{userID}
Sends the bot token from the top of this page.
Request
DELETE https://api.palloo.app/v1/communities/{id}/members/{userID}
curl command
Response
Parameters
| 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
-
Kicked.
- 400
-
invalid_reason: theX-Audit-Log-Reasonheader is not valid.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
missing_permission,role_hierarchy(the member's highest role is not below the caller's), orcannot_kick_owner: nobody can kick the owner.Body: Error
- 404
-
community_not_found(no such community, or the caller is not a member) ormember_not_found(the target is not a member).Body: Error
- 409
-
cannot_kick_self: useDELETE .../members/@meto leave instead.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 bans
/communities/{id}/bans
Bot token: Call it with a bot token (people can call it too).
A page of banned users, ordered by user ID. Requires Ban Members.
Required permissions
Requires Ban Members.
Try it: GET /communities/{id}/bans
Sends the bot token from the top of this page.
Request
GET https://api.palloo.app/v1/communities/{id}/bans
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
| after | query | string |
Return bans whose user ID sorts after this one. Use |
| limit | query | integer |
at least 1; at most 1000; default 100 |
Responses
- 200
-
One page of bans.
Body: BanPage
Example response (200) { "bans": [ { "user": { "id": {}, "username": "string", "display_name": "string", "kind": {}, "avatar": {}, "avatar_dark": {} }, "reason": "string", "banned_by": "string", "created_at": "2026-10-15T09:00:00Z" } ], "next": "string" } - 400
-
invalid_query:limitis not an integer from 1 to 1000.Body: Error
- 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
-
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
Ban user
/communities/{id}/bans/{userID}
Bot token: Call it with a bot token (people can call it too).
Ban a user from a community. Requires Ban Members, and the user must be below the caller's highest role (a user who is not a member ranks like a member with no roles). A member is removed at once, as with a kick, and their member overwrites go with the membership. A banned user cannot join with an invite until unbanned. Banning someone who is already banned replaces the reason.
Required permissions
Requires Ban Members, and the user must be below the caller's highest role (a user who is not a member ranks like a member with no roles).
Try it: PUT /communities/{id}/bans/{userID}
Sends the bot token from the top of this page.
Prefilled from the example above. Replace the placeholder values; unknown fields are refused.
Request
PUT https://api.palloo.app/v1/communities/{id}/bans/{userID}
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
| userID Required | path | string |
The user to ban or unban. They do not need to be a member. |
Request body
application/json:
BanRequest
| Field | Type | Description |
|---|---|---|
| reason | string or null | Shown to members with Ban Members. Trimmed; empty or null means none. No control or invisible formatting characters. at most 512 characters |
{
"reason": "string"
}
Responses
- 204
-
Banned. A removed member is sent as
member_remove. - 400
-
invalid_bodyorinvalid_reason.Body: Error
- 401
-
unauthenticated: the bearer token is missing, invalid or expired.Body: Error
WWW-Authenticateheader. - 403
-
missing_permission,role_hierarchy(the user's highest role is not below the caller's), orcannot_ban_owner: nobody can ban the owner.Body: Error
- 404
-
community_not_found(no such community, or the caller is not a member) oruser_not_found(no such user).Body: Error
- 409
-
cannot_ban_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-Afterheader. - 500
-
internal: an unexpected server error. Details are only in server logs.Body: Error
Unban user
/communities/{id}/bans/{userID}
Bot token: Call it with a bot token (people can call it too).
Lift a ban. Requires Ban Members. The user can then join again with an invite.
Required permissions
Requires Ban Members.
Try it: DELETE /communities/{id}/bans/{userID}
Sends the bot token from the top of this page.
Request
DELETE https://api.palloo.app/v1/communities/{id}/bans/{userID}
curl command
Response
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id Required | path | string |
Community ID. |
| userID Required | path | string |
The user to ban or unban. They do not need to be a member. |
| 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
-
Unbanned.
- 400
-
invalid_reason: theX-Audit-Log-Reasonheader is not valid.Body: Error
- 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
-
community_not_found(no such community, or the caller is not a member) orban_not_found(the user is not banned).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