Roles overview
Roles are the named permission levels a member can hold. Plane ships system roles, such as admin, contributor, and guest, and a workspace can add custom roles. A custom role is built from one or more permission schemes, and its permissions are the union of theirs. A system role's permissions come from Plane's built-in definition.
The roles API is read-only. It lists the workspace's custom roles together with the system roles.
Learn more about roles and permissions
The role object
Attributes
idstring (uuid)Unique identifier for the role.
namestringDisplay name, for example
QA Reviewer.slugstringThe role's key. Grants and member records refer to a role by its slug, for example as a grant's
relation.descriptionstringFree-form description of what the role is for.
namespacestringWhat the role applies to. One of
workspace,project, orinstance.is_systembooleanWhether the role is one of Plane's built-in roles.
levelintegerA rank for comparing roles. A higher level means more access. The system roles use
30for the instance admin,25for owner,20for admin,15for member and contributor,10for commenter, and5for guest.statusstringactiveorinactive.based_on_idstring (uuid) or nullThe role this one was created from, or
null.permission_scheme_idsarray of stringThe ids of the permission schemes attached to the role, ordered by each attachment's sort order.
permissionsarray of stringEvery permission the role grants, sorted, as
<resource_type>:<action>strings such asworkitem:edit. A permission that applies only under a condition carries the condition as a suffix, such asworkitem:delete+creator. Wildcards such as*orworkitem:*cover a whole set. A system role's permissions come from Plane's built-in definition. A custom role's permissions are the union of its schemes' permissions.updated_atstring (date-time)When the role was last updated.
permission_schemesarray of objectReturned only with
?expand=permission_schemes. The attached schemes, each withid,name,slug,namespace, andis_system.
{
"id": "9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88",
"name": "QA Reviewer",
"slug": "qa-reviewer",
"description": "Commenter access plus editing work items.",
"namespace": "project",
"is_system": false,
"level": 10,
"status": "active",
"based_on_id": "6e2a9d47-1c5b-4f83-a7d0-3b8e4f1c9a62",
"permission_scheme_ids": ["f3b8a1c6-2d7e-4a95-8c14-5e9d0b3f7a28"],
"permissions": [
"comment:create",
"comment:edit+creator",
"cycle:view",
"module:view",
"project:view",
"state:view",
"workitem:edit",
"workitem:view"
],
"updated_at": "2026-01-14T09:22:41.478363Z"
}Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/v2/workspaces/{slug}/roles/ | List roles |
GET | /api/v2/workspaces/{slug}/roles/{pk}/ | Get a role |
Response shaping
Every role read accepts ?fields= for sparse responses and ?expand=permission_schemes to embed the attached schemes. List rows and single reads return the same fields. See Sparse fields and Expanding relations. Errors follow the shared problem+json contract.

