resend

Installation
SKILL.md

Resend Email API

Send transactional emails, manage contacts, and domains via Resend's REST API.

Official docs: https://resend.com/docs/api-reference/introduction


When to Use

Use this skill when you need to:

  • Send transactional emails (welcome, password reset, notifications)
  • Send batch emails to multiple recipients
  • Manage email contacts and audiences
  • Verify and manage sending domains
  • Track email delivery status

Prerequisites

Important: When using $RESEND_TOKEN in commands that contain a pipe (|), always wrap the curl command in bash -c '...' to avoid silent variable clearing — a known Claude Code issue.


Emails

Send Email

Write to /tmp/resend_request.json:

{
  "from": "Acme <onboarding@resend.dev>",
  "to": ["<your-recipient-email>"],
  "subject": "<your-subject>",
  "html": "<p><your-html-content></p>"
}

Then run:

curl -s -X POST "https://api.resend.com/emails" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Send Email with Plain Text

Write to /tmp/resend_request.json:

{
  "from": "Acme <onboarding@resend.dev>",
  "to": ["<your-recipient-email>"],
  "subject": "<your-subject>",
  "text": "<your-plain-text-content>"
}

Then run:

curl -s -X POST "https://api.resend.com/emails" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Send Email with CC/BCC

Write to /tmp/resend_request.json:

{
  "from": "Acme <onboarding@resend.dev>",
  "to": ["<your-recipient-email>"],
  "cc": ["<your-cc-email>"],
  "bcc": ["<your-bcc-email>"],
  "subject": "<your-subject>",
  "html": "<p><your-html-content></p>"
}

Then run:

curl -s -X POST "https://api.resend.com/emails" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Send Email with Reply-To

Write to /tmp/resend_request.json:

{
  "from": "Acme <onboarding@resend.dev>",
  "to": ["<your-recipient-email>"],
  "reply_to": "<your-reply-to-email>",
  "subject": "<your-subject>",
  "html": "<p><your-html-content></p>"
}

Then run:

curl -s -X POST "https://api.resend.com/emails" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Send Scheduled Email

Schedule email using natural language or ISO 8601 format:

Write to /tmp/resend_request.json:

{
  "from": "Acme <onboarding@resend.dev>",
  "to": ["<your-recipient-email>"],
  "subject": "<your-subject>",
  "html": "<p><your-html-content></p>",
  "scheduled_at": "in 1 hour"
}

Then run:

curl -s -X POST "https://api.resend.com/emails" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Send Batch Emails

Send up to 100 emails in a single request:

Write to /tmp/resend_request.json:

[
  {
    "from": "Acme <onboarding@resend.dev>",
    "to": ["<your-recipient-1>"],
    "subject": "Hello 1",
    "html": "<p>Email 1</p>"
  },
  {
    "from": "Acme <onboarding@resend.dev>",
    "to": ["<your-recipient-2>"],
    "subject": "Hello 2",
    "html": "<p>Email 2</p>"
  }
]

Then run:

curl -s -X POST "https://api.resend.com/emails/batch" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Retrieve Email

curl -s "https://api.resend.com/emails/<your-email-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

List Sent Emails

curl -s "https://api.resend.com/emails" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Cancel Scheduled Email

curl -s -X POST "https://api.resend.com/emails/<your-email-id>/cancel" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Contacts

Create Contact

Write to /tmp/resend_request.json:

{
  "email": "<your-contact-email>",
  "first_name": "<your-first-name>",
  "last_name": "<your-last-name>",
  "unsubscribed": false
}

Then run:

curl -s -X POST "https://api.resend.com/contacts" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Create Contact with Custom Properties

Write to /tmp/resend_request.json:

{
  "email": "<your-contact-email>",
  "first_name": "<your-first-name>",
  "last_name": "<your-last-name>",
  "properties": {
    "company": "<your-company-name>",
    "role": "<your-role>"
  }
}

Then run:

curl -s -X POST "https://api.resend.com/contacts" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Retrieve Contact

curl -s "https://api.resend.com/contacts/<your-contact-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

List Contacts

curl -s "https://api.resend.com/contacts" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

List Contacts with Pagination

curl -s "https://api.resend.com/contacts?limit=50" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Update Contact

Write to /tmp/resend_request.json:

{
  "first_name": "<your-new-first-name>",
  "unsubscribed": true
}

Then run:

curl -s -X PATCH "https://api.resend.com/contacts/<your-contact-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Delete Contact

curl -s -X DELETE "https://api.resend.com/contacts/<your-contact-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Domains

List Domains

curl -s "https://api.resend.com/domains" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Retrieve Domain

curl -s "https://api.resend.com/domains/<your-domain-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Create Domain

Write to /tmp/resend_request.json:

{
  "name": "<your-domain-name>"
}

Then run:

curl -s -X POST "https://api.resend.com/domains" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Verify Domain

curl -s -X POST "https://api.resend.com/domains/<your-domain-id>/verify" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Delete Domain

curl -s -X DELETE "https://api.resend.com/domains/<your-domain-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

API Keys

List API Keys

curl -s "https://api.resend.com/api-keys" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Create API Key

Write to /tmp/resend_request.json:

{
  "name": "<your-key-name>"
}

Then run:

curl -s -X POST "https://api.resend.com/api-keys" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Create API Key with Permissions

Write to /tmp/resend_request.json:

{
  "name": "<your-key-name>",
  "permission": "sending_access"
}

Then run:

curl -s -X POST "https://api.resend.com/api-keys" --header "Authorization: Bearer $(printenv RESEND_TOKEN)" --header "Content-Type: application/json" -d @/tmp/resend_request.json

Delete API Key

curl -s -X DELETE "https://api.resend.com/api-keys/<your-api-key-id>" --header "Authorization: Bearer $(printenv RESEND_TOKEN)"

Email Parameters Reference

Parameter Type Description
from string Sender email (required). Format: "Name <email@domain.com>"
to string[] Recipients (required). Max 50 addresses
subject string Email subject (required)
html string HTML content
text string Plain text content
cc string[] CC recipients
bcc string[] BCC recipients
reply_to string Reply-to address
scheduled_at string Schedule time (ISO 8601 or natural language)
tags array Custom tags for tracking
attachments array File attachments (max 40MB total)

Response Codes

Status Description
200 Success
400 Invalid parameters
401 Missing API key
403 Invalid API key
404 Resource not found
429 Rate limit exceeded (2 req/sec)
5xx Server error

Guidelines

  1. Rate Limits: Default is 2 requests per second; implement backoff for 429 errors
  2. Sender Domain: Use verified domains for production; onboarding@resend.dev for testing
  3. Batch Emails: Use /emails/batch for sending to multiple recipients efficiently
  4. Idempotency: Use Idempotency-Key header to prevent duplicate sends
  5. Scheduling: Use natural language (in 1 hour) or ISO 8601 format for scheduled_at

API Reference

Weekly Installs
62
GitHub Stars
52
First Seen
Jan 24, 2026
Installed on
gemini-cli51
opencode50
codex49
github-copilot48
cursor48
amp47