Upsell CLI
Command-line access to your Upsell dashboard. Inspect orders, switch between stores, and script against your data without leaving the terminal.
$ curl -fsSL https://cli.upsell.is/install.sh | sh
Requires Node.js 22 or newer and an Upsell account. The installer verifies a SHA-256 checksum before installing anything.
Quick start
upsell auth login # opens your browser to log in
upsell store list # the stores you can access
upsell store switch <name> # pick the store to work on
upsell orders list # recent orders for that store
Commands
upsell auth
| Command | Description |
|---|---|
| login |
Log in through the browser. --token <jwt> to pass one directly
|
| logout | Clear stored credentials |
| status | Show who you are logged in as |
upsell store
| Command | Description |
|---|---|
| list | List every store your account can access |
| switch <name> | Set the active store |
| current | Show the active store |
| branches | List branches for the active store |
upsell orders
| Command | Description |
|---|---|
| list | Recent orders for the active store, defaulting to the last 30 days |
| get <id> | Show a single order by id |
orders list takes --limit <1-100> (default 25),
--page <n>, --branch <id>, and
--search <query> matching order number, customer, or phone.
upsell log
The local action journal: every create, read, update, and delete this CLI has made from this
machine. Filter with --op, --resource, --store,
--failed, or --limit. --path prints the journal
location.
Global options
| Option | Description |
|---|---|
| --format json | Machine-readable output instead of a table |
| --store <name> | Override the active store for one invocation |
| --help | Usage for any command or subcommand |
| --version | Print the installed version |
Both global options work in any position, before or after the subcommand.
Scripting
Reads render a table by default and structured JSON with --format json, so they
compose with jq:
upsell orders list --limit 100 --format json \
| jq '.data[] | select(.status == "pending") | .orderNumber'
Exit codes are stable, so failures are easy to branch on:
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Generic failure |
| 2 | Not logged in |
| 3 | Permission denied |
| 4 | Not found |
Configuration
Credentials and the active store live in ~/.upsell-cli/config.json, in a
directory created with mode 0700.
| Variable | Effect |
|---|---|
| UPSELL_STORE | Default active store, overridden by --store |
| UPSELL_DASHBOARD_URL | Dashboard used for browser login, default https://app.upsell.is |
| UPSELL_NO_JOURNAL | Set to 1 to disable the local action journal |
Store precedence: --store beats UPSELL_STORE, which beats the
saved config.
Updating and removing
Re-run the installer to update in place:
curl -fsSL https://cli.upsell.is/install.sh | sh
To remove it, delete the install directory and drop the PATH line you added:
rm -rf ~/.upsell