> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upstackdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# upstack account

> Read and rename the Upstack account that owns the configured API key — wraps the public /api/account endpoints.

Manage your Upstack account from the command line. Wraps the `/api/account` endpoints — see the [API reference](/api-reference/overview) and the **Account** group for full request/response shapes.

## Subcommands

| Subcommand                                    | Wraps                             |
| --------------------------------------------- | --------------------------------- |
| [`show`](#show)                               | `GET /api/account`                |
| [`rename`](#rename)                           | `PATCH /api/account`              |
| [`settings order show`](#settings-order-show) | `GET /api/account/settings/order` |
| [`settings order set`](#settings-order-set)   | `PUT /api/account/settings/order` |

## show

Print the configured account as JSON — display name, creation date, active owners and admins, and the current subscription summary (when present).

```bash theme={null}
upstack account show
```

Sample output:

```json theme={null}
{
  "accountName": "Upstack Data",
  "createdAt": "2025-08-12T18:22:11.034Z",
  "owners": [
    { "email": "founder@upstackdata.com", "firstName": "Alex", "lastName": "Owner" }
  ],
  "admins": [
    { "email": "ops@upstackdata.com", "firstName": "Sam", "lastName": "Admin" }
  ],
  "subscription": {
    "plan": {
      "name": "Growth",
      "billingFrequency": "monthly",
      "displayPrice": "$49/mo",
      "discountedDisplayPrice": "$39/mo",
      "currency": "USD",
      "discount": {
        "code": "LAUNCH20",
        "type": "percentage",
        "value": 20,
        "appliesForBillingIntervals": 6
      }
    },
    "status": "active",
    "currentPeriodEnd": "2026-06-12T00:00:00.000Z",
    "cancelAtPeriodEnd": false
  }
}
```

**Required scope:** `account:read`.

### Rendering price after a discount

Render `discountedDisplayPrice ?? displayPrice` to match the web app's billing page. v2 (Stripe-native) plans may omit `discountedDisplayPrice` even when a discount is present — fall back to `displayPrice` and surface the `discount` summary for context.

## rename

Rename the configured account. Prints the current → new transition and prompts for confirmation; pass `--yes` (or `-y`) to skip.

```bash theme={null}
upstack account rename --name "Upstack Data"
upstack account rename --name "Upstack Data" --yes
```

**Required flags:**

| Flag            | Description                                                                                                                                                 |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--name <name>` | New account name. 1–100 chars after trim. Control / zero-width / bidi characters rejected; unicode letters, marks, digits, punctuation, and emoji accepted. |

**Optional flags:**

| Flag        | Description                   |
| ----------- | ----------------------------- |
| `-y, --yes` | Skip the confirmation prompt. |

**Required scope:** `account:write`. The endpoint is allowlist-only — `accountName` is the single field accepted; any other key in the body is rejected with 400.

Renames emit an `accountUpdated` EventBridge event with `actor: cli:{apiKeyPk}` so downstream consumers can distinguish UI vs API-key mutations.

## settings order show

Print the account's order settings as JSON — count flags for pending and voided orders, refund-date attribution, and the list of exclusion filters that drop matching orders from every analytics query.

```bash theme={null}
upstack account settings order show
```

Sample output:

```json theme={null}
{
  "countPendingOrders": false,
  "countVoidedOrders": false,
  "refundDateAttribution": "refund_date",
  "exclusionFilters": [
    {
      "id": "9f3e1a4f-d2c1-4f1e-9b5a-3c6d7e8f0a1b",
      "name": "Exclude POS",
      "enabled": true,
      "conditionGroups": [
        {
          "id": "...",
          "logic": "and",
          "conditions": [
            {
              "id": "...",
              "field": "sourceName",
              "operator": "not_equals",
              "value": "pos"
            }
          ]
        }
      ],
      "createdAt": "2026-05-18T10:00:00.000Z",
      "updatedAt": "2026-05-18T10:00:00.000Z"
    }
  ]
}
```

**Required scope:** `account:read`. When the account has no stored `orderSettings`, the response is filled with the same defaults the web app uses (`countPendingOrders=false`, `countVoidedOrders=false`, `refundDateAttribution=refund_date`, `exclusionFilters=[]`).

## settings order set

**PUT-the-whole-config semantics.** The file you pass replaces the stored `orderSettings` in its entirety — any existing filter not present in the file is deleted. The server assigns `id`, `createdAt`, and `updatedAt` on new filters (and on nested groups + conditions); entries that already carry an `id` preserve their `createdAt` and get a bumped `updatedAt`.

```bash theme={null}
upstack account settings order show > order.json
$EDITOR order.json
upstack account settings order set --from-file order.json
upstack account settings order set --from-file order.json --yes
```

The CLI prints a summary (counting flags, refund attribution, filter count) and asks for confirmation; `--yes` skips the prompt.

**Required flags:**

| Flag                 | Description                                   |
| -------------------- | --------------------------------------------- |
| `--from-file <path>` | JSON file with the full `OrderSettings` body. |

**Optional flags:**

| Flag        | Description                   |
| ----------- | ----------------------------- |
| `-y, --yes` | Skip the confirmation prompt. |

Example body — "drop POS orders" filter, every `id` optional:

```json theme={null}
{
  "countPendingOrders": false,
  "countVoidedOrders": false,
  "refundDateAttribution": "refund_date",
  "exclusionFilters": [
    {
      "name": "Exclude POS",
      "enabled": true,
      "conditionGroups": [
        {
          "logic": "and",
          "conditions": [
            {
              "field": "sourceName",
              "operator": "not_equals",
              "value": "pos"
            }
          ]
        }
      ]
    }
  ]
}
```

**Required scope:** `account:write`. Strict allowlist at every nesting level — extra keys in the body, or in a filter, group, or condition are rejected with 400. Operators must be valid for the chosen field type per `ORDER_EXCLUSION_FIELD_CATALOG` (e.g. `greater_than` on `sourceName` → 400).

Updates emit an `accountUpdated` EventBridge event with `actor: cli:{apiKeyPk}` and `change: { kind: "orderSettings" }`.
