Skip to content

org

1ctl org manages organizations — the top-level multi-tenancy unit in Satusky. Every deployment, domain, secret, and billing record belongs to an organization. Users can be members of multiple organizations with different roles, and the CLI always operates in the context of one active organization at a time.

1ctl org list
1ctl org current
1ctl org switch [--org-id <id> | --org-name <name>] [<name-or-id>]
1ctl org create --name <name> [--description <desc>]
1ctl org delete <org-id>
1ctl org team list
1ctl org team add --email <email> [--role member|admin]
1ctl org team role <org-user-id> --role <role>
1ctl org team remove <org-user-id>

1ctl organization is an alias for 1ctl org — both forms accept all subcommands.

1ctl org list

Lists every organization you are a member of, along with your role in each.

Under the hood: GET /v1/cli/organizations

Example

Terminal window
$ 1ctl org list
ORG ID NAME ROLE ACTIVE
org_04k2... acme-prod admin *
org_09xz... acme-staging member
org_11ab... personal admin

The * in the ACTIVE column marks the organization that is currently selected in ~/.satusky/context.json. All subsequent CLI commands run against this organization until you switch.


1ctl org current

Prints the name and ID of the currently active organization without making an API call. Reads directly from ~/.satusky/context.json.

Example

Terminal window
$ 1ctl org current
acme-prod (org_04k2...)

1ctl org switch [--org-id <id>] [--org-name <name>] [<name-or-id>]

Changes the active organization. The selection is written to ~/.satusky/context.json and applies to every subsequent command until you switch again. You can identify the target organization by ID, by name, or with a bare positional argument — 1ctl org switch accepts any of the three forms.

Flags

FlagDescription
--org-id <id>Select organization by ID
--org-name <name>Select organization by name

Examples

Terminal window
# Switch by name (positional argument)
1ctl org switch acme-staging
# Switch by ID
1ctl org switch --org-id org_09xz
# Switch by name flag
1ctl org switch --org-name acme-staging

After switching, the CLI confirms the new active organization:

Terminal window
$ 1ctl org switch acme-staging
Switched to acme-staging (org_09xz...)

1ctl org create --name <name> [--description <desc>]

Creates a new organization and immediately makes it the active organization. Under the hood, the API provisions a dedicated Kubernetes namespace for the org — all workloads deployed to this org are isolated in that namespace.

Flags

FlagRequiredDescription
--name <name>YesUnique organization name. Used as a label in the dashboard and in the K8s namespace slug.
--description <desc>NoOptional human-readable description

Under the hood:

  1. POST /v1/cli/organizations with name and optional description
  2. A Kubernetes namespace is created and scoped to the new org
  3. The new org is written to organizations and you are added to organization_users as admin
  4. Context switches to the new org automatically

Example

Terminal window
$ 1ctl org create --name my-new-project --description "Internal tooling"
Organization created: my-new-project (org_15cd...)
Active organization set to: my-new-project

1ctl org delete <org-id>

Deletes an organization permanently. This is irreversible: all deployments, domains, secrets, and usage records associated with the org are removed from the database, and the dedicated Kubernetes namespace is torn down.

You will be prompted to confirm by typing the organization name before deletion proceeds.

Under the hood: triggers the OrgDeleteHub workflow, which coordinates the Kubernetes namespace cleanup and cascading database record removal before returning.

Example

Terminal window
$ 1ctl org delete org_09xz
WARNING: This will permanently delete acme-staging and all its resources.
Type the organization name to confirm: acme-staging
Deleting acme-staging... done.

If the org being deleted is currently active in ~/.satusky/context.json, the CLI clears the active org. Run 1ctl org switch to select a new one.


1ctl org team list

Lists all members of the active organization with their org-user ID and role.

Example

Terminal window
$ 1ctl org team list
ORG USER ID EMAIL ROLE
ogu_01aa... [email protected] admin
ogu_02bb... [email protected] member
ogu_03cc... [email protected] member

1ctl org team add --email <email> [--role member|admin]

Invites a user to the active organization by email address. If the user does not yet have a Satusky account, an invitation email is sent. If they already have an account, they gain access immediately.

Flags

FlagDefaultDescription
--email <email>Email address of the user to invite (required)
--role <role>memberRole to assign: member or admin

Under the hood: POST /v1/cli/organizations/users

Examples

Terminal window
# Invite a new member
1ctl org team add --email [email protected]
# Invite and immediately grant admin role
1ctl org team add --email [email protected] --role admin

Role permissions

RoleCapabilities
memberDeploy and manage their own applications; view org resources
adminAll member capabilities plus: manage team members, manage billing, delete the organization

1ctl org team role <org-user-id> --role <role>

Updates the role of an existing team member. Requires admin role in the active organization.

Flags

FlagDescription
--role <role>New role: member or admin (required)

Under the hood: PATCH /v1/cli/organizations/users/{orgUserID}/role

Example

Terminal window
# Promote bob to admin
1ctl org team role ogu_02bb --role admin
# Demote carol back to member
1ctl org team role ogu_03cc --role member

1ctl org team remove <org-user-id>

Removes a user from the active organization. Their account is not deleted — they simply lose access to this org’s resources. Any deployments they own within the org continue to run.

Under the hood: DELETE /v1/cli/organizations/users/{orgUserID}

Example

Terminal window
$ 1ctl org team remove ogu_02bb
Removed [email protected] from acme-prod.

The active organization is stored in ~/.satusky/context.json under the org_id field. Every API request the CLI makes reads this value and includes it in the request context. Switching organizations with 1ctl org switch is the only way to change which org a command targets — there is no per-command --org flag.

Each organization gets a dedicated Kubernetes namespace. Workloads from different organizations are never co-scheduled or able to reach each other over the cluster network.

Context file fieldDescription
org_idActive organization ID
tokenAPI token used for all requests
user_idAuthenticated user ID

Do not hand-edit context.json. Use 1ctl org switch and 1ctl auth login to manage it.