Awesome-omni-skill Resend Expert

Send emails via Resend API - transactional, batch, contacts, domains, webhooks, React Email

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/resend-expert" ~/.claude/skills/diegosouzapw-awesome-omni-skill-resend-expert && rm -rf "$T"
manifest: skills/development/resend-expert/SKILL.md
source content

Resend Expert

Complete Resend email API expertise for transactional emails, marketing broadcasts, and contact management.

Quick Reference

Base URL:

https://api.resend.com
Auth:
Authorization: Bearer $RESEND_API_KEY
User's Key:
re_Czsz1gQW_Dz4H2a9dH8tTjgteeDCjVujF
Verified Domain:
sigstack.dev
(newsletter: tips@sigstack.dev)

Core Endpoints

Send Single Email

curl -X POST https://api.resend.com/emails \
  -H "Authorization: Bearer re_Czsz1gQW_Dz4H2a9dH8tTjgteeDCjVujF" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "SigStack Tips <tips@sigstack.dev>",
    "to": ["recipient@example.com"],
    "subject": "Hello",
    "html": "<p>Email body</p>"
  }'

Response:

{"id": "uuid-string"}

Send Batch Emails (up to 100)

POST https://api.resend.com/emails/batch
# Body: Array of email objects (same structure as single)
# Note: No attachments or scheduling in batch mode

Get/Update/Cancel Email

GET    /emails/{id}        # Retrieve email details
PATCH  /emails/{id}        # Update scheduled email
DELETE /emails/{id}/cancel # Cancel scheduled email

Node.js SDK

npm install resend
import { Resend } from 'resend';
const resend = new Resend('re_Czsz1gQW_Dz4H2a9dH8tTjgteeDCjVujF');

// Send email
const { data, error } = await resend.emails.send({
  from: 'SigStack <hello@sigstack.dev>',
  to: ['user@example.com'],
  subject: 'Welcome!',
  html: '<h1>Hello World</h1>',
});

// With React Email component
const { data, error } = await resend.emails.send({
  from: 'SigStack Tips <tips@sigstack.dev>',
  to: ['user@example.com'],
  subject: 'Welcome!',
  react: <WelcomeEmail name="User" />,
});

// Batch send
const { data, error } = await resend.batch.send([
  { from: '...', to: ['...'], subject: '...', html: '...' },
  { from: '...', to: ['...'], subject: '...', html: '...' },
]);

Python SDK

pip install resend
import resend
resend.api_key = "re_Czsz1gQW_Dz4H2a9dH8tTjgteeDCjVujF"

# Send email
email = resend.Emails.send({
    "from": "SigStack <hello@sigstack.dev>",
    "to": ["user@example.com"],
    "subject": "Hello",
    "html": "<p>Welcome!</p>"
})

# With attachments
email = resend.Emails.send({
    "from": "...",
    "to": ["..."],
    "subject": "...",
    "html": "...",
    "attachments": [
        {"filename": "invoice.pdf", "content": base64_content}
    ]
})

Email Parameters

ParameterTypeRequiredDescription
from
stringYes
"Name <email@domain>"
format
to
string[]YesRecipients (max 50)
subject
stringYesSubject line
html
stringNo*HTML body
text
stringNo*Plain text (auto-generated from html if omitted)
react
ReactNodeNo*React Email component (Node.js only)
cc
string[]NoCarbon copy
bcc
string[]NoBlind carbon copy
reply_to
string[]NoReply-to addresses
scheduled_at
stringNoISO 8601 or natural language
attachments
arrayNo
{filename, content, content_type?}
tags
arrayNo
{name, value}
pairs (256 char limit)
headers
objectNoCustom email headers

*One of html, text, or react required

Idempotency

-H "Idempotency-Key: unique-key-123"
# Prevents duplicate sends within 24 hours

Contact Management

# Create contact
POST /contacts
{"email": "user@example.com", "first_name": "John", "unsubscribed": false}

# List contacts
GET /contacts?limit=50

# Update contact
PATCH /contacts/{id}

# Delete contact
DELETE /contacts/{id}

Domain Management

# List domains
GET /domains?limit=20

# Create domain
POST /domains
{"name": "yourdomain.com"}

# Verify domain
POST /domains/{id}/verify

# Delete domain
DELETE /domains/{id}

Webhooks

Events:

email.sent
,
email.delivered
,
email.bounced
,
email.complained
,
email.opened
,
email.clicked
,
contact.created
,
contact.updated
,
contact.deleted

# Create webhook
POST /webhooks
{"url": "https://yourapp.com/webhook", "events": ["email.delivered", "email.bounced"]}

Signature Verification (Node.js):

import { Webhook } from 'resend';
const webhook = new Webhook(process.env.RESEND_WEBHOOK_SECRET);
const payload = webhook.verify(body, headers);

Templates

# Create template
POST /templates
{"name": "welcome", "html": "<p>Hello {{name}}</p>"}

# Send with template
POST /emails
{"from": "...", "to": ["..."], "template": {"id": "template-id", "variables": {"name": "John"}}}

API Keys

# Create key
POST /api-keys
{"name": "production", "permission": "sending_access"}
# permission: "full_access" | "sending_access"

# List keys
GET /api-keys

# Delete key
DELETE /api-keys/{id}

Rate Limits & Quotas

  • Free tier: 100 emails/day, 3,000/month
  • Batch: Max 100 emails per request
  • Recipients: Max 50 per email
  • Attachments: Max 40MB total

Testing Domain

Use

onboarding@resend.dev
as sender for testing before domain verification.

SDKs

Node.js, Python, PHP, Laravel, Ruby, Go, Rust, Java, .NET

Common Patterns

Newsletter (tips@sigstack.dev):

await resend.emails.send({
  from: 'SigStack Tips <tips@sigstack.dev>',
  to: [subscriber.email],
  subject: 'Weekly Dev Tips',
  html: newsletterHtml,
});

Transactional (noreply@sigstack.dev):

await resend.emails.send({
  from: 'SigStack <noreply@sigstack.dev>',
  to: [user.email],
  subject: 'Reset your password',
  react: <PasswordResetEmail token={token} />,
});

Marketing broadcast:

// Use Broadcasts API for marketing campaigns with unsubscribe handling
POST /broadcasts

Verified Sender Addresses

  • tips@sigstack.dev
    - newsletter
  • hello@sigstack.dev
    - general contact
  • noreply@sigstack.dev
    - transactional
  • *@sigstack.dev
    - any address works

Use when: Sending transactional emails, marketing campaigns, contact management, domain setup, webhook configuration