name: resend version: 1.0.0 description: Manage Resend email platform via CLI — send emails, manage contacts, broadcasts, templates, segments, domains, webhooks, and more. Use when the user wants to send emails, manage contacts/segments, create broadcasts, manage templates, check domain status, or any Resend-related task. Trigger words: "resend", "send email", "broadcast", "contacts", "email template", "domain verify", "webhook". user_invocable: true
Resend CLI Skill
You are an expert at managing the Resend email platform via the resend CLI (v1.6.0+). Execute commands directly — do not ask the user to run them manually.
Pre-flight Check
Before running any command, verify authentication:
resend whoami --json
If "authenticated": false:
- Check if
RESEND_API_KEYis set in the environment - If not, tell the user to run
! resend logininteractively (Claude cannot handle the interactive prompt) - Do NOT proceed until authenticated
Command Reference
Emails
| Command | Description |
|---|---|
resend emails list |
List sent emails |
resend emails send --from <addr> --to <addr> --subject "..." --html "..." |
Send email |
resend emails send --from <addr> --to <addr> --template <id> --var key=value |
Send with template |
resend emails send ... --html-file ./email.html |
Send from HTML file |
resend emails send ... --attachment ./file.pdf |
Send with attachment |
resend emails send ... --scheduled-at "in 1 hour" |
Schedule email |
resend emails get <id> |
Get email details |
resend emails batch --file ./emails.json |
Batch send (up to 100) |
resend emails cancel <id> |
Cancel scheduled email |
Contacts
| Command | Description |
|---|---|
resend contacts list |
List all contacts |
resend contacts create --email <email> --first-name <name> |
Create contact |
resend contacts get <id-or-email> |
Get contact by ID or email |
resend contacts update <id-or-email> --properties '{"key":"value"}' |
Update contact properties |
resend contacts update <id-or-email> --unsubscribed |
Unsubscribe contact |
resend contacts delete <id-or-email> --yes |
Delete contact |
resend contacts segments <id-or-email> |
List contact's segments |
resend contacts add-segment <contactId> --segment-id <segmentId> |
Add contact to segment |
resend contacts remove-segment <contactId> <segmentId> |
Remove from segment |
resend contacts topics <id-or-email> |
List contact's topic subs |
resend contacts update-topics <id> --topics '[{"id":"...","subscription":"opt_in"}]' |
Update topic subs |
Segments
| Command | Description |
|---|---|
resend segments list |
List all segments |
resend segments create --name "..." |
Create segment |
resend segments get <id> |
Get segment details |
resend segments delete <id> --yes |
Delete segment |
No update endpoint — delete and recreate to rename.
Broadcasts
| Command | Description |
|---|---|
resend broadcasts list |
List all broadcasts |
resend broadcasts create --from <addr> --subject "..." --segment-id <id> --html "..." |
Create draft |
resend broadcasts create ... --send |
Create and send immediately |
resend broadcasts send <id> |
Send a draft |
resend broadcasts send <id> --scheduled-at "tomorrow at 9am ET" |
Schedule send |
resend broadcasts get <id> |
Get broadcast details (includes HTML) |
resend broadcasts update <id> --subject "..." |
Update draft |
resend broadcasts delete <id> --yes |
Delete/cancel broadcast |
resend broadcasts open [id] |
Open in Resend dashboard |
Template variables in broadcasts: Use triple-brace syntax {{{PROPERTY_NAME|fallback}}} in HTML.
Lifecycle: create (draft) -> update (optional) -> send. Dashboard-created broadcasts cannot be sent via API.
Templates
| Command | Description |
|---|---|
resend templates list |
List all templates |
resend templates create --name "..." --html "..." --subject "..." --var KEY:type |
Create template |
resend templates get <id> |
Get template |
resend templates update <id> --subject "..." |
Update template |
resend templates publish <id> |
Publish draft template |
resend templates duplicate <id> |
Duplicate template |
resend templates delete <id> --yes |
Delete template |
resend templates open [id] |
Open in dashboard |
Variables: Declared with --var KEY:type or --var KEY:type:fallback. Used in HTML as {{{KEY}}}.
Lifecycle: create (draft) -> publish. Re-publish after updates.
Domains
| Command | Description |
|---|---|
resend domains list |
List all domains |
resend domains create --name example.com |
Create domain (get DNS records) |
resend domains verify <id> |
Trigger DNS verification |
resend domains get <id> |
Get domain + DNS records + status |
resend domains update <id> --tls enforced --open-tracking |
Update settings |
resend domains delete <id> --yes |
Delete domain |
Lifecycle: create -> configure DNS -> verify -> get (poll until "verified").
Topics
| Command | Description |
|---|---|
resend topics list |
List all topics |
resend topics create --name "..." |
Create topic |
resend topics create --name "..." --default-subscription opt_out |
Create with default opt-out |
resend topics get <id> |
Get topic |
resend topics update <id> --name "..." |
Update topic |
resend topics delete <id> --yes |
Delete topic |
Contact Properties
| Command | Description |
|---|---|
resend contact-properties list |
List property definitions |
resend contact-properties create --key <key> --type string |
Create string property |
resend contact-properties create --key <key> --type number --fallback-value 0 |
Create number property |
resend contact-properties update <id> --fallback-value "..." |
Update fallback |
resend contact-properties delete <id> --yes |
Delete property |
Reserved keys (built-in): FIRST_NAME, LAST_NAME, EMAIL, UNSUBSCRIBE_URL. Keys and types are immutable after creation.
Webhooks
| Command | Description |
|---|---|
resend webhooks list |
List webhook endpoints |
resend webhooks create --endpoint <url> --events all |
Create webhook |
resend webhooks get <id> |
Get webhook config |
resend webhooks listen |
Listen locally (dev) |
resend webhooks update <id> --status disabled |
Disable webhook |
resend webhooks delete <id> --yes |
Delete webhook |
Events: email.sent, email.delivered, email.bounced, email.complained, email.opened, email.clicked, email.failed, email.scheduled, email.suppressed, email.received, email.delivery_delayed, contact.created, contact.updated, contact.deleted, domain.created, domain.updated, domain.deleted
API Keys
| Command | Description |
|---|---|
resend api-keys list |
List API keys (no tokens shown) |
resend api-keys create --name "..." |
Create key (token shown once!) |
resend api-keys create --name "..." --permission sending_access --domain-id <id> |
Scoped key |
resend api-keys delete <id> --yes |
Delete key (immediate revocation) |
Utility
| Command | Description |
|---|---|
resend doctor |
Diagnose CLI, API key, domains |
resend whoami |
Show auth status |
resend open |
Open Resend dashboard |
Global Flags
All commands accept:
--json— force JSON output--quiet/-q— suppress spinners, implies JSON--api-key <key>— override stored key for single command-p, --profile <name>— use alternate profile
Best Practices
- Always use
--jsonor--quietwhen parsing output programmatically - Use
--yeson destructive commands (delete, rm) to skip confirmation prompts - Broadcasts: Never delete a segment before a scheduled broadcast is sent — it will fail
- Templates: Always publish after creating/updating before using in emails
- Batch sends: Create a JSON file with array of email objects for
resend emails batch - Scheduling: Supports ISO 8601 and natural language ("in 1 hour", "tomorrow at 9am ET")
- For HTML emails: Prefer
--html-fileover inline--htmlfor complex templates - Contact properties: Use triple-brace syntax in broadcasts
{{{PROP|fallback}}}for personalization
ClawRapid-specific Notes
- Sending domain: check with
resend domains list - Resend free plan limits: Transactional 100/day, 3,000/month. Marketing: 1,000 contacts, 3 segments
- For bulk sends over 100/day, use Marketing Broadcasts instead of transactional emails
- Resend Broadcasts DO support template variable interpolation with
{{{VAR|fallback}}}triple-brace syntax in HTML