Command types
One command per API operation
82 commands, generated from the OpenAPI spec. A new endpoint becomes a command with no CLI code change.
Send, batch, read, list, cancel.
Contacts
Fields, segments, suppressions.
Campaigns
Create, validate, send, schedule.
Templates
Render-ready documents by id.
Domains
Verify, check DNS, watch reputation.
Webhooks
Endpoints, events, test deliveries.
SMS
Senders, brands, messages, rates.
Utility
login, doctor, whoami, completion.
Examples
Reads like the API, typed by a human
Flags are the request fields, kebab-cased. Anything shells express badly gets a convenience flag.
# Inline HTML
unitpost email send \
--from "Acme <you@yourdomain.com>" \
--to customer@acme.com \
--subject "Welcome aboard" \
--html "<p>Thanks for signing up!</p>"
# A file on disk, an attachment, and a saved template with variables
unitpost email send \
--from you@yourdomain.com --to customer@acme.com \
--subject "Your invoice" \
--html-file ./invoice.html \
--attach ./invoice.pdf# Pipe straight into jq — stdout is only ever the result document
unitpost email list --limit 100 | jq -r '.data[] | select(.status=="bounced") | .to'
# Capture an id for the next step
id=$(unitpost email send --from you@yourdomain.com --to a@acme.com \
--subject Hi --text Hi --json | jq -r .id)Agents
Driven by people. Built for agents.
The skill teaches the mapping. JSON and exit codes do the rest.
Skill-taught
email_send becomes unitpost email send. Same scopes.
Parseable
One JSON document on stdout. Stable 0 / 1 / 2 exits.
Preview first
--dry-run prints the request. Nothing sends.
unitpost email send \unitpost contacts create --email customer@example.com --first-name Adaunitpost email campaigns validate cmp_123
Questions
Common questions
Do I need to install anything to use the CLI?
How does login work?
Can AI agents drive the CLI?
Why is there no api-keys command?
How do I know the commands match the API?
Meet your new favorite way to send
Install it, sign in once, and run the whole API from your shell.