Skip to main content

Permissions catalogue

The complete Permission enum. Values are what appears in a JWT's permissions claim.

Read this at runtime, not from here

GET /permissions on the account API serves the same catalogue, including the dependency graph. Anything that needs the list should read it from there — that is what the management UI does — so it cannot fall out of step.

Global means the permission reaches beyond the organization holding it. The flag bears on who may hand it out, not on how it is checked: granting a global permission needs PermissionsAllGlobal.

Depends on is binding, not advisory. An endpoint asking for a permission asks for its dependencies too, and a group cannot be saved carrying a permission without them.

Permissions

CategoryNameValueHexGlobalDepends on
PermissionsPermissionsAllGlobal10x0001
PermissionsPermissionsAll20x0002
PermissionsPermissionsImpersonate30x0003
AuditAuditGlobalList2570x0101
AuditAuditGlobalRead2580x0102AuditGlobalList
AuditAuditList2590x0103
AuditAuditRead2600x0104AuditList
AuditAuditDelete2620x0106
OrganizationsOrganizationList5140x0202
OrganizationsOrganizationRead5150x0203
OrganizationsOrganizationCreate5160x0204
OrganizationsOrganizationUpdate5170x0205
OrganizationsOrganizationDelete5180x0206
UsersUserList7690x0301
UsersUserRead7700x0302
UsersUserCreate7710x0303
UsersUserUpdate7720x0304
UsersUserDelete7730x0305
GroupsGroupList10250x0401
GroupsGroupRead10260x0402
GroupsGroupCreate10270x0403
GroupsGroupUpdate10280x0404
GroupsGroupDelete10290x0405
Tag GroupsTagGroupList12810x0501
Tag GroupsTagGroupRead12820x0502
Tag GroupsTagGroupCreate12830x0503
Tag GroupsTagGroupUpdate12840x0504
Tag GroupsTagGroupDelete12850x0505
TagsTagList15370x0601
TagsTagRead15380x0602
TagsTagCreate15390x0603
TagsTagUpdate15400x0604
TagsTagDelete15410x0605
VariablesVariableList17930x0701
VariablesVariableRead17940x0702
VariablesVariableReadSecrets17950x0703VariableRead
VariablesVariableCreate17960x0704
VariablesVariableUpdate17970x0705
VariablesVariableDelete17980x0706
Batch ProcessingBatchProcessingImport20490x080115 permissions — see below
ProfileProfileCreateApiKey23050x0901
ProfileProfileNeverExpiresApiKey23060x0902ProfileCreateApiKey

Values are grouped by category in the high byte, which is why they are not contiguous. 0x0105 is absent — there is no gap in behaviour, only in numbering.

Descriptions

PermissionDescription
PermissionsAllGlobalAll global permissions
PermissionsAllAll organisational permissions
PermissionsImpersonateUser Impersonation
AuditGlobalListGlobal audit list
AuditGlobalReadGlobal audit read
AuditListList audit
AuditReadRead audit
AuditDeleteDelete audit
OrganizationListList organizations
OrganizationReadRead organization
OrganizationCreateCreate organization
OrganizationUpdateUpdate organization
OrganizationDeleteDelete organization
UserListList users
UserReadRead user
UserCreateCreate user
UserUpdateUpdate user
UserDeleteDelete user
GroupListList groups
GroupReadRead group
GroupCreateCreate group
GroupUpdateUpdate group
GroupDeleteDelete group
TagGroupListList tag groups
TagGroupReadRead tag group
TagGroupCreateCreate tag group
TagGroupUpdateUpdate tag group
TagGroupDeleteDelete tag group
TagListList tags
TagReadRead tag
TagCreateCreate tag
TagUpdateUpdate tag
TagDeleteDelete tag
VariableListList variables
VariableReadRead variable
VariableReadSecretsRead variable secrets
VariableCreateCreate variable
VariableUpdateUpdate variable
VariableDeleteDelete variable
BatchProcessingImportImport Tag Groups, Tags and Library Sets
ProfileCreateApiKeyCreate API key
ProfileNeverExpiresApiKeyNever expiring API key

The catch-alls

PermissionsAllGlobal, PermissionsAll and PermissionsImpersonate say what their holder may hand out, not what they may do. Someone holding PermissionsAll administers every non-global permission in the organization and still only does what they have actually been given.

See granting versus holding.

BatchProcessingImport

Depends on all fifteen of:

TagGroupList, TagGroupRead, TagGroupCreate, TagGroupUpdate, TagGroupDelete, TagList, TagRead, TagCreate, TagUpdate, TagDelete, VariableList, VariableRead, VariableCreate, VariableUpdate, VariableDelete

An import creates tag groups, tags, library sets and variables, and replacing takes all of them away again — so it depends on everything it touches rather than standing for the one thing it writes first.

VariableReadSecrets is deliberately absent: an import writes values, sensitive ones included, without ever being shown one back.

Notes on individual permissions

VariableReadSecrets says nothing on its own. Every endpoint that hands over a secret asks to read the variable first.

ProfileCreateApiKey and ProfileNeverExpiresApiKey cover what someone may do to their own account. A key is minted for whoever asks and never for another account, which is why there is no read or list permission beside them — an account's own keys are its own business.

AuditGlobalList widens the audit list to include entries belonging to no organization; it does not replace AuditList.

The permissions claim

The JWT carries a flat array of the integer values above — exactly what was granted, with no dependency expansion. Expansion happens at check time.

{ "permissions": [769, 1025, 1281, 1537, 1793, 1794] }

That set is UserList, GroupList, TagGroupList, TagList, VariableList, VariableRead.