resend
Use when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates…
Skill by resendOfficial
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/resend-resend
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/resend
What's inside
- Skill name
resend- Description
- Use when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates, tracking delivery events, managing domains, contacts, broadcasts, webhooks, API keys, inboxes (threads, labels, drafts, replies), automations, events, viewing API request logs, checking account usage and quotas, or setting up the Resend SDK. Always use this skill when the user mentions Resend, even for simple tasks like "send an email with Resend" — the skill contains critical gotchas (idempotency keys, webhook verification, template variable syntax) that prevent common production issues.
- License
- MIT
- Metadata
- author: resend · source: https://github.com/resend/resend-skills · version: 3.16.0 · homepage: https://resend.com/agent-skills
- Instructions
- 237 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (23)
- SKILL.md
- api-keys.md · references/
- automations.md · references/
- broadcasts.md · references/
- contact-properties.md · references/
- contacts.md · references/
- domains.md · references/
- events.md · references/
- fetch-all-templates.mjs · references/
- inboxes.md · references/
- installation.md · references/
- logs.md · references/
- receiving.md · references/
- segments.md · references/
- batch-email-examples.md · references/sending/
- best-practices.md · references/sending/
- email-management.md · references/sending/
- overview.md · references/sending/
- single-email-examples.md · references/sending/
- templates.md · references/
- topics.md · references/
- usage.md · references/
- webhooks.md · references/
SKILL.md (first lines)
# Resend
## Quick Send — Node.js
```typescript
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
const { data, error } = await resend.emails.send(
{
from: 'Acme <onboarding@resend.dev>',
to: ['delivered@resend.dev'],
subject: 'Hello World',
html: '<p>Email body here</p>',
},
{ idempotencyKey: `welcome-email/${userId}` }
);
if (error) {
console.error('Failed:', error.message);
return;
}
console.log('Sent:', data.id);
```
**Key gotcha:** The Resend Node.js SDK does NOT throw exceptions — it returns `{ data, error }`. Always check `error` explicitly instead of using try/catch for API errors.
## Quick Send — Python
```python
import resend
import os
resend.api_key = os.environ["RESEND_API_KEY"]
email = resend.Emails.send({
"from": "Acme <onboarding@resend.dev>",
"to": ["delivered@resend.dev"],
"subject": "Hello World",
"html": "<p>Email body here</p>",
}, idempotency_key=f"welcome-email/{user_id}")
```
### Single vs Batch Decision
| Choose | When |
|--------|------|
| **Single** (`POST /emails`) | 1 email, needs attachments, needs scheduling |
| **Batch** (`POST /emails/batch`) | 2-100 distinct emails, no attachments, no scheduling |
Batch is atomic — if one email fails validation, the entire batch fails. Always validate before sending. Batch does NOT support attachments or `scheduled_at`.
### Idempotency Keys (Critical for Retries)
Prevent duplicate emails when retrying failed requests:
| Key Facts | |
|-----------|---|
| **Format (single)** | `<event-type>/<entity-id>` (e.g., `welcome-email/user-123`) |
| **Format (batch)** | `batch-<event-type>/<batch-id>` (e.g., `batch-orders/batch-456`) |
| **Expiration** | 24 hours |
| **Max length** | 256 characters |
| **Same key + same payload** | Returns original response without resending |
| **Same key + different payload** | Returns 409 error |
## Quick Receive (Node.js)
```typescript
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
export async function POST(req: Request) {
const payload = await req.text(); // Must use raw text, not req.json()
const event = resend.webhooks.verify({
payload,
headers: {
'svix-id': req.headers.get('svix-id'),
'svix-timestamp': req.headers.get('svix-timestamp'),
'svix-signature': req.headers.get('svix-signature'),
},
secret: process.env.RESEND_WEBHOOK_SECRET,
});
if (event.type === 'email.received') {
// Webhook has metadata only — call API for body
const { data: email } = await resend.emails.receiving.get(
event.data.email_id
);
console.log(email.text);
}
return new Response('OK', { status: 200 });
}
```
**Key gotcha:** Webhook payloads do NOT contain the email body. You must call `resend.emails.receiving.get()` separately.
## What Do You Need?
| Task | Reference |
|------|-----------|
| **Send a single email** | [sending/overview.md](references/sending/overview.md) — parameters, deliverability, testing |
| **Send batch emails** | [sending/overview.md](references/sending/overview.md) → [sending/batch-email-examples.md](references/sending/batch-email-examples.md) |
| **Full SDK examples** (Node.js, Python, Go, cURL) | [sending/single-email-examples.md](references/sending/single-email-examples.md) |
| **Idempotency, retries, error handling** | [sending/best-practices.md](references/sending/best-practices.md) |
| **Get, list, reschedule, cancel emails, retrieve metrics** | [sending/email-management.md](references/sending/email-management.md) |
| **Receive inbound emails** | [receiving.md](references/receiving.md) — domain setup, webhooks, attachments |
| **Manage templates** (CRUD, variables) | [templates.md](references/templates.md) — lifecycle, aliases, pagination |
| **Set up webhooks** (events, verification) | [webhooks.md](references/webhooks.md) — verification, CRUD, retry schedule, IP allowlist |
| **Manage domains** (create, verify, claim, DNS) | [domains.md](references/domains.md) — regions, TLS, tracking, claiming, capabilities |
| **Manage contacts** (CRUD, properties) | [contacts.md](references/contacts.md) — segments, topics, custom properties, bulk CSV import |
| **Send broadcasts** (marketing campaigns) | [broadcasts.md](references/broadcasts.md) — lifecycle, scheduling, template variables |
| **Manage API keys** | [api-keys.md](references/api-keys.md) — permission scoping, domain restrictions |
| **View API request logs** | [logs.md](references/logs.md) — list and retrieve API call history, debugging |
| **Define contact properties** | [contact-properties.md](references/contact-properties.md) — custom fields for contacts |
| **Manage segments** (contact groups) | [segments.md](references/segments.md) — broadcast targeting, contact grouping |From resend/resend-skills, MIT.
More from resend/resend-skills
- 0.796score
agent-email-inbox
resendOfficial
Use when building any system where email content triggers actions — AI agent inboxes, automated support handlers, email-to-task pipelines, or any workflow…
SkillAFreshness: A★ 205Claude Code +9 - 0.796score
resend-cli
resendOfficial
Operate the Resend platform from the terminal — send emails (including React Email .tsx templates via --react-email), manage domains, contacts, broadcasts…
SkillAFreshness: A★ 205Claude Code +9 - 0.796score
email-best-practices
ResendOfficial
Use when building email features, emails going to spam, high bounce rates, setting up SPF/DKIM/DMARC authentication, implementing email capture, ensuring…
SkillAFreshness: A★ 205Claude Code +9 - 0.692score
react-email
ResendOfficial
Use when building HTML email templates with React components, adding a visual email editor to an application using the React Email visual editor, rendering…
SkillCFreshness: C★ 205Claude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 205
- Forks
- 32
- Open issues
- 3
- Last commit (this folder)
- Oct 17, 2026 (11 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 3.16.0
- License
- MIT
- Repository
- github.com/resend/resend-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from resend
- 0.796score
agent-email-inbox
resendOfficial
Use when building any system where email content triggers actions — AI agent inboxes, automated support handlers, email-to-task pipelines, or any workflow…
SkillAFreshness: A★ 205Claude Code +9 - 0.796score
resend-cli
resendOfficial
Operate the Resend platform from the terminal — send emails (including React Email .tsx templates via --react-email), manage domains, contacts, broadcasts…
SkillAFreshness: A★ 205Claude Code +9 - 0.479score
resend
resend
Use when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates…
SkillCFreshness: CClaude Code +9
Cite this page
resend skill. Agent Mart. https://agentmart.dev/skills/resend-resend (last updated 2026-10-24)