Skip to main content

Overview

Groups are collections of users within an organization that simplify access management. Instead of assigning permissions to individual users, you can assign permissions to a group and manage membership separately. This approach scales better and makes access management more maintainable.
Groups always belong to an organization. Users can be members of multiple groups within the same organization.

Group Model

FieldTypeDescription
iduuidUnique group identifier
namestringUnique slug for the group. Must contain only alphanumeric characters, dashes, and underscores. Example: data-engineering
titlestringHuman-readable display name. Can contain any UTF-8 character. Example: Data Engineering Team
orgIduuidOrganization ID that the group belongs to
metadataobjectKey-value pairs for additional information. Validated against Group MetaSchema
statestringCurrent state: enabled or disabled
createdAttimestampCreation timestamp
updatedAttimestampLast update timestamp
memberCountintegerNumber of users in the group (transient field)

Roles and Permissions

Groups have two predefined roles:
RolePermissionsDescription
Group OwnerFull controlCan manage group settings, add/remove members, and delete the group
Group MemberStandard memberMember of the group with access based on group’s assigned permissions
Group permissions work hierarchically. When a group is granted access to a project or resource, all group members inherit that access.

Creating a Group

Create a new group within an organization to organize users.
1

Identify the Organization

Obtain the organization ID where you want to create the group.
2

Prepare Group Details

Choose a unique name and prepare metadata describing the group’s purpose.
3

Create via API

Send a POST request to create the group.
curl -L -X POST 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data-raw '{
    "name": "data-engineering",
    "title": "Data Engineering Team",
    "metadata": {
      "description": "Team responsible for data pipelines and infrastructure",
      "labels": {
        "department": "engineering",
        "team": "data"
      }
    }
  }'
Authorization Required: User must have app_organization_groupcreate permission or be an Organization Admin/Manager.

Listing Groups

List Organization Groups

Retrieve all groups within a specific organization.
curl -L -X GET 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'

List All Groups (Admin)

Retrieve all groups across all organizations (requires admin access).
curl -L -X GET 'https://frontier.example.com/v1beta1/admin/groups' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'

Getting Group Details

Retrieve detailed information about a specific group.
curl -L -X GET 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'
Authorization Required: User must have access to the organization to view its groups.

Updating a Group

Modify group details such as title or metadata.
curl -L -X PUT 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data-raw '{
    "title": "Data Engineering & Analytics",
    "metadata": {
      "description": "Combined data engineering and analytics team",
      "labels": {
        "department": "engineering",
        "team": "data-analytics"
      }
    }
  }'
Authorization Required: User must be a Group Owner or Organization Admin.

Managing Group Members

Adding Users to a Group

Add users to a group to grant them the group’s permissions. Users must already exist in the organization.
curl -L -X POST 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/users' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data-raw '{
    "userIds": [
      "2e73f4a2-3763-4dc6-a00e-7a9aebeaa971",
      "8f92b4c3-9a81-4d2e-b5c6-1e8f7d9c2b4a"
    ]
  }'
If a user is already a member of the group, no action is taken for that user. The API accepts multiple user IDs in a single request.

Listing Group Members

Retrieve all users who are members of a group.
curl -L -X GET 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/users' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'

Listing Group Members with Role Filter

Filter group members by their role within the group (owner or member).
curl -L -X GET 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/relations?subjectType=user&role=member' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'
curl -L -X GET 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/relations?subjectType=user&role=owner' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'

Removing Users from a Group

Remove a user from a group. The user loses access granted through this group but retains any direct permissions.
curl -L -X DELETE 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/users/{user_id}' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'
Authorization Required: User must be a Group Owner or Organization Admin.

Assigning Group Permissions

Grant Project Access to Group

Assign a role to a group at the project level. All group members inherit this access.
curl -L -X POST 'https://frontier.example.com/v1beta1/projects/{project_id}/policies' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data-raw '{
    "roleId": "app_project_viewer",
    "resource": "app/project:{project_id}",
    "principal": "app/group:{group_id}"
  }'

Grant Resource Access to Group

Assign a role to a group for a specific resource.
curl -L -X POST 'https://frontier.example.com/v1beta1/resources/{resource_id}/policies' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data-raw '{
    "roleId": "resource_owner",
    "resource": "compute/instance:{resource_id}",
    "principal": "app/group:{group_id}"
  }'
Using groups for permissions management:
  • Simplifies access control by managing group membership instead of individual permissions
  • Scales better as your organization grows
  • Makes it easier to audit who has access to what
  • Allows role-based changes without touching individual user permissions

Use Cases

Organization: Tech Corp
├── Group: Engineering
│   ├── Access: All Engineering Projects (Viewer)
│   └── Members: All engineers
├── Group: Product
│   ├── Access: Product Projects (Manager)
│   └── Members: Product managers
└── Group: DevOps
    ├── Access: Infrastructure Projects (Owner)
    └── Members: DevOps engineers

State Management

Disabling a Group

Temporarily suspend a group without deleting it. Group members lose access granted through the group.
curl -L -X POST 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/disable' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data '{}'
Authorization Required: User must be a Group Owner or Organization Admin.

Enabling a Group

Restore access to a disabled group.
curl -L -X POST 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}/enable' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>' \
  --data '{}'
Disabling a group:
  • Does not delete the group or remove members
  • Temporarily revokes all access granted through the group
  • Useful for temporary team changes or security holds
  • Can be reversed by re-enabling

Deleting a Group

Permanently delete a group and remove all associated policies.
curl -L -X DELETE 'https://frontier.example.com/v1beta1/organizations/{org_id}/groups/{group_id}' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <access_token>'
This action cannot be undone!Deleting a group:
  • Permanently removes all policies where the group is the principal
  • Removes all group memberships
  • Does NOT delete user accounts
Users who had access only through this group will lose that access.
Authorization Required: User must be a Group Owner or Organization Admin.

Best Practices

Descriptive Names

Use clear names that indicate the group’s purpose, like engineering-team, product-managers, or external-contractors.

Granular Groups

Create focused groups for specific purposes rather than one large group. This provides better access control.

Regular Audits

Periodically review group memberships to ensure users still need access and remove those who don’t.

Document Purpose

Use metadata to document the group’s purpose, owner, and intended use for better governance.

Common Patterns

1

Create Role-Based Groups

Create groups that mirror your organizational roles (e.g., developers, managers, viewers).
2

Assign Project Access

Grant each group appropriate access to projects they need to work with.
3

Manage Members

Add users to groups based on their role. Users automatically inherit group permissions.
4

Adjust as Needed

When someone changes roles, move them between groups instead of adjusting individual permissions.
Nested Access Pattern: You can create a hierarchy of access by:
  1. Creating groups for different access levels
  2. Assigning users to appropriate groups
  3. Granting groups different permissions on the same resources
Example: data-admins group has owner access, data-engineers has manager access, and data-analysts has viewer access to the same data project.

Next Steps

Manage Projects

Create projects for your groups to access

Configure Policies

Set up fine-grained access control

Invite Users

Invite users to your organization

Build docs developers (and LLMs) love