Skip to content

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.

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
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)
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

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

Besides permissions, the host declares “features” for compatibility checks: all permissions above, menu.<surface> for every menu surface, and format.html.