From dev-essentials
Send emails via Resend API - transactional, batch, contacts, domains, webhooks, React Email
npx claudepluginhub willsigmon/sigstack --plugin dev-essentialsThis skill is limited to using the following tools:
Complete Resend email API expertise for transactional emails, marketing broadcasts, and contact management.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Complete Resend email API expertise for transactional emails, marketing broadcasts, and contact management.
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)
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"}
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 /emails/{id} # Retrieve email details
PATCH /emails/{id} # Update scheduled email
DELETE /emails/{id}/cancel # Cancel scheduled email
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: '...' },
]);
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}
]
})
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | Yes | "Name <email@domain>" format |
to | string[] | Yes | Recipients (max 50) |
subject | string | Yes | Subject line |
html | string | No* | HTML body |
text | string | No* | Plain text (auto-generated from html if omitted) |
react | ReactNode | No* | React Email component (Node.js only) |
cc | string[] | No | Carbon copy |
bcc | string[] | No | Blind carbon copy |
reply_to | string[] | No | Reply-to addresses |
scheduled_at | string | No | ISO 8601 or natural language |
attachments | array | No | {filename, content, content_type?} |
tags | array | No | {name, value} pairs (256 char limit) |
headers | object | No | Custom email headers |
*One of html, text, or react required
-H "Idempotency-Key: unique-key-123"
# Prevents duplicate sends within 24 hours
# 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}
# List domains
GET /domains?limit=20
# Create domain
POST /domains
{"name": "yourdomain.com"}
# Verify domain
POST /domains/{id}/verify
# Delete domain
DELETE /domains/{id}
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);
# 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"}}}
# 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}
Use onboarding@resend.dev as sender for testing before domain verification.
Node.js, Python, PHP, Laravel, Ruby, Go, Rust, Java, .NET
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
tips@sigstack.dev - newsletterhello@sigstack.dev - general contactnoreply@sigstack.dev - transactional*@sigstack.dev - any address worksUse when: Sending transactional emails, marketing campaigns, contact management, domain setup, webhook configuration