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.

Library-set scoped means a group's grant may be restricted to specific library sets instead of applying to every one in the organisation — see Library-set scoping.

Permissions​

CategoryNameValueHexGlobalLibrary-set scopedDepends on
PermissionsPermissionsAllGlobal10x0001✔
PermissionsPermissionsAll20x0002
PermissionsPermissionsImpersonateUser30x0003✔
AuditAuditGlobalList2570x0101✔
AuditAuditGlobalRead2580x0102✔AuditGlobalList
AuditAuditList2590x0103
AuditAuditRead2600x0104AuditList
AuditAuditDelete2620x0106
OrganizationsGlobalOrganizationList5140x0202✔
OrganizationsGlobalOrganizationRead5150x0203✔
OrganizationsGlobalOrganizationCreate5160x0204✔
OrganizationsGlobalOrganizationUpdate5170x0205✔
OrganizationsGlobalOrganizationDelete5180x0206✔
OrganizationsGlobalOrganizationCertificateManage5190x0207✔GlobalOrganizationUpdate
UsersUserList7690x0301
UsersUserRead7700x0302
UsersUserCreate7710x0303
UsersUserUpdate7720x0304
UsersUserDelete7730x0305
UsersUserCreateServiceAccountApiKey7740x0306UserRead
Tag GroupsTagGroupList12810x0501
Tag GroupsTagGroupRead12820x0502
Tag GroupsTagGroupCreate12830x0503
Tag GroupsTagGroupUpdate12840x0504
Tag GroupsTagGroupDelete12850x0505
TagsTagList15370x0601
TagsTagRead15380x0602
TagsTagCreate15390x0603
TagsTagUpdate15400x0604
TagsTagDelete15410x0605
VariablesVariableList17930x0701✔
VariablesVariableRead17940x0702✔
VariablesVariableReadSecrets17950x0703✔VariableRead
VariablesVariableCreate17960x0704✔
VariablesVariableUpdate17970x0705✔
VariablesVariableDelete17980x0706✔
Batch ProcessingBatchProcessingImport20490x080116 permissions — see below
Batch ProcessingBatchProcessingView20500x0802
Batch ProcessingBatchProcessingExport20510x08037 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. 0x0401-0x0405 are absent for the same reason as a retired category: a Groups permission family (GroupList...GroupDelete) used to live there, gating the group endpoints separately from the user endpoints. It was removed — managing a group now uses the equivalent User* permission, since the two are really one administrative area — and the values are not reused.

Descriptions​

PermissionDescription
PermissionsAllGlobalAll global permissions
PermissionsAllAll organisational permissions
PermissionsImpersonateUserUser Impersonation
AuditGlobalListGlobal audit list
AuditGlobalReadGlobal audit read
AuditListList audit
AuditReadRead audit
AuditDeleteDelete audit
GlobalOrganizationListList organizations
GlobalOrganizationReadRead organization
GlobalOrganizationCreateCreate organization
GlobalOrganizationUpdateUpdate organization
GlobalOrganizationDeleteDelete organization
GlobalOrganizationCertificateManageManage organization certificates
UserListList users and groups
UserReadRead users and groups
UserCreateCreate users and groups
UserUpdateUpdate users and groups
UserDeleteDelete users and groups
UserCreateServiceAccountApiKeyCreate API keys for service accounts
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
BatchProcessingViewView Batch Processing
BatchProcessingExportExport Tag Groups and Library Sets
ProfileCreateApiKeyCreate API key
ProfileNeverExpiresApiKeyNever expiring API key

The catch-alls​

PermissionsAllGlobal, PermissionsAll and PermissionsImpersonateUser 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 sixteen of:

BatchProcessingView, 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.

An import can create or replace content in any library set named in the file, so every Variable* permission above must be held unrestricted — a grant scoped to specific library sets is refused outright, with 403, rather than applied to part of the file. See Library-set scoping.

BatchProcessingExport​

Depends on all seven of:

BatchProcessingView, TagGroupList, TagGroupRead, TagList, TagRead, VariableList, VariableRead

Unlike import, an export only ever lists and reads what it writes to a file, so it depends on the list and read permission of each of the three kinds it touches rather than all five.

VariableReadSecrets is absent from the dependency list for the same reason it is not required outright elsewhere: whether it is needed depends on the request's secretExportOption, checked in the handler rather than declared as a blanket dependency. Asking to export a secret's actual value (secretExportOption=Value) without holding it is refused with 403.

The same as import: an export can read from any library set named in the request, so every permission above - VariableReadSecrets included, when secretExportOption=Value is asked for - must be held unrestricted. A grant scoped to specific library sets is refused outright rather than applied to part of the request.

Notes on individual permissions​

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

GlobalOrganizationCertificateManage is kept separate from GlobalOrganizationUpdate on purpose: it depends on GlobalOrganizationUpdate but is not implied by it, so an organisation's record can be edited without also being trusted to reissue the certificate its secrets are encrypted against.

BatchProcessingView shows the management UI's Batch section at all; BatchProcessingImport and BatchProcessingExport each depend on it and separately control the Import and Export subsections within that page.

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.

UserCreateServiceAccountApiKey is the counterpart for somebody else's account, and only a service account's: a service account has no login, so it has no session in which to ask for its own key. It is kept apart from UserCreate (which only makes the account) and UserUpdate (which only edits it), because a key is a standing credential that acts as the account with whatever its groups grant. It depends on UserRead, since the key is made from the account's own page. It is not included in organization impersonation, for the same reason as ProfileCreateApiKey. A key that never expires still needs ProfileNeverExpiresApiKey, held by the person making the key rather than by the service account.

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, 1281, 1537, 1793, 1794] }

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

The librarySetScopes claim​

Present only when at least one library-set-scopable permission above is restricted to specific library sets; absent entirely for an account with nothing scoped, so an ordinary token is unchanged from before this claim existed. See the JWT reference for the full shape.

{ "librarySetScopes": [{ "permission": 1794, "variableSetIds": [12, 47] }] }

That entry says VariableRead (1794) reaches only library sets 12 and 47 — every other permission in the permissions array above applies to every library set, unaffected.