Skip to content

Reference

alter apps

Create, inspect, update, archive, and delete applications.

An app owns API keys, provider configuration, agents, and grants. These commands manage the app objects themselves.

alter apps list [--include-archived] [--no-include-stats]
alter apps create --name <name> [--description ...] [--website-url ...]
alter apps show <app-id>
alter apps update <app-id> [--name ...] [--description ...] [--website-url ...]
alter apps legal-profile <app-id> --legal-name ... --privacy-url ... --terms-url ...
alter apps archive <app-id>
alter apps unarchive <app-id>
alter apps delete <app-id> [--confirm <name>]

Reads need dashboard_apps:read; create and update need dashboard_apps:write; legal-profile needs dashboard_apps:write and an organization-admin principal; archive / unarchive need dashboard_apps:admin; delete needs dashboard_apps:delete. Every command except delete accepts --output (delete prints only a confirmation line).

List apps in the current organization.

FlagDefaultDescription
--include-archivedoffInclude archived (soft-deleted) apps. Default is active-only.
--no-include-statsstats onSkip per-app grant / key / API-call counts (faster).

The command returns the server’s first page (up to 100 apps) as an array; it does not expose pagination flags.

Terminal window
alter apps list
alter apps list --include-archived --output json

Create a new app.

FlagRequiredDescription
--name <name>yesApp name (maximum 100 characters; control characters rejected).
--description <text>noFree-form description (maximum 500 characters; control characters rejected).
--website-url <url>noPublic website URL (http:// or https://).
Terminal window
alter apps create --name "Acme Production" --description "Customer-facing app"

Show one app by ID.

Terminal window
alter apps show <app-id>

Patch app fields. At least one of --name, --description, or --website-url is required — an empty update is rejected. Names are limited to 100 characters and descriptions to 500, with control characters rejected.

Terminal window
alter apps update <app-id> --description "Renamed for Q3"

Set the Customer identity and policy links Wallet and Connect show to End Users before identity and authorization data is collected. URLs are validated locally and by the backend. Provide at least one support channel.

Terminal window
alter apps legal-profile <app-id> \
--legal-name "Acme, Inc." \
--privacy-url "https://acme.example/privacy" \
--terms-url "https://acme.example/terms" \
--support-email "support@acme.example" \
--agent-purpose "Schedule meetings using the accounts you authorize."
FlagRequiredDescription
--legal-name <name>yesCustomer legal name displayed to End Users.
--privacy-url <url>yesCustomer Privacy Policy (http:// or https://).
--terms-url <url>yesCustomer Terms of Service (http:// or https://).
--support-url <url>one support channelCustomer support URL.
--support-email <email>one support channelCustomer support email.
--agent-purpose <text>noShort description of the application/agent purpose.

Archiving is a reversible soft-delete: the app disappears from the default apps list view but keeps all its keys, grants, providers, and audit history. Because archiving pulls an app out of the default view for the whole organization, both commands require the admin-tier dashboard_apps:admin scope (an organization admin). This is separate from dashboard_apps:delete, which gates the irreversible cascade — :admin does not grant it.

Terminal window
alter apps archive <app-id>
alter apps unarchive <app-id> # 409 if the app isn't archived

Because the cascade is permanent, delete is gated behind the separate dashboard_apps:delete scope (not bundled into :admin) and a type-to-confirm check:

  • Interactive: the CLI prompts you to type the app’s exact name.
  • Non-interactive (CI): pass --confirm <name> matching the app’s name. There is no --yes shortcut — the name must be surfaced so the audit trail records the intent.
Terminal window
# Interactive — prompts for the name
alter apps delete <app-id>
# CI — name supplied explicitly
alter apps delete <app-id> --confirm "Acme Production"

A wrong --confirm value exits 2 (USAGE); declining the interactive prompt exits 8 (CANCELLED).

Provision an app in CI and pin it for later steps

Terminal window
APP_ID=$(alter apps create --name "ci-staging" --output json | jq -r '.id')
alter link "$APP_ID" # subsequent steps in this directory skip --app

Review and clean up archived apps

Terminal window
# List what's archived...
alter apps list --include-archived --output json \
| jq -r '.[] | select(.archived_at) | "\(.id)\t\(.name)"'
# ...then permanently delete one (name required as confirmation)
alter apps delete "$APP_ID" --confirm "ci-staging"

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.