Documentation
Resend CLI
resend-pp-cli
Install
npx -y @mvanhorn/printing-press-library install resendInstalls the CLI binary and the agent skill for Claude Code, Codex, Cursor, Gemini CLI, Copilot, and more. Add --cli-only or --skill-only for one half. Requires Node.
Documentation
The full Resend API (100 endpoints across emails, broadcasts, audiences, contacts, domains, templates, webhooks) plus a local SQLite cache that powers cross-resource queries the dashboard and SDK cannot answer.
The official Resend CLI is fast and one-shot per command; this CLI is the agent-native companion with --json --select --dry-run consistency, FTS5 search over sent emails, and rollups (audiences inventory, broadcasts performance, deliverability summary, contacts where, emails to ) that exist only because every Resend resource is mirrored locally.
Created by @giacaglia (Giuliano Giacaglia).
Quick Start
# Verify RESEND_API_KEY and reach api.resend.com.
resend-pp-cli doctor
# Populate the local SQLite store with audiences, contacts, domains, broadcasts, and templates.
resend-pp-cli sync --full
# First read — confirm sync landed.
resend-pp-cli domains list --json --select id,name,status
# Cross-audience rollup the official CLI cannot produce.
resend-pp-cli audiences inventory --json
# FTS across emails, contacts, broadcasts, and templates.
resend-pp-cli search invoice --json
Unique Features
These capabilities aren't available in any other tool for this API.
Cross-resource queries over local state
-
emails to— Every email sent to a single recipient address, with delivery status and timestamps, ordered newest-first.Reach for this when an agent needs to reconstruct what a single user has received — support tickets, GDPR exports, dispute investigations.
resend-pp-cli emails to <your-email> --json --select id,subject,status,sent_at -
emails timeline— Collapsed event chain for a single email: sent → delivered → opened → clicked → bounced, in one ordered table.Use when debugging 'why didn't this arrive?' — one command shows whether it was sent, delivered, opened, or bounced and when.
resend-pp-cli emails timeline 4ef9a417-d4ff-4ec5-9af2-c80a4d5d2c1f --json -
audiences inventory— Per-audience rollup: contact count, unsubscribed count, last-broadcast timestamp, recent open-rate.Use before planning a campaign — quickly see which audiences are healthy and recently engaged.
resend-pp-cli audiences inventory --json -
contacts where— Find every audience, segment, and topic a contact (by email or name) belongs to in one query.Use when triaging unsubscribe requests, GDPR deletions, or 'why is bob getting this email?'.
resend-pp-cli contacts where <contact-email> --json --select audience_name,subscribed
Aggregate analytics from local store
-
broadcasts performance— Open / click / bounce rate across all broadcasts, sortable; not limited to a single broadcast or 30-day window.Use to compare campaign performance across the lifetime of the account.
resend-pp-cli broadcasts performance --json --select broadcasts,count,status -
domains health— Verification + DKIM/SPF/DMARC status across every domain in one table, flags missing or unverified records.Use on call-out / deliverability incidents to confirm all sending domains are fully verified.
resend-pp-cli domains health --json -
deliverability summary— Bounce rate, complaint rate, and suppression count over a rolling window (default 7d) computed from local event data.Use weekly to monitor IP/domain reputation trends before they cause deliverability incidents.
resend-pp-cli deliverability summary --window 7d --json
Operational hygiene
-
api-keys rotation— API keys sorted by age + last-used timestamp (joined from logs); flags stale keys older than N days.Use during quarterly security reviews — find unused keys that should be rotated or revoked.
resend-pp-cli api-keys rotation --older-than 90d --json
Usage
Run resend-pp-cli --help for the full command reference and flag list.
Commands
api-keys
Create and manage API Keys through the Resend API.
resend-pp-cli api-keys create- Create a new API keyresend-pp-cli api-keys delete- Remove an existing API keyresend-pp-cli api-keys list- Retrieve a list of API keys
audiences
Deprecated: Use Segments instead. Create and manage Audiences through the Resend API.
resend-pp-cli audiences create- Deprecated: Use Segments instead. These endpoints still work, but will be removed in the future.resend-pp-cli audiences delete- Deprecated: Use Segments instead. These endpoints still work, but will be removed in the future.resend-pp-cli audiences get- Deprecated: Use Segments instead. These endpoints still work, but will be removed in the future.resend-pp-cli audiences list- Deprecated: Use Segments instead. These endpoints still work, but will be removed in the future.
automations
Create and manage Automations through the Resend API.
resend-pp-cli automations create- Create an automationresend-pp-cli automations delete- Delete an automationresend-pp-cli automations get- Retrieve a single automationresend-pp-cli automations list- Retrieve a list of automationsresend-pp-cli automations update- Update an automation
broadcasts
Create and manage Broadcasts through the Resend API.
resend-pp-cli broadcasts create- Create a broadcastresend-pp-cli broadcasts delete- Remove an existing broadcast that is in the draft statusresend-pp-cli broadcasts get- Retrieve a single broadcastresend-pp-cli broadcasts list- Retrieve a list of broadcastsresend-pp-cli broadcasts update- Update an existing broadcast
contact-properties
Create and manage Contact Properties through the Resend API.
resend-pp-cli contact-properties create- Create a new contact propertyresend-pp-cli contact-properties delete- Remove an existing contact propertyresend-pp-cli contact-properties get- Retrieve a single contact propertyresend-pp-cli contact-properties list- Retrieve a list of contact propertiesresend-pp-cli contact-properties update- Update an existing contact property
contacts
Create and manage Contacts through the Resend API.
resend-pp-cli contacts create- Create a new contactresend-pp-cli contacts delete- Remove an existing contact by ID or emailresend-pp-cli contacts get- Retrieve a single contact by ID or emailresend-pp-cli contacts list- Retrieve a list of contactsresend-pp-cli contacts update- Update a single contact by ID or email
domains
Create and manage domains through the Resend API.
resend-pp-cli domains create- Create a new domainresend-pp-cli domains delete- Remove an existing domainresend-pp-cli domains get- Retrieve a single domainresend-pp-cli domains list- Retrieve a list of domainsresend-pp-cli domains update- Update an existing domain
emails
Start sending emails through the Resend API.
resend-pp-cli emails create- Send an emailresend-pp-cli emails create-batch- Trigger up to 100 batch emails at once.resend-pp-cli emails get- Retrieve a single emailresend-pp-cli emails get-receiving- Retrieve a single received emailresend-pp-cli emails get-receiving-2- Retrieve a list of attachments for a received emailresend-pp-cli emails get-receiving-3- Retrieve a single attachment for a received emailresend-pp-cli emails list- Retrieve a list of emailsresend-pp-cli emails list-receiving- Retrieve a list of received emailsresend-pp-cli emails update- Update a single email
events
Create and manage Events through the Resend API.
resend-pp-cli events create- Create an eventresend-pp-cli events create-send- Send an eventresend-pp-cli events delete- Delete an eventresend-pp-cli events get- Retrieve a single eventresend-pp-cli events list- Retrieve a list of eventsresend-pp-cli events update- Update an event
logs
Retrieve API request logs through the Resend API.
resend-pp-cli logs get- Retrieve a single logresend-pp-cli logs list- Retrieve a list of logs
segments
Create and manage Segments through the Resend API.
resend-pp-cli segments create- Create a new segmentresend-pp-cli segments delete- Remove an existing segmentresend-pp-cli segments get- Retrieve a single segmentresend-pp-cli segments list- Retrieve a list of segments
templates
Create and manage Templates through the Resend API.
resend-pp-cli templates create- Create a templateresend-pp-cli templates delete- Remove an existing templateresend-pp-cli templates get- Retrieve a single templateresend-pp-cli templates list- Retrieve a list of templatesresend-pp-cli templates update- Update an existing template
topics
Create and manage Topics through the Resend API.
resend-pp-cli topics create- Create a new topicresend-pp-cli topics delete- Remove an existing topicresend-pp-cli topics get- Retrieve a single topicresend-pp-cli topics list- Retrieve a list of topicsresend-pp-cli topics update- Update an existing topic
webhooks
Create and manage Webhooks through the Resend API.
resend-pp-cli webhooks create- Create a new webhookresend-pp-cli webhooks delete- Remove an existing webhookresend-pp-cli webhooks get- Retrieve a single webhookresend-pp-cli webhooks list- Retrieve a list of webhooksresend-pp-cli webhooks update- Update an existing webhook
Output Formats
# Human-readable table (default in terminal, JSON when piped)
resend-pp-cli api-keys list
# JSON for scripting and agents
resend-pp-cli api-keys list --json
# Filter to specific fields
resend-pp-cli api-keys list --json --select id,name,status
# Dry run — show the request without sending
resend-pp-cli api-keys list --dry-run
# Agent mode — JSON + compact + no prompts in one flag
resend-pp-cli api-keys list --agent
Agent Usage
This CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--jsonoutput to stdout, errors to stderr - Filterable -
--select id,namereturns only fields you need - Previewable -
--dry-runshows the request without sending - Explicit retries - add
--idempotentto create retries and--ignore-missingto delete retries when a no-op success is acceptable - Confirmable -
--yesfor explicit confirmation of destructive actions - Piped input - write commands can accept structured input when their help lists
--stdin - Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendlyis set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
Health Check
resend-pp-cli doctor
Verifies configuration, credentials, and connectivity to the API.
Configuration
Config file: ~/.config/resend-pp-cli/config.toml
Static request headers can be configured under headers; per-command header overrides take precedence.
Environment variables:
| Name | Kind | Required | Description |
|---|---|---|---|
RESEND_API_KEY | per_call | Yes | Set to your API credential. |
Troubleshooting
Authentication errors (exit code 4)
- Run
resend-pp-cli doctorto check credentials - Verify the environment variable is set:
echo $RESEND_API_KEYNot found errors (exit code 3) - Check the resource ID is correct
- Run the
listcommand to see available items
API-specific
- 401 unauthorized on every command — Confirm RESEND_API_KEY is exported. Keys start with re_… and are visible at resend.com/api-keys.
- Local commands return zero rows — Run
resend-pp-cli sync --full— local-only commands read from the SQLite cache. - 429 rate limit — Resend documents Retry-After. Lower --rate-limit (default 0 = unbounded) or run sync in off-hours.
- Domain reports unverified after creation — Resend caches DNS for ~24h;
domains verify <id>triggers re-check, anddomains get <id>shows current DKIM/SPF/DMARC state.
Sources & Inspiration
This CLI was built by studying these projects and resources:
- resend/resend-node — TypeScript (907 stars)
- resend/mcp-send-email — TypeScript (510 stars)
- resend/resend-cli — TypeScript (368 stars)
- resend/resend-go — Go
- resend/resend-python — Python
- resend/resend-openapi — YAML
- resend/n8n-nodes-resend — TypeScript
Generated by CLI Printing Press
For agents: pass /documentation/resend/agents.md to install this CLI from a prompt.