Permission list
The manifest rejects any id that is not in this list.
Risk is the level the host assigns (PermissionDanger in permissions.cpp): High, Medium or Low. The install dialog colours the rows by it and lists the riskiest permissions first. Everything not marked High or Low is Medium. messages.read depends on its scope: High for all (and when scope is omitted), Medium for selected. See Permissions for what the levels and the warnings under the list mean.
Messages and chats
Section titled “Messages and chats”| Permission | Risk | What it gives |
|---|---|---|
messages.read |
High (all) / Medium (selected) |
receive message events; scope: selected / all |
messages.read_deleted |
High | see deleted messages |
messages.history |
Medium | request history, search, pinned and scheduled messages |
messages.send |
High | send messages, media, polls, stickers; forward |
messages.edit |
High | edit your own messages |
messages.delete |
High | delete your own messages |
messages.react |
Medium | reactions |
messages.ids |
Low | server ids of sent messages (the call waits for the server) |
messages.transform_outgoing |
High | change/block outgoing messages |
messages.transform_incoming |
High | change/hide incoming messages |
media.read |
Medium | get message files; with download: true the app downloads a file that is not on the device yet |
chats.list |
Medium | list of chats |
chat.info |
Medium | information about chats, channels, members |
chats.active |
Medium | the chat-opened event |
chats.activity |
Medium | typing / read / members / rename |
chats.manage |
Medium | mute, archive, pin chats and messages |
chats.moderate |
High | ban and unban (only right after a user action) |
users.info |
Medium | information about users: profile data plus status and last_seen |
users.presence |
Medium | the user.status event (online statuses as they change) |
stories.read |
Medium | the new-story event |
calls.activity |
Medium | call events |
bots.inline |
Medium | inline bots and buttons |
composer.draft |
Medium | the draft |
contacts.list |
Medium | contacts |
contacts.manage |
Medium | adding and blocking contacts |
account.info, stars.balance |
Medium | account information |
settings.read |
Low | app settings (language, theme, streamer mode) |
folders.list |
Medium | chat folders |
ghost.control |
High | ghost mode (turning it off only right after a user action) |
app.activity |
Medium | window focus |
Interface
Section titled “Interface”| Permission | Risk | What it gives |
|---|---|---|
ui.menu, ui.command, ui.settings_page, ui.composer_button, ui.dialog, ui.toast, ui.badges, notifications |
Low | menu items, /commands, a settings page, a composer button, dialogs, pop-up notices, badges, system notifications |
clipboard |
High | read and write the clipboard (only right after a user action) |
Network and data
Section titled “Network and data”| Permission | Risk | What it gives |
|---|---|---|
net.https |
Medium | HTTPS |
net.ws |
Medium | secure WebSocket |
net.tcp, net.udp |
High | raw sockets |
net.local |
High | local network; the ports field is required |
storage.private |
Low | private storage |
plugins.message |
Medium | messaging with other plugins |
fs.user_selected |
High | files chosen by the user (picking and saving only right after a user action) |
fs.folder |
High | the chosen folder; mode: read / write |
image.process |
Medium | image processing |
translate.provide |
Medium | the plugin as a translator |
ai.provide |
High | the plugin as an AI provider |
background |
High | background work |
What the install dialog calls them
Section titled “What the install dialog calls them”The dialog shows a user-facing title for each permission (from the app’s language strings), not the id. Three of them are worth knowing, because the wording does not map one-to-one to the operations:
| Permission | Title (English) | Notes |
|---|---|---|
messages.read |
“Read messages in all chats” (all), “Read messages in the chats you choose” (selected), “Read messages” otherwise |
|
users.info |
“See user profiles and online status” | The users.info answer does contain status and last_seen, so the title is accurate for that call. The event user.status is a separate permission, users.presence (“See when people are online”) |
media.read |
“Read downloaded media” | media.get with download: true fetches the file first if it has not been downloaded, so the plugin can trigger a download |
Host features
Section titled “Host features”Besides permissions, the host declares “features” for compatibility checks: all permissions above, menu.<surface> for every menu surface, and format.html.
