Bot API reference
Last updated 17 October 2026
Base URL https://www.yapper.website/api/bot/v1 · send Authorization: Bot <token> on every call · JSON in, JSON out.
Machine-readable: openapi.json (OpenAPI 3.1, works with Postman, Insomnia and code generators). Guide and SDK: /developers.
Errors look like { "error": "…" }: 400 bad input, 401 wrong or missing token, 403 not allowed (the bot is not in that server, or its roles lack the permission), 404 not found or not visible, 429 slow down (30 messages a minute per bot).
Bot
GET
/meThe bot itself
PATCH
/meChange display name or bio
display_name | string (≤ 32) |
bio | string (≤ 190) |
PUT
/me/avatarSet the profile picture (image body or multipart "file", PNG/JPG/GIF/WebP, 8 MB)
Body: The image itself (PNG, JPG, GIF or WebP, up to 8 MB), or multipart/form-data with it in "file"
DELETE
/me/avatarRemove the profile picture
PUT
/me/bannerSet the banner (10 MB)
Body: The image itself (PNG, JPG, GIF or WebP, up to 10 MB), or multipart/form-data with it in "file"
DELETE
/me/bannerRemove the banner
PUT
/me/statusStatus and activity
status | "online" | "idle" | "dnd" |
activity | string (≤ 60) |
GET
/commandsThe bot's slash commands
PUT
/commandsReplace the slash commands (up to 50)
commands | Command[] |
Events
GET
/eventsLong-poll for events (keeps the bot online)
?after Last event id you saw. 0 returns no events and the newest id as last (start from now)?wait Seconds to wait for somethingServers
GET
/serversServers the bot is in
GET
/servers/{id}One server
:idGET
/servers/{id}/rolesRoles
:idGET
/servers/{id}/membersMembers, sorted by user id: 200 a page by default, up to 500 with limit
:id?limit?after Last user id of the previous pageGET
/servers/{id}/members/{uid}One member with roles
:id:uidChannels
GET
/servers/{id}/channelsChannels the bot can see, in sidebar order (private ones only if it was let in)
:id?typePOST
/servers/{id}/channelsCreate a channel (Manage channels)
:idname * | string |
kind | "text" | "voice" |
category_id | string |
GET
/channelsEvery channel the bot can see, in all its servers
?typePOST
/servers/{id}/categoriesCreate a category
:idname * | string |
PATCH
/servers/{id}/categories/{cid}Rename a category
:id:cidname | string |
DELETE
/servers/{id}/categories/{cid}Delete a category
:id:cidGET
/channels/{id}One channel
:idPATCH
/channels/{id}Edit a channel (Manage channels)
:idname | string |
category_id | string | null |
private | boolean |
role_ids | string[] |
read_only | boolean |
post_role_ids | string[] |
slowmode | integer (≤ 21600) |
DELETE
/channels/{id}Delete a channel
:idModeration
PATCH
/servers/{id}/members/{uid}Set a nickname (Manage nicknames)
:id:uidnickname | string | null |
PUT
/servers/{id}/members/{uid}/roles/{rid}Give a role (Manage roles)
:id:uid:ridDELETE
/servers/{id}/members/{uid}/roles/{rid}Take a role away
:id:uid:ridPOST
/servers/{id}/kickKick someone (Kick members)
:iduser_id * | string |
GET
/servers/{id}/bansBans
:idPOST
/servers/{id}/bansBan someone (Ban members)
:iduser_id * | string |
reason | string |
DELETE
/servers/{id}/bans/{uid}Unban
:id:uidPOST
/servers/{id}/timeoutsTime someone out (Timeout members); minutes 0 clears
:iduser_id * | string |
minutes * | integer (≤ 40320) |
reason | string |
Voice
GET
/servers/{id}/voiceWho is in voice, for every voice channel the bot can see (in testing: flag bot_voice; 60 a minute)
:idPOST
/servers/{id}/voice/moveMove someone who is in voice to another voice channel (Move Members, 30 a minute)
:iduser_id * | string |
channel_id * | string |
POST
/servers/{id}/voice/disconnectDrop someone from voice (Move Members, 30 a minute)
:iduser_id * | string |
Messages
GET
/channels/{id}/messagesMessages, oldest first (50, up to 100)
:id?limit?before?afterPOST
/channels/{id}/messagesSend a message (30 a minute)
:idcontent | string (≤ 2000) |
reply_to | string |
embeds | Embed[] (≤ 5) |
components | ActionRow[] (≤ 5) |
POST
/channels/{id}/messages/bulk-deleteDelete up to 100 messages
:idids * | string[] (≤ 100) |
GET
/channels/{id}/messages/{mid}One message
:id:midPATCH
/channels/{id}/messages/{mid}Edit the bot's own message (embeds / components: null removes them)
:id:midcontent | string (≤ 2000) |
embeds | Embed[] |
components | ActionRow[] |
DELETE
/channels/{id}/messages/{mid}Delete a message (own, or others with Manage messages)
:id:midPUT
/channels/{id}/messages/{mid}/pinPin
:id:midDELETE
/channels/{id}/messages/{mid}/pinUnpin
:id:midGET
/channels/{id}/messages/{mid}/reactionsReactions on a message
:id:midPUT
/channels/{id}/messages/{mid}/reactions/{emoji}React
:id:mid:emoji URL-encoded unicode emojiDELETE
/channels/{id}/messages/{mid}/reactions/{emoji}Remove the bot's reaction
:id:mid:emoji URL-encoded unicode emojiPOST
/interactions/{id}/{token}/callbackAnswer a button click (within 15 minutes, up to 10 answers)
:id:token The token from the interaction eventtype * | "reply" | "ephemeral" | "update" | "ack" · reply: new message in the channel. ephemeral: only the clicker sees it. update: edit the clicked message. ack: just "got it" |
content | string | null (≤ 2000) |
embeds | Embed[] |
components | ActionRow[] · reply and update only |
Users
GET
/users/{id}A user's public profile
:idPOST
/users/{id}/dmOpen (or find) a DM; their DM setting applies
:id