For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
      • AstroFully-managed data operations, powered by Apache Airflow.
      • Astro Private CloudRun Airflow-as-a-service in your environment.
      • Professional ServicesExpert Airflow services for your enterprise's success.
    • Tools
      • Cosmos
      • Orbiter
      • CLI
      • AI SDK
      • Agents
      • Blueprint
      • UpdatesThe State of Airflow 2026See the insights from over 5,800 data practitioners in the full report. Download Now ➔
  • Customers
  • Docs
    • Insights
      • Blog
      • Webinars
      • Resource Library
      • Events
    • Education
      • Academy
      • What is Airflow?
  • Pricing
Get Started Free
    • Astro Private Cloud overview
    • Astro Private Cloud features
      • Use a registry backend
      • Configure namespace pools
      • Configure platform resources
      • Configure component size limits
      • Overprovision Airflow components
      • Add Pod labels
        • Manage users
        • User permissions
        • Import identity provider (IdP) groups
        • Manage teams
        • Configure authentication system
        • Integrate IAM roles

Product

  • Platform Overview
  • Astro
  • Astro Observe
  • Astro Private Cloud
  • Security & Trust
  • Pricing

Tools & Services

  • Cosmos
  • Docs
  • Professional Services
  • Product Updates

Use Cases

  • AI Ops
  • Data Observability
  • ETL/ELT
  • ML Ops
  • Operational Analytics
  • All Use Cases

Industries

  • Financial Services
  • Gaming
  • Retail
  • Manufacturing
  • Healthcare
  • All Industries

Resources

  • Academy
  • eBooks & Guides
  • Blog
  • Webinars
  • Events
  • The Data Flowcast Podcast
  • All Resources

Airflow

  • What is Airflow
  • Airflow on Astro
  • Airflow 3.0
  • Airflow Upgrades
  • Airflow Use Cases
  • Airflow 2.x End of Life

Company

  • Our Story
  • Customers
  • Newsroom
  • Careers
  • Contact

Support

  • Knowledge Base
  • Status
  • Contact Support
GitHubYouTubeLinkedInx
  • Legal
  • Privacy
  • Terms of Service
  • Consent Preferences

  • Do Not Sell or Share My Personal information
  • Limit the Use Of My Sensitive Personal Information

Apache Airflow®, Airflow, and the Airflow logo are trademarks of the Apache Software Foundation. Copyright © Astronomer 2026. All rights reserved.

LogoLogo
On this page
  • Prerequisites
  • Team types
  • Create a team
  • Create local team
  • Create IdP team
  • Parameters
  • Update a team
  • Update team details
  • Add users to local team
  • Remove users from local team
  • Replace all users
  • Update by name (alternative)
  • Remove a team
  • Remove by UUID
  • Remove by name and provider
  • Query teams
  • Get single team
  • List teams with search
  • List workspace teams
  • List deployment teams
  • Assign team roles
  • Add team to workspace
  • Add team with deployment roles
  • Update team workspace role
  • Remove team from workspace
  • Add team to deployment
  • Update team deployment role
  • Remove team from deployment
  • Available roles
  • Workspace roles
  • Deployment roles
  • Configuration
  • Enable local teams
  • Enable IdP group sync
  • Error handling
  • Best practices
  • Related documentation
Manage Platform resourcesUser access and management

Manage teams via API

Edit this page
Built with

Teams in Astro Private Cloud let you group users and assign permissions collectively. You can manage teams locally or sync them from an Identity Provider (IdP). To configure IdP group sync, see Import identity provider (IdP) groups.

Prerequisites

  • Access to the APC API GraphQL API endpoint for your Astro Private Cloud installation.
  • A valid authentication token. See Authenticate to the APC API.
  • The UUIDs of any users, workspaces, or Deployments you want to reference.

Team types

TypeProviderUser ManagementUse Case
Local teamslocalManual add/removeLocal authentication, custom groupings
IdP teamsokta, auth0, microsoft, ida, adfsAuto-synced from IdPEnterprise SSO integration

Create a team

Create local team

1mutation {
2 createTeam(
3 name: "Data Engineering"
4 description: "Data engineering team"
5 provider: "local"
6 userIds: ["<user-uuid-1>", "<user-uuid-2>"]
7 ) {
8 team {
9 id
10 name
11 provider
12 description
13 users {
14 id
15 username
16 }
17 }
18 message
19 }
20}

Create IdP team

IdP group sync automatically creates IdP teams, but you can also create them manually:

1mutation {
2 createTeam(
3 name: "engineering-group"
4 description: "Synced from Okta"
5 provider: "okta"
6 ) {
7 team {
8 id
9 name
10 provider
11 }
12 message
13 }
14}

You can’t assign users to IdP teams at creation time. The IdP syncs users to the team.

Parameters

ParameterTypeRequiredDescription
nameStringYesTeam name (unique per provider)
descriptionStringNoTeam description
providerStringNolocal (default), okta, auth0, microsoft, ida, adfs
userIds[ID]NoUser UUIDs (local teams only)

Update a team

Update team details

1mutation {
2 updateTeam(
3 id: "<team-uuid>"
4 newName: "Platform Engineering"
5 description: "Updated description"
6 ) {
7 team {
8 id
9 name
10 description
11 }
12 message
13 }
14}

Add users to local team

1mutation {
2 updateTeam(
3 id: "<team-uuid>"
4 addUserIds: ["<user-uuid-3>", "<user-uuid-4>"]
5 ) {
6 team {
7 id
8 users {
9 id
10 username
11 }
12 }
13 }
14}

Remove users from local team

1mutation {
2 updateTeam(
3 id: "<team-uuid>"
4 removeUserIds: ["<user-uuid-1>"]
5 ) {
6 team {
7 id
8 users {
9 id
10 username
11 }
12 }
13 }
14}

Replace all users

1mutation {
2 updateTeam(
3 id: "<team-uuid>"
4 teamUserIds: ["<user-uuid-5>", "<user-uuid-6>"]
5 ) {
6 team {
7 users {
8 id
9 username
10 }
11 }
12 }
13}

Update by name (alternative)

Team names are unique per provider, not globally. You must include provider alongside name to uniquely identify a team.

1mutation {
2 updateTeam(
3 name: "Data Engineering"
4 provider: "local"
5 newName: "Data Platform"
6 ) {
7 team {
8 id
9 name
10 }
11 }
12}

Remove a team

Remove by UUID

1mutation {
2 removeTeam(teamUuid: "<team-uuid>") {
3 id
4 name
5 }
6}

Remove by name and provider

1mutation {
2 removeTeam(
3 name: "Data Engineering"
4 provider: "local"
5 ) {
6 id
7 name
8 }
9}

You can only remove IdP teams that have no attached users.

Query teams

Get single team

1query {
2 team(teamUuid: "<team-uuid>") {
3 id
4 name
5 provider
6 description
7 createdAt
8 updatedAt
9 users {
10 id
11 username
12 emails {
13 address
14 }
15 }
16 roleBindings {
17 role
18 workspace {
19 id
20 label
21 }
22 deployment {
23 id
24 label
25 }
26 }
27 }
28}

List teams with search

searchPhrase requires a minimum of three characters.

1query {
2 paginatedTeams(
3 take: 20
4 pageNumber: 1
5 searchPhrase: "engineering"
6 ) {
7 teams {
8 id
9 name
10 provider
11 users {
12 id
13 }
14 }
15 count
16 }
17}

List workspace teams

1query {
2 workspaceTeams(workspaceUuid: "<workspace-uuid>") {
3 id
4 name
5 roleBindings {
6 role
7 }
8 }
9}

List deployment teams

1query {
2 deploymentTeams(deploymentUuid: "<deployment-uuid>") {
3 id
4 name
5 roleBindings {
6 role
7 }
8 }
9}

Assign team roles

Add team to workspace

If you omit role, the team defaults to WORKSPACE_VIEWER.

1mutation {
2 workspaceAddTeam(
3 teamUuid: "<team-uuid>"
4 workspaceUuid: "<workspace-uuid>"
5 role: WORKSPACE_EDITOR
6 ) {
7 id
8 label
9 }
10}

Add team with deployment roles

Assign workspace and deployment roles in a single mutation:

1mutation {
2 workspaceAddTeam(
3 teamUuid: "<team-uuid>"
4 workspaceUuid: "<workspace-uuid>"
5 role: WORKSPACE_VIEWER
6 deploymentRoles: [
7 { deploymentId: "<deployment-uuid-1>", role: DEPLOYMENT_ADMIN }
8 { deploymentId: "<deployment-uuid-2>", role: DEPLOYMENT_EDITOR }
9 ]
10 ) {
11 id
12 }
13}

Update team workspace role

1mutation {
2 workspaceUpdateTeamRole(
3 teamUuid: "<team-uuid>"
4 workspaceUuid: "<workspace-uuid>"
5 role: WORKSPACE_ADMIN
6 )
7}

Remove team from workspace

1mutation {
2 workspaceRemoveTeam(
3 teamUuid: "<team-uuid>"
4 workspaceUuid: "<workspace-uuid>"
5 ) {
6 id
7 }
8}

Add team to deployment

1mutation {
2 deploymentAddTeamRole(
3 teamUuid: "<team-uuid>"
4 deploymentUuid: "<deployment-uuid>"
5 role: DEPLOYMENT_EDITOR
6 ) {
7 id
8 role
9 }
10}

Update team deployment role

1mutation {
2 deploymentUpdateTeamRole(
3 teamUuid: "<team-uuid>"
4 deploymentUuid: "<deployment-uuid>"
5 role: DEPLOYMENT_ADMIN
6 ) {
7 id
8 role
9 }
10}

Remove team from deployment

1mutation {
2 deploymentRemoveTeamRole(
3 teamUuid: "<team-uuid>"
4 deploymentUuid: "<deployment-uuid>"
5 ) {
6 id
7 }
8}

Available roles

Workspace roles

RolePermissions
WORKSPACE_ADMINFull Workspace control, manage users/teams
WORKSPACE_EDITORCreate/manage Deployments, service accounts
WORKSPACE_VIEWERView Workspace and Deployment details

Deployment roles

RolePermissions
DEPLOYMENT_ADMINFull Deployment control, manage access
DEPLOYMENT_EDITORDeploy code, manage configuration
DEPLOYMENT_VIEWERView Deployment details

Configuration

Enable local teams

1auth:
2 local:
3 teams:
4 enabled: true

Enable IdP group sync

For full setup instructions, see Import identity provider (IdP) groups.

1auth:
2 openidConnect:
3 idpGroupsImportEnabled: true

Error handling

ErrorCauseResolution
LocalTeamManagementDisabledErrorLocal teams not enabledEnable in Helm values
IDPTeamManagementDisabledErrorIdP groups import disabledEnable IdP group sync
DuplicateTeamErrorTeam name exists for providerUse unique name
DuplicateRoleBindingErrorTeam already has roleUpdate existing role instead
InvalidTeamProviderErrorUnsupported provider valueUse local, okta, auth0, microsoft, ida, or adfs
ResourceNotFoundErrorTeam/user not foundVerify UUIDs

Best practices

  • Use IdP teams for enterprise SSO environments.
  • Use local teams for custom access groups.
  • Assign Workspace roles before Deployment roles.
  • Use Viewer roles as default and escalate as needed.
  • Audit team membership regularly.

Related documentation

  • Import IdP groups
  • Manage user permissions
  • APC API