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.
Manage your Upstack account from the command line. Wraps the /api/account endpoints — see the API reference and the Account group for full request/response shapes.
Subcommands
| Subcommand | Wraps |
|---|
show | GET /api/account |
rename | PATCH /api/account |
settings order show | GET /api/account/settings/order |
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).
Sample output:
{
"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.
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.
upstack account settings order show
Sample output:
{
"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.
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:
{
"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" }.