CLI
Install and use the SuperSend CLI to manage teams, contacts, campaigns, and deliverability from the terminal
The SuperSend CLI (supersend) talks to the customer V2 API with your organization’s API key. It ships in the same npm package as the MCP server, and it's the recommended way for coding agents (Claude Code, Codex, Cursor) to use SuperSend.
Sign in
supersend login: it opens SuperSend in your browser, you approve the code it shows, and the CLI saves your API key. You can also copy the key from Admin → System under IDs → API Key → Copy.Requirements
supersend login signs you in)Install
npx -y -p @super-send/mcp-server@latest supersend --help
npx -y -p @super-send/mcp-server@latest supersend healthStaying up to date: keep @latest in npx commands (without it, npx reuses the first version it downloaded). Once a day the CLI checks npm, and when a newer version is out it prints one line to stderr, e.g. supersend 0.2.9 is available (you have 0.2.7). Update with: npm install -g @super-send/mcp-server@latest. Output on stdout is unchanged. Set SUPERSEND_NO_UPDATE_CHECK=1 to turn the check off (it's always off in CI).
Auth
The easiest way is to sign in through the browser:
supersend login # shows a link and a code; approve it in SuperSend
supersend whoami # who the CLI is signed in as
supersend logout # remove the saved key from this computerAt a terminal, supersend login waits for your approval. A coding agent running it gets the link and an immediate exit: approve in the browser, then run supersend login again to finish.
Or provide the key yourself (checked in this order: flag → env → config file):
# env (current shell)
export SUPERSEND_API_KEY='your-api-key'
# optional — production is the default
export SUPERSEND_API_URL='https://api.supersend.io/v2'# or save to ~/.config/supersend/config.json
supersend config set-api-key 'your-api-key'
# or one-off flag
supersend --api-key 'your-api-key' health
Quick start
supersend status # morning brief: replies, campaigns, inboxes, billing
supersend replies # unread replies; then: replies show | send | label | done <id>
supersend campaigns test-send --id <campaign-uuid> # test emails to your own inbox
supersend campaigns stats --id <campaign-uuid>
supersend health
supersend teams list
supersend contacts list --team-id <team-uuid> --limit 5
supersend campaigns list --team-id <team-uuid> --limit 5Discover commands:
supersend docs # every command with an example (agents: read this first)
supersend docs campaigns # one group
supersend --help
supersend diagnose capacity --helpGlobal flags
| Flag | Description |
|---|---|
--api-key <key> | Organization API key |
--api-url <url> | V2 base URL (default https://api.supersend.io/v2) |
--compact | Print JSON on one line (fewer tokens for agents and scripts) |
--json | Print JSON even at a terminal |
--help / --version | Help and package version |
Put global flags before the command (supersend --compact teams list). --api-key, --api-url and --compact also work after it.
Flags and arguments
true or false: --track false or --no-track. A bare --track means true.--no- clears fields that can be empty, e.g. supersend senders update --id --no-reply-to .--nodes '[...]'.--file passes all arguments as one JSON object (field names as in the MCP tool); --file - reads it from stdin. Flags override the file.The CLI checks every value before sending anything, so a typo fails fast instead of changing the wrong setting.
Output and exit codes
Results print on stdout: tables and summaries when you run the CLI at a terminal, and JSON when the output is piped (scripts, coding agents) or with --json. --compact prints one-line JSON, and SUPERSEND_OUTPUT=json or SUPERSEND_OUTPUT=text overrides the default. Errors print to stderr.
| Exit code | Meaning |
|---|---|
0 | Success |
1 | SuperSend rejected the request (see the message) |
2 | Invalid command, flag, or value — nothing was sent |
3 | Missing or rejected API key, or no access to that team |
4 | Not found |
5 | Rate limited — wait, then retry |
6 | SuperSend unavailable or unreachable — retry |
Check which key and URL the CLI will use with supersend config show (the key is masked).
Claude Code plugin
Install SuperSend in Claude Code, then ask for cold email in plain words ("help me with cold email", "any replies?"):
claude plugin marketplace add Super-Send/claude-code-plugin
claude plugin install supersend@supersendThe plugin teaches Claude the whole workflow with this CLI: sign in, account setup, writing and launching a campaign, replies, results, and deliverability. Claude asks before anything that emails people or costs money. At the start of each new session it also adds a short supersend status brief (unread replies, campaigns, inboxes) to Claude's context; turn that off with the plugin's Session brief setting.
Any endpoint: supersend api
Like gh api, supersend api calls any SuperSend endpoint with your key, for anything the commands don't cover yet. Paths are relative to the V2 API, and /v1/… paths reach V1 endpoints.
supersend api /placement-tests -f team_id=<team-uuid>
supersend api -X PATCH /campaigns/<id> -F status=2
supersend api -X POST /placement-tests --input test.json-X sets another method, so adding fields never turns a read into a write.-F key=value adds a typed field (true, false, null, numbers and JSON are parsed); -f key=value adds a string.--input (or - for stdin) sends a whole JSON body, with fields merged over it.Domains and inboxes
The CLI plans purchases; a person pays. supersend setup inbox-checkout returns a checkout link with the total, for new domains or ones the team already has.
To use a domain you already own:
supersend domains connect --domain tryacme.com # free; no DNS change yet
supersend setup inbox-checkout \
--domains 700 dark:text-green-400">'[{"domain":"tryacme.com","provider":"google"}]' \
--mailboxes 700 dark:text-green-400">'[{"username":"ada","domain":"tryacme.com","first_name":"Ada","last_name":"Lovelace"}]'
# the user opens the link and pays; a few minutes later:
supersend domains verify --domain tryacme.com # the two nameservers to set at the registrar
# after changing them at the registrar, run verify again until the stage is "ready"Use a domain only for outreach: changing its nameservers moves all of its DNS (website, other email) to SuperSend.
What the CLI does not do
LinkedIn filters (--channel linkedin on conversations list and events list) work when your organization has LinkedIn enabled, the same as in the MCP server.
Coding agents should use the CLI: have them run supersend docs once to learn the commands. Chat apps without a terminal (Claude on the web or desktop) can use the MCP Server instead.