capgo-organization-management · git:20261011.86834d4 · 2026-10-11 · sha256 249cd22c11954ef9

capgo-organization-management git:20261011.86834d4A

Immutable. This exact content never changes and is served at /api/v1/blob/249cd22c11954ef9.

---
name: capgo-organization-management
description: Guides Capgo account lookup and organization administration with the CLI, including `account whoami`, `organization list/add/members/set/delete`, 2FA enforcement, password policy, API-key expiration and hashed-key policy, and apps per organization. Use when listing or creating Capgo organizations, auditing members' 2FA before enforcing it, tightening org security settings, or resolving "Access Denied: Two-Factor Authentication Required" or "Insufficient permissions". Do not use for OTA bundle or channel work (capgo-release-management), native builds (capgo-native-builds), or app-side updater code (capgo-live-updates).
---

# Capgo Organization Management

Administer Capgo accounts and organizations safely from the CLI.

Facts below were checked against `@capgo/cli` 8.77 (October 2026). All commands accept `-a, --apikey`.

## When to Use

TRIGGER when:

- The user needs their Capgo account ID or email for support (`account whoami`).
- The user lists, creates, renames, or deletes organizations.
- The user audits members or 2FA status, or enforces 2FA, a password policy, API-key expiration, or hashed API keys.
- The user needs to know which org owns an app (`app list --show-org --show-org-id`).
- A command fails with an org-level 2FA or permission error.

Do not use when:

- The work is bundles, channels, or rollouts. Use `capgo-release-management`.
- The user needs native cloud builds. Use `capgo-native-builds`.
- The user wants an agent connected to the Capgo account (MCP). Use `capgo-cli-usage`.

## Command Map

| Goal | Command (`npx @capgo/cli@latest ...`) |
| --- | --- |
| Who am I | `account whoami` (alias `account id`) |
| List orgs | `organization list` |
| Create org | `organization add --name "My Company" --email admin@example.com` |
| Members + 2FA status | `organization members ORG_ID` (2FA status needs `super_admin`) |
| Rename / change email | `organization set ORG_ID --name "New Name" --email ops@example.com` |
| Enforce 2FA | `organization set ORG_ID --enforce-2fa` (`--no-enforce-2fa` to undo) |
| Password policy | `organization set ORG_ID --password-policy --min-length 12 --require-uppercase --require-number --require-special` |
| API-key expiration | `organization set ORG_ID --require-apikey-expiration --max-apikey-expiration-days 90` (1 to 365) |
| Hashed API keys | `organization set ORG_ID --enforce-hashed-api-keys` |
| Apps per org | `app list --show-org --show-org-id` or `app list --filter-by-org-id ORG_ID --output-text` |
| Delete org | `organization delete ORG_ID` (owner only, irreversible) |

Use `organization`. The `organisation` spelling is deprecated and will be removed.

## Procedure

### 1. Identify scope and role

```bash
npx @capgo/cli@latest account whoami
npx @capgo/cli@latest organization list
```

Confirm the target `ORG_ID`. Security settings need the `super_admin` role. Deleting an org needs the owner.

### 2. Inspect before enforcing

```bash
npx @capgo/cli@latest organization members ORG_ID
```

List the members without 2FA, then **report to the user before enforcing**. Enforcing 2FA locks those members out of CLI and API access until they enable it.

### 3. Change one policy at a time

Apply one `organization set` change, verify it, then move to the next. Keep at least one admin with working 2FA and a valid key so the org is never locked out.

### 4. API-key policy side effects

- `--require-apikey-expiration` / `--max-apikey-expiration-days` affects new keys. The keys the hosted MCP creates for OAuth (`MCP · <client>`) already expire after at most 90 days, and a stricter org limit wins.
- `--enforce-hashed-api-keys` means a key is shown only once at creation. Existing CI secrets keep working, but a lost key must be recreated.

## Traps

- `organization delete` cannot be undone, and only owners can run it. Run `app list --filter-by-org-id ORG_ID` first so the user sees what lives in that org, then get explicit confirmation with the org name.
- `organization members` needs `super_admin` to show 2FA status. Lower roles see partial data.
- Do not ask users to paste API keys into chat for admin work. Have them run `npx @capgo/cli@latest login`, or set `CAPGO_TOKEN` in their shell.

## Verification

1. Run `organization list` again. The name and email changes show up.
2. Run `organization members ORG_ID` again after enforcement. Every remaining member shows 2FA enabled.
3. Run a read-only command with a non-admin member's key (for example `app list`). It should succeed after they enable 2FA.

## Error Handling

| String | Fix |
| --- | --- |
| `🔐 Access Denied: Two-Factor Authentication Required` / `This organization requires all members to have 2FA enabled.` | Enable 2FA at https://console.capgo.app (account settings), then retry. Docs: https://capgo.app/docs/webapp/2fa-enforcement/ |
| `Insufficient permissions for <key>` | The acting user or key lacks the role. Security settings need `super_admin`, delete needs the owner |
| `No organizations available` | The key's user has no org yet. Create one with `organization add` |
| `No Capgo API key found. Run ... first, then retry this command.` | `npx @capgo/cli@latest login`, set `CAPGO_TOKEN`, or pass `-a` |

## Resources

- Organization reference: https://capgo.app/docs/cli/reference/organization/
- Account reference: https://capgo.app/docs/cli/reference/account/
- 2FA enforcement: https://capgo.app/docs/webapp/2fa-enforcement/