Custom roles are available to enterprise organizations. Self-serve accounts use the built-in roles only.
How custom roles work
A custom role is a set of permissions. Each permission pairs a resource, such as Pods or secrets, with an action, such as View or Create. A member can do only what their role grants.- One role per member. Assigning a custom role replaces the member’s current role. A member never holds a built-in role and a custom role at the same time.
- Allow-only. A role lists what members can do. There are no deny rules, and anything not granted is not allowed.
- Changes apply immediately. When you edit a role, every member who holds it gets the new permissions right away.
- Independent of its starting point. A new role starts as a copy of a built-in or custom role, but it doesn’t stay linked to it. Later changes to the original don’t affect the copy.
- Limit of 25. An organization can have up to 25 custom roles. Built-in roles don’t count toward the limit.
Permissions
Permissions are shown as a grid, with one row per resource and one column per action. The columns are:
Not every action applies to every resource. Cells that don’t apply show a dash.
The grid has a row for each type of resource, such as Pods, Serverless endpoints, network volumes, templates, secrets, and API keys. A few rows are worth knowing about:
- Users and groups controls who can manage members, groups, invites, and roles.
- Billing controls access to billing and cost centers. See Billing.
- API keys, SSH keys, and S3 API keys apply only to the member’s own keys.
Permissions that need extra care
A few combinations behave in ways that aren’t obvious from the grid:- Calling endpoints from code needs an API key. A member with Use on endpoints can run jobs from the console, but sending requests to
/runor/runsyncfrom code requires an API key. Grant Create on API keys if the member needs to call endpoints programmatically. An API key acts with its owner’s current role, so it never grants more access than the role does. - Creating an endpoint from a Docker image also creates a template. The template belongs to the endpoint, so the member doesn’t need Create on templates for this to work.
- Public templates are always available. Use on templates only controls templates owned by your organization. Every member can deploy from public templates in the Hub, provided they can create the Pod or endpoint.
- Revoking Terminal doesn’t remove existing SSH access immediately. SSH keys are added to a Pod when it deploys or starts. If you remove Terminal from a role, members keep SSH access to running Pods until those Pods restart.
Create a custom role
To create, edit, or delete roles, you need the Create, Update, or Delete permission on Users and groups. The built-in admin role has all three.- Go to User management → Roles and click Create a new role.
- Enter a Role name. Names must be unique within your organization.
- Under Start from, choose the role whose permissions you want to copy. The default is Contributor, the built-in role with the least access.
- Select or clear permissions in the grid. A role must grant at least one permission.
- Click Create role.
Edit a custom role
- Go to User management → Roles and expand the custom role.
- Select or clear permissions in the grid.
- Click Save changes. Members who hold the role get the new permissions immediately.
Delete a custom role
You can’t delete a role while anyone holds it. Members are never moved to another role automatically.- On the Users tab, change the role of every member who holds the custom role, and revoke any pending invites that use it.
- On the Roles tab, expand the custom role, click Role actions, and select Delete this role.
Assign a custom role
Custom roles appear under Custom in the role dropdown, below the built-in roles. To change an existing member’s role:- Go to User management → Users.
- Click the User actions menu (⋮) next to the member and select Edit role.
- Choose the custom role and click Save. The change takes effect immediately.
- Go to User management → Users and click Add a user.
- Enter the member’s User email.
- Under User role, choose the custom role.
- Click Send invite.
Guardrails
- You can only grant permissions you hold yourself.
- A role that includes permissions you don’t hold opens read-only. You can still duplicate it, but the copy leaves out those permissions.
- You can’t change your own role.
- An organization always keeps an admin. The last admin can’t be moved to another role.
- Creating, editing, deleting, and assigning roles are recorded in the audit log.
What members see
The console adapts to each member’s role. Buttons and menu items for actions the role doesn’t allow are hidden or grayed out. For example, a member without Create on Pods doesn’t see Deploy, and a member without Use on endpoints sees Run grayed out on the endpoint’s Requests tab. Pages follow the same rules. Billing appears only for members with View on billing, Audit logs only for members with View on audit logs, and User management only for members with View on users and groups.Example roles
These examples show common ways to combine permissions. Use them as a starting point and adjust them to your organization.Limitations
- Audit log entries for invites and membership changes show the member’s underlying built-in role, not the custom role they were granted.
- Account-level permissions, such as updating a profile or linking a GitHub account, are the same for every custom role and can’t be configured per role.