// To check your permissions version (server side only)
const { app } = await client.getAppSettings();
console.log(app.permission_version);
Permissions v1 (legacy)
This page explains how to use Stream’s permissions version 1, if you are looking for version 2, go here:
// To check your permissions version (server side only)
$response = $client->getAppSettings();
var_dump($response['app']['permission_version']); // "v1" or "v2"
# To check your permissions version (server side only)
response = client.get_app_settings()
print(response["app"]["permission_version"]) # "v1" or "v2"
// To check your permissions version (server side only)
var app = App.get().request();
System.out.println(app.getApp().getPermissionVersion()); // "v1" or "v2"
# To check your permissions version (server side only)
response = client.get_app_settings
puts response['app']['permission_version'] # "v1" or "v2"
// To check your permissions version (server side only)
conf, _ := c.GetAppConfig(ctx)
fmt.Print(conf.App.PermissionVersion)
// To check your permissions version (server side only)
var result = await appClient.GetAppSettingsAsync();
Console.WriteLine(result.App.PermissionVersion); // enum of PermissionVersion.V1 or PermissionVersion.V2
// This is a server-side only feature, choose any of our server-side SDKs to use it
In this version, permissions are associated to channel types only. There are 5 channel types which come built-in automatically, which also have default permissions - commerce, livestream, gaming, messaging, and team. These permissions can be customized if needed, and additional channel types can be created with their own separate set of permissions too.
Permission Checking
Before we dive into more detail on how permission policies are structured, let’s explain how permission checking works in general.
Permissions checking only happens on client-side calls. Server-side allows everything so long as a valid API key and secret is provided.
Permission checking is performed taking into account these parameters:
- API Request : the action the user is performing (e.g. send a message, edit a message, etc.)
- User Role: the role of the user making the request
- Channel Type: the channel type
- Resource : the resource involved in the API call (e.g. a channel, a message, a user, etc.)
- Ownership : whether or not the resource is owned by the user (when applicable)
Every time a user performs an API request the following steps happen:
The policies for the channel type are loaded
The list of policies is iterated based on priority (highest first)
If the policy matches the current request, then the request is either accepted or discarded
If there is not match, continue iterating until one policy matches
Here’s what a list of permissions look like:
Admin users can perform any action
Anonymous users are not allowed
Users can modify their own messages
Users can create channels
Members of a channel can read and send messages
Anything not matching the previous list should not be allowed
Let’s now see how this would play out and introduce a couple of users: Tommaso and Thierry. Tommaso is an admin and Thierry a user. Thierry is also a member of the “Sailing” channel.
Thierry posts a message on channel “soccer”
Tommaso edits a message from Thierry
Thierry creates a channel called “founders”
An anonymous user opens the “Sailing” channel
Here’s what the outcome of these requests would be:
🙅♂️ Only the last policy matches and it denies this action
👌 Tommaso is an admin, 1st policy is a match
👌 Thierry is a user, 4th policy is a match
🙅♂️ Anonymous users are discarded
Permission Policy Structure
Now that we have a better idea about how the permission system works, let’s define more precisely the structure of a permission policy.
Name | API Name | Description | Example |
---|---|---|---|
Name | name | The name of the policy, this serves as a human readable placeholder to remember the policy is all about | ”Channel Member Permissions” |
Resources | resources | The list of resources this policy applies. This field cannot be empty but you can set it to [”*”] if you want to match any resource. | [“ReadChannel”, “CreateMessage”] |
Roles | roles | The list of roles this policy applies. Same as the resources field, this must not be empty and can be set to [”*”] to match any user role. | [“channel_member”] |
Owner | owner | This is an optional field that you can use to match actions performed on objects that the user owns. Ownership only applies to some resources like messages and channels. When set to true the policy will only match if the user is owner of the resource part for the request (when applicable). | true |
Action | action | The action to perform if the policy matches on resource, role and ownership. This field can either be set to either “Allow” or “Deny”. | 0 |
Priority | priority | The priority field defined the position of the policy in the list. Permission policies are evaluated in consistent order from the highest priority to the lowest. | 99 |
Example list
Let’s now write the example from before into a list of real policies.
Name | Resources | Roles | Owner | action | priority |
---|---|---|---|---|---|
Admin users can perform any action | [”*”] | [“admin”] | - | 1 (Allow) | 600 |
Anonymous users are not allowed | [”*”] | [“anonymous”] | - | 0 (Deny) | 500 |
Users can modify their own messages | [“UpdateMessage”] | [“user”] | true | 1 (Allow) | 400 |
Users can create channels | [“CreateChannel”] | [“user”] | - | 1 (Allow) | 300 |
Members of a channel can read and send messages | [“ReadChannel”, “CreateMessage”] | [“channel_member”] | - | 1 (Allow) | 200 |
Anything not matching the previous list should not be allowed | [”*”] | [”*”] | - | 0 (Deny) | 100 |
import { AnyResource, AnyRole, Allow, Deny } from "stream-chat";
const permissions = [
new Permission(
"Admin users can perform any action",
600,
AnyResource,
["admin"],
false,
Allow,
),
new Permission(
"Anonymous users are not allowed",
500,
AnyResource,
["anonymous"],
false,
Deny,
),
new Permission(
"Users can modify their own messages",
400,
["UpdateMessage"],
["user"],
true,
Allow,
),
new Permission(
"Users can create channels",
300,
["CreateChannel"],
["user"],
false,
Allow,
),
new Permission(
"Channel Members",
200,
["ReadChannel", "CreateMessage"],
["channel_member"],
false,
Allow,
),
new Permission("Discard all", 100, AnyResource, AnyRole, false, Deny),
];
await client.updateChannelType("messaging", { permissions });
[
{
"action": "Allow",
"name": "Admin users can perform any action",
"resources": ["*"],
"roles": ["*"],
"owner": false,
"priority": 600
},
{
"action": "Deny",
"name": "Anonymous users are not allowed",
"resources": ["*"],
"roles": ["anonymous"],
"owner": false,
"priority": 500
},
{
"action": "Allow",
"name": "Users can modify their own messages",
"resources": ["*"],
"roles": ["user"],
"owner": true,
"priority": 400
},
{
"action": "Allow",
"name": "Users can create channels",
"resources": ["*"],
"roles": ["user"],
"owner": false,
"priority": 300
},
{
"action": "Allow",
"name": "Channel Members",
"resources": ["ReadChannel", "CreateMessage"],
"roles": ["channel_member"],
"owner": false,
"priority": 200
},
{
"action": "Deny",
"name": "Discard all",
"resources": ["*"],
"roles": ["*"],
"owner": false,
"priority": 100
}
]
resp, err = client.UpdateChannelType(ctx,
"messaging",
map[string]interface{}{
"permissions": []map[string]interface{}{
{
"name": "Admin users can perform any action",
"priority": 999,
"resources": []string{"*"},
"roles": []string{"admin"},
"action": "Allow",
},
{
"name": "Channel Members",
"priority": 200,
"resources": []string{"ReadChannel", "CreateMessage"},
"roles": []string{"channel_member"},
"action": "Allow",
},
},
},
)
await channelTypeClient.UpdateChannelTypeAsync("messaging", new ChannelTypeWithStringCommandsRequest
{
Permissions = new List<ChannelTypePermission>
{
new ChannelTypePermission
{
Name = "Admin users can perform any action",
Priority = 999,
Resources = new List<string> { "*" },
Roles = new List<string>{"admin"},
Action = "Allow"
},
new ChannelTypePermission
{
Name = "Channel Members",
Priority = 200,
Resources = new List<string> { "ReadChannel", "CreateMessage" },
Roles = new List<string>{"channel_member"},
Action = "Allow"
}
},
});
client.update_channel_type("messaging", permissions=[
{
"action":"Allow",
"name": "Admin users can perform any action",
"resources":["*"],
"roles": ["*"],
"priority": 999,
},
{
"action":"Allow",
"name": "Channel Members",
"resources":["ReadChannel", "CreateMessage"],
"roles": ["channel_member"],
"priority": 200,
}
])
client.updateChannelType("messaging", [
[
"action" => "Allow",
"name" => "Admin users can perform any action",
"resources" => ["*"],
"roles" => ["*"],
"priority" => 999
],
[
"action" => "Allow",
"name" => "Channel Members",
"resources" => ["ReadChannel", "CreateMessage"],
"roles" => ["channel_member"],
"priority" => 200
]
])
client.update_channel_type('messaging', permissions: [
{
action: 'Allow',
name: 'Admin users can perform any action',
resources: ['*'],
roles: ['*'],
priority: 999
},
{
action: 'Allow',
name: 'Channel Members',
resources: %w[ReadChannel CreateMessage],
roles: ['channel_member'],
priority: 200
}
])
List<PermissionRequestObject> permissions =
ChannelType.get("messaging").request().getPermissions().stream()
.map(policy -> PermissionRequestObject.buildFrom(policy))
.collect(Collectors.toList());
permissions.add(
PermissionRequestObject.builder()
.name("Admin users can perform any action")
.priority(999)
.resources(Arrays.asList(Resource.ALL))
.roles(Arrays.asList("*"))
.action(Action.ALLOW)
.build());
permissions.add(
PermissionRequestObject.builder()
.name("Channel Members")
.priority(200)
.resources(Arrays.asList("ReadChannel", "CreateMessage"))
.roles(Arrays.asList("channel_member"))
.action(Action.ALLOW)
.build());
ChannelType.update("messaging").permissions(permissions).request();
// This is a server-side only feature, choose any of our server-side SDKs to use it
User Roles
User Roles are how permissions are grouped together and assigned to a user. Each user role can have separate permissions for different channel types. For example, a moderator for a livestream channel could have different permissions from a moderator for a messaging channel.
Stream maintains a user role for each user_id
at an Application level and a Channel level. This is to allow flexibility and to cover a wider range of use cases.
Application User Roles
This is the role assigned to users which applies across the entire application, and gives permissions for things which are outside of a channel’s context, for example, being able to create channels, or search for users.
Role | Description | Permissions |
---|---|---|
Anonymous | Does not require a JWT and does not require a user_id registered with Stream | Lowest |
Guest | Does not require a JWT but does require a user_id registered with Stream. Guests can read channels but not post messages | Low |
User | A registered user on the app with a JWT provided by a trusted source (server) | Normal |
Moderator | A registered user with elevated permissions | High |
Admin | A registered user with elevated permissions granted from a trusted source (server) | High |
Server-side | Not technically a user role. This is the client instantiated with the app key and secret. This is the highest level of administration and is run on the server | Highest |
Channel User Roles
This is the role assigned to a user once they are added to a channel. This role is unique to that channel and a user could have a different role in each channel which they are a member
Roles | Description | Permissions |
---|---|---|
channel_member | A typical member of a channel and the default user role for an Application User | Normal |
channel_moderator | Elevated permissions on a channel. Granted to channel members through this method | High |
Owner is not an official role, but whoever is the creator of a channel, or a message, gets additional permissions for objects they created versus objects created by someone else, this is managed on the permissions level.
Change a User Role
const update = await serverClient.updateUser({
id: "tommaso",
name: "Tommy Doe",
role: "admin",
});
client.update_user({
"id" => "tommaso",
"name" => "Tommy Doe",
"role" => "admin",
});
client.update_user({
"id": "tommaso",
"name": "Tommy Doe",
"role": "admin",
});
$response = $client->updateUser([
'id' => 'tommaso',
'name' => 'Tommy Doe',
'role' => 'admin'
]);
User
.upsert()
.user(
UserRequestObject.builder().id("tommaso").name("Tommy Doe").role("admin").build())
.request();
user := User{
ID: "tommaso",
Role: "admin",
ExtraData: map[string]interface{}{
"name": "Tommy Doe",
}
};
client.UpdateUser(&user);
var user = new UserRequest
{
Id = "tommaso",
Name = "Tommy Doe",
Role = Role.Admin,
};
await userClient.UpsertAsync(user);
// This is a server-side only feature, choose any of our server-side SDKs to use it
Add Moderators to a Channel
const channel = serverClient.channel("livestream", "fortnite");
await channel.addModerators(["thierry", "tommaso"]));
channel = client.channel("livestream", "fortnite");
channel.add_moderators(["thierry", "tommaso"]);
channel = client.channel("livestream", "fortnite");
channel.add_moderators(["thierry", "tommaso"]);
$channel = $client->Channel("livestream", "fortnite");
$channel->create('thierry');
$response = $channel->addModerators(['thierry', 'jenny']);
Channel.update(
"livestream",
"fortnite")
.addModerators(Arrays.asList("thierry", "tommaso"))
.request());
channel = client.Channel("livestream", "fortnite");
channel.AddModerators("thierry", "tommaso");
await channelClient.AddModeratorsAsync("livestream", "fortnite", new[] { "thierry", "tommaso" });
// This is a server-side only feature, choose any of our server-side SDKs to use it
Remove Moderators From a Channel
await channel.demoteModerators(["thierry"]));
channel.demote_moderators(["thierry"]);
channel.demote_moderators(["thierry"]);
$channel->demoteModerators(['thierry']);
Channel.update(
"livestream",
"fortnite")
.demoteModerator("thierry")
.request());
channel.DemoteModerators("thierry");
await channelClient.DemoteModeratorsAsync("livestream", "fortnite", new[] { "thierry" });
// This is a server-side only feature, choose any of our server-side SDKs to use it
Custom Roles
You can also create custom roles if the built-in roles are not enough to cover all your use cases. This requires an upgrade to Permissions version. Please contact support for help with this upgrade.
Permission Resources
Permissions policies can match one or more resources. Here is the complete list of permissions available. Please keep in mind that this only applies to API calls done by clients, API requests performed from your backend do not need to pass a permission check.
Resource | Description |
---|---|
AddLinks | Allows add URLs into messages |
AddOwnChannelMembership | Allows add own channel membership (join channel) |
BanUser | Allows ban users |
BlockUser | Allows Block and unblock users on calls |
CreateCall | Allows creates a call |
CreateCallReaction | Allows Add a reaction to a call |
CreateChannel | Allows create a new channel |
CreateDistinctChannelForOthers | Allows create new distinct channel for other users (e.g. user A creates channel for users B and C) |
CreateMessage | Allows send a new message |
CreateReaction | Allows add a reaction to a message |
CreateSystemMessage | Allows send a new system message |
DeleteAttachment | Allows delete uploaded files and images |
DeleteChannel | Allows delete a channel |
DeleteMessage | Allows delete a message |
DeleteReaction | Allows delete a reaction |
DeleteRecording | Allows Delete recording |
EndCall | Allows terminates a call |
JoinBackstage | Allows joins a call backstage |
JoinCall | Allows joins a call |
JoinEndedCall | Allows joins a call that was marked as ended |
ListRecordings | Allows List recordings |
MuteUsers | Allows MuteUsers |
PinCallTrack | Allows Pin/Unpin a track for everyone in the call |
PinMessage | Allows pin a message |
ReadCall | Allows read a call |
ReadChannel | Allows read messages from the channel |
ReadChannelMembers | Allows read channel members |
ReadFlagReports | Allows read flag reports |
ReadMessageFlags | Allows access messages that have been flagged |
RecreateChannel | Allows recreate a channel when it got deleted |
RemoveCallMember | Allows Remove a participant |
RemoveOwnChannelMembership | Allows leave the channel (remove own channel membership) |
RunMessageAction | Allows run an action against a message |
Screenshare | Allows Screenshare |
SendAudio | Allows Send audio |
SendCustomEvent | Allows send custom events to a channel |
SendEvent | Allows SendEvent |
SendVideo | Allows Send video |
SkipChannelCooldown | Allows bypass existing cooldown in a channel |
SkipMessageModeration | Allows bypass automatic message moderation |
StartBroadcasting | Allows Start broadcasting |
StartRecording | Allows Start recording |
StartTranscription | Allows Start transcription |
StopBroadcasting | Allows Stop broadcasting |
StopRecording | Allows Stop recording |
StopTranscription | Allows Stop transcription |
TruncateChannel | Allows truncate a channel |
UnblockMessage | Allows unblock message blocked by automatic moderation |
UpdateCall | Allows update the data for a call |
UpdateCallMember | Allows Update a participant |
UpdateCallMemberRole | Allows Update role for participants |
UpdateCallPermissions | Allows UpdateCallPermissions |
UpdateCallSettings | Allows updates settings of a call |
UpdateChannel | Allows update channel data |
UpdateChannelCooldown | Allows set and unset cooldown time for a channel (slow mode) |
UpdateChannelFrozen | Allows freeze and unfreeze a channel |
UpdateChannelMembers | Allows add, modify and remove channel members |
UpdateFlagReport | Allows update flag report |
UpdateMessage | Allows update a message |
UploadAttachment | Allows upload files and images |
UseFrozenChannel | Allows send messages and reactions to a frozen channels |
Default Permissions
The five built-in channel types ship with default permission setting.
messaging
Resource | admin | moderator | user | channel_member | channel_moderator | owner |
---|---|---|---|---|---|---|
AddLinks | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
AddOwnChannelMembership | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
BanUser | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
BlockUser | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateCall | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
CreateCallReaction | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateChannel | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateDistinctChannelForOthers | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateMessage | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
CreateReaction | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
CreateSystemMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
DeleteAttachment | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
DeleteChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✅ |
DeleteMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
DeleteReaction | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
DeleteRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
EndCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinBackstage | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinCall | ✅ | ✅ | ✖️ | ✅ | ✅ | ✅ |
JoinEndedCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ListRecordings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
MuteUsers | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinCallTrack | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinMessage | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
ReadCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadChannel | ✅ | ✅ | ✖️ | ✅ | ✅ | ✅ |
ReadChannelMembers | ✅ | ✅ | ✖️ | ✅ | ✅ | ✅ |
ReadFlagReports | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadMessageFlags | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
RecreateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✅ |
RemoveCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveOwnChannelMembership | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
RunMessageAction | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
Screenshare | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendAudio | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendCustomEvent | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
SendEvent | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendVideo | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SkipChannelCooldown | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
SkipMessageModeration | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
StartBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
TruncateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✅ |
UnblockMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
UpdateCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMemberRole | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallPermissions | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallSettings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannel | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
UpdateChannelCooldown | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
UpdateChannelFrozen | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
UpdateChannelMembers | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
UpdateFlagReport | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
UploadAttachment | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
UseFrozenChannel | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
livestream
Resource | admin | moderator | user | channel_member | channel_moderator | guest | anonymous | owner |
---|---|---|---|---|---|---|---|---|
AddLinks | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✅ |
AddOwnChannelMembership | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
BanUser | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
BlockUser | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateCall | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
CreateCallReaction | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateChannel | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✖️ |
CreateDistinctChannelForOthers | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✖️ |
CreateMessage | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✅ |
CreateReaction | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✅ |
CreateSystemMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
DeleteAttachment | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✅ |
DeleteChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
DeleteMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✅ |
DeleteReaction | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✅ |
DeleteRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
EndCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinBackstage | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinCall | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
JoinEndedCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ListRecordings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
MuteUsers | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinCallTrack | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✅ |
ReadCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadChannel | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ReadChannelMembers | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ReadFlagReports | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadMessageFlags | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
RecreateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveOwnChannelMembership | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RunMessageAction | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✅ |
Screenshare | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendAudio | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendCustomEvent | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✅ |
SendEvent | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendVideo | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SkipChannelCooldown | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
SkipMessageModeration | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
StartBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
TruncateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UnblockMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
UpdateCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMemberRole | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallPermissions | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallSettings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannelCooldown | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
UpdateChannelFrozen | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✖️ |
UpdateChannelMembers | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateFlagReport | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ | ✖️ | ✅ |
UploadAttachment | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ | ✅ |
UseFrozenChannel | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
team
Resource | admin | moderator | user | channel_member | channel_moderator | owner |
---|---|---|---|---|---|---|
AddLinks | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
AddOwnChannelMembership | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
BanUser | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
BlockUser | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateCall | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
CreateCallReaction | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateChannel | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateDistinctChannelForOthers | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateMessage | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
CreateReaction | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
CreateSystemMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
DeleteAttachment | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
DeleteChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✅ |
DeleteMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
DeleteReaction | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
DeleteRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
EndCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinBackstage | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinCall | ✅ | ✅ | ✖️ | ✅ | ✅ | ✅ |
JoinEndedCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ListRecordings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
MuteUsers | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinCallTrack | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinMessage | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
ReadCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadChannel | ✅ | ✅ | ✖️ | ✅ | ✅ | ✅ |
ReadChannelMembers | ✅ | ✅ | ✖️ | ✅ | ✅ | ✅ |
ReadFlagReports | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadMessageFlags | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
RecreateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✅ |
RemoveCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveOwnChannelMembership | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
RunMessageAction | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
Screenshare | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendAudio | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendCustomEvent | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
SendEvent | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendVideo | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SkipChannelCooldown | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
SkipMessageModeration | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
StartBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
TruncateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✅ |
UnblockMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
UpdateCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMemberRole | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallPermissions | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallSettings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannel | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
UpdateChannelCooldown | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
UpdateChannelFrozen | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✖️ |
UpdateChannelMembers | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
UpdateFlagReport | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateMessage | ✅ | ✅ | ✖️ | ✖️ | ✅ | ✅ |
UploadAttachment | ✅ | ✅ | ✖️ | ✅ | ✅ | ✖️ |
UseFrozenChannel | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
commerce
Resource | admin | moderator | channel_member | channel_moderator | guest | owner |
---|---|---|---|---|---|---|
AddLinks | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
AddOwnChannelMembership | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
BanUser | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
BlockUser | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateCall | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
CreateCallReaction | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateChannel | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateDistinctChannelForOthers | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateMessage | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ |
CreateReaction | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ |
CreateSystemMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
DeleteAttachment | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✅ |
DeleteChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
DeleteMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✅ |
DeleteReaction | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✅ |
DeleteRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
EndCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinBackstage | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinCall | ✅ | ✅ | ✅ | ✅ | ✖️ | ✅ |
JoinEndedCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ListRecordings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
MuteUsers | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinCallTrack | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✅ |
ReadCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadChannel | ✅ | ✅ | ✅ | ✅ | ✖️ | ✅ |
ReadChannelMembers | ✅ | ✅ | ✅ | ✅ | ✖️ | ✅ |
ReadFlagReports | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadMessageFlags | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
RecreateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveOwnChannelMembership | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ |
RunMessageAction | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ |
Screenshare | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendAudio | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendCustomEvent | ✅ | ✅ | ✅ | ✅ | ✖️ | ✖️ |
SendEvent | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendVideo | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SkipChannelCooldown | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
SkipMessageModeration | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
StartBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
TruncateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UnblockMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
UpdateCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMemberRole | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallPermissions | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallSettings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannel | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
UpdateChannelCooldown | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
UpdateChannelFrozen | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✖️ |
UpdateChannelMembers | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✅ |
UpdateFlagReport | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ | ✅ |
UploadAttachment | ✅ | ✅ | ✅ | ✅ | ✅ | ✖️ |
UseFrozenChannel | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
gaming
Resource | admin | moderator | channel_member | channel_moderator | owner |
---|---|---|---|---|---|
AddLinks | ✅ | ✅ | ✅ | ✅ | ✖️ |
AddOwnChannelMembership | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
BanUser | ✅ | ✅ | ✖️ | ✅ | ✖️ |
BlockUser | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateCall | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateCallReaction | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateDistinctChannelForOthers | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
CreateMessage | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateReaction | ✅ | ✅ | ✅ | ✅ | ✖️ |
CreateSystemMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ |
DeleteAttachment | ✅ | ✅ | ✖️ | ✅ | ✅ |
DeleteChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
DeleteMessage | ✅ | ✅ | ✖️ | ✅ | ✅ |
DeleteReaction | ✅ | ✅ | ✖️ | ✅ | ✅ |
DeleteRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
EndCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinBackstage | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
JoinCall | ✅ | ✅ | ✅ | ✅ | ✅ |
JoinEndedCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ListRecordings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
MuteUsers | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinCallTrack | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
PinMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ |
ReadCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadChannel | ✅ | ✅ | ✅ | ✅ | ✖️ |
ReadChannelMembers | ✅ | ✅ | ✅ | ✅ | ✖️ |
ReadFlagReports | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
ReadMessageFlags | ✅ | ✅ | ✖️ | ✅ | ✖️ |
RecreateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
RemoveOwnChannelMembership | ✅ | ✅ | ✅ | ✅ | ✖️ |
RunMessageAction | ✅ | ✅ | ✅ | ✅ | ✖️ |
Screenshare | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendAudio | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendCustomEvent | ✅ | ✅ | ✅ | ✅ | ✖️ |
SendEvent | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SendVideo | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
SkipChannelCooldown | ✅ | ✅ | ✖️ | ✅ | ✖️ |
SkipMessageModeration | ✅ | ✅ | ✖️ | ✅ | ✖️ |
StartBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StartTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopBroadcasting | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopRecording | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
StopTranscription | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
TruncateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
UnblockMessage | ✅ | ✅ | ✖️ | ✅ | ✖️ |
UpdateCall | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMember | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallMemberRole | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallPermissions | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateCallSettings | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannel | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateChannelCooldown | ✅ | ✅ | ✖️ | ✅ | ✖️ |
UpdateChannelFrozen | ✅ | ✅ | ✖️ | ✅ | ✖️ |
UpdateChannelMembers | ✅ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateFlagReport | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |
UpdateMessage | ✅ | ✅ | ✖️ | ✅ | ✅ |
UploadAttachment | ✅ | ✅ | ✅ | ✅ | ✖️ |
UseFrozenChannel | ✖️ | ✖️ | ✖️ | ✖️ | ✖️ |