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.mdsource 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | format |
| string[] | Yes | Recipients (max 50) |
| string | Yes | Subject line |
| string | No* | HTML body |
| string | No* | Plain text (auto-generated from html if omitted) |
| ReactNode | No* | React Email component (Node.js only) |
| string[] | No | Carbon copy |
| string[] | No | Blind carbon copy |
| string[] | No | Reply-to addresses |
| string | No | ISO 8601 or natural language |
| array | No | |
| array | No | pairs (256 char limit) |
| object | No | Custom 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
- newslettertips@sigstack.dev
- general contacthello@sigstack.dev
- transactionalnoreply@sigstack.dev
- any address works*@sigstack.dev
Use when: Sending transactional emails, marketing campaigns, contact management, domain setup, webhook configuration