CLI
Drive Blindrelay from your terminal — send mail on every plan; manage domains and inspect usage with read/write on Mini and higher. Same scoped API keys your apps use. Zero content retention still applies: the CLI never logs recipients or message bodies.
Why a CLI
- Script deploys, DNS verify loops, and ops runbooks without a browser
- Same machine API as HTTP — least-privilege scopes on every command
- Pair with Agent Plugin for agents; keep the terminal for humans
Install
Binary name blindrelay. Linux installs a checksum-verified release binary; macOS uses Homebrew with prebuilt bottles (no Rust compile).
curl -fsSL https://blindrelay.app/install.sh | sh export PATH="$HOME/.local/bin:$PATH"
Or Homebrew:
brew tap blindrelay/tap https://blindrelay.app/tap.git brew install blindrelay/tap/blindrelay
Authenticate with blindrelay auth login (browser approves a ~21-day API key stored under ~/.config/blindrelay/), or create a scoped key under API Keys (sign-in required) and set BLINDRELAY_API_KEY. Free plans mint send only; read/write need Mini+. Revealing a key with a passkey works only in the browser.
blindrelay auth login # or: export BLINDRELAY_API_KEY='br_…'
Quickstart
blindrelay auth login blindrelay setup blindrelay send \ --from 'noreply@example.com' \ --to 'user@example.com' \ --subject 'Hello' \ --html '<p>Hi</p>'
Commands and scopes
| Command | Scope | Description |
|---|---|---|
blindrelay setup | any | Where setup stands and the next step: domain, DNS records, verification, test send. Resumable; the test email only after you confirm it |
blindrelay check | none | Check subject, HTML and text before sending: placeholder links, unrendered template variables, HTML mistakes. Runs offline with no key; never fetches links; exits 1 on errors |
blindrelay send | send | Queue a transactional email (--header for Reply-To or List-Unsubscribe) |
blindrelay domains list / get / dns-guide | read | List or inspect sending domains, or copy an LLM DNS publish prompt |
blindrelay domains add / verify / rotate-dkim / remove | write | Register, verify DNS, rotate DKIM, or delete a domain |
blindrelay domains set-dedicated-ip | write | Pin a domain to a dedicated IP, force shared, or follow workspace default |
blindrelay dedicated-ip get | read | List dedicated IP assignments and workspace default |
blindrelay dedicated-ip request / cancel / resume-checkout / set-default / dismiss-closure | write | Request, pay, cancel, or set default dedicated IP |
blindrelay inbound-forward get | read | List inbound forward aliases (paid plans) |
blindrelay inbound-forward add / update / remove | write | Create, update, or delete inbound forward aliases (mailbox or HTTPS endpoint) |
blindrelay inbound-forward endpoints list | read | List inbound HTTPS endpoints with delivery diagnostics (never the signing secret) |
blindrelay inbound-forward endpoints add / update / remove / rotate-secret / test | write | Manage inbound HTTPS endpoints; add and rotate-secret return the signing secret once |
blindrelay usage / usage-history | read | Current and historical usage |
blindrelay spend-cap set | write | Set or clear the monthly message cap that limits overage spend |
blindrelay delivery-stats | read | Delivery counters (optional period, domain, egress filters) |
blindrelay emails status | send | Delivery status of one message by the id its send returned (a read key works too; no recipient or content) |
blindrelay emails list | send | Recent messages for the delivery data window: id, domain, status, timestamps (a read key works too; no recipient or content) |
blindrelay suppression list / export | read | List or export suppression hashes (no plaintext addresses) |
blindrelay suppression lookup | read | Find every suppression entry for an address, with its cause (matched in process, never stored) |
blindrelay suppression add | write | Add a hash-only manual suppression (plaintext hashed in process) |
blindrelay suppression remove | write | Remove any suppression entry by id (--confirm for hard bounces, also --confirm-complaint for complaints) |
blindrelay audit list | read | Control-plane audit events (no message content) |
blindrelay otlp get | read | Get OTLP export config (auth header masked) |
blindrelay otlp save / test | write | Save OTLP config or probe the collector |
blindrelay delivery-settings get | read | Get delivery webhook settings (auth header masked) and hook diagnostics: attempts, last attempt, HTTP status, failure category |
blindrelay delivery-settings save / test | write | Save delivery webhook settings or send a test webhook (category and HTTP status, not counted). The first save of a webhook returns its signing secret, once |
blindrelay delivery-settings rotate-secret | write | Generate or rotate the webhook signing secret, shown once; the replaced secret also signs for 24 hours |
blindrelay feedback | any | Send product feedback to the Blindrelay team: sentiment, area, what worked or did not, and the goal behind it. Agents send it only after you approve the draft; text with an email address is refused |
Machine API
The CLI is a thin client over /v1/*. Payload fields and error codes live in the API reference.