List roles
/portal/v1/accounts/{accountSlug}/applications/{appSlug}/environments/{envSlug}/rolesReturns the roles defined for the active Application within the current Environment as an unpaginated { items } collection, each enriched with a permission_count, its scope and organization_node_id. By default only the Environment's own roles are returned, the ones assignable in every organization; organization_id lists one organization's own roles, scope=available with it what can be held inside that organization (its own and the Environment's), and scope=all every role. By default only active roles are returned; pass include_inactive=true to include deactivated roles, and filter by type=system or type=custom. An organization_id that is not a live organization returns 404. Requires the rbac.view_roles permission.
Authentication
AuthorizationJWT access token. Never send alongside X-API-Key: a request carrying both is refused.
env_roles.viewDeveloper ConsoleView roles and the permissions they grant. Granted through an administrator role in the Admin Workspace; a valid token without it is refused with 403.
Path Parameters
accountSlugstring Required The Account's slug. An unknown one answers 404.
appSlugstring Required The Application's slug within the Account.
envSlugstring Required The Environment's slug within the Application.
Query Parameters
include_inactiveenum Optional Include deactivated roles in the list.
typeenum Optional Filter by role origin.
scopeenum Optional Which roles: `environment` (the default) the Environment's own, assignable in every organization; `organization` one organization's own; `available` what can be held inside one organization, its own and the Environment's; `all` every role in the Environment. `organization` and `available` need `organization_id`.
organization_idstring Optional The organization whose roles to list. Alone, it lists that organization's own roles (`scope=organization`).
Responses
application/json
items *RoleResponseDto[]
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Errors
When the request can't be completed, the response body includes a stable error code you can branch on, and a correlation_id (also sent as the X-Correlation-Id header). Quote the correlation id when you contact support: it identifies the exact request in Canopy's logs.
account.capability_requiredForbiddenThe signed-in user's administrator roles do not grant the capability this endpoint requires.
Ask an account administrator to grant a role carrying the capability named in the Authentication section, then retry.
Returned object
curl -X GET "https://auth.canopy-io.com/portal/v1/accounts/value/applications/value/environments/value/roles?include_inactive=true&type=system&scope=environment&organization_id=value" \ -H "Authorization: Bearer $CANOPY_TOKEN"
{ "items": [ { "id": "string", "name": "string", "scope": "environment", "organization_node_id": "string", "organization_name": "string", "description": "string", "is_system_role": false, "system_key": "string", "is_active": false, "created_at": "2026-04-20T12:00:00.000Z", "updated_at": "2026-04-20T12:00:00.000Z", "version": 0, "permission_count": 0, "member_count": 0, "administers": false } ] }
Tell us how we can improve this guide.