Agent skill

Resend

by Asymmetric-al in Asymmetric-al/core

A skill your agent uses when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates, tracking delivery…

MITAuto-check passedBackend & APIs

Install Resend

skills CLI
$ npx skills add Asymmetric-al/core --skill resend -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Asymmetric-al/core resend --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Asymmetric-al/core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/resend .claude/skills/resend && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
resend
GitHub stars
381
Token cost
~3.6k tokens
SKILL.md length
1,078 words
Files
21 (incl. references)
Skills in repo
43
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates, tracking delivery…

  • Works in 3 steps: Set up inbound domain first (see… → Set up sending (see sending/overview.md) → Note: batch sending does NOT support…
  • Working with the Resend email API — sending transactional emails (single
  • SKILL.md covers Quick Send — Node.js, Quick Send — Python, Quick Receive (Node.js) and What Do You Need?, plus 6 more sections
  • Runs JavaScript scripts from its folder; calls npm, pip and go; needs RESEND_API_KEY and RESEND_WEBHOOK_SECRET

What it does

Resend is an agent skill from Asymmetric-al/core. 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, automations, events, viewing API request logs, 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…

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 22 other files, including reference files (for example `references/api-keys.md`, `references/automations.md` and `references/broadcasts.md`).

It sits in Backend & APIs, covering Webhooks and Transactional email. It works with Resend and Node.js. The repository describes itself as: A high-performance, enterprise-grade Next.js 16 application for mission-focused non-profit organizations. Built for high impact teams. The licence is MIT.

When your agent uses it

  • Working with the Resend email API — sending transactional emails (single
  • Receiving inbound emails via webhooks
  • Managing email templates
  • Tracking delivery events

Example prompts

  • “send an email with Resend”
  • “/resend”

Requirements

  • Python 3
  • Node.js
  • A credential in RESEND_API_KEY
  • A credential in RESEND_WEBHOOK_SECRET

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Set up inbound domain first (see receiving.md)
  2. Set up sending (see sending/overview.md)
  3. Note: batch sending does NOT support attachments or scheduling — use single sends when forwarding with attachments

What it can do on your machine

Read from SKILL.md and the folder at commit c30c8ff. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (JavaScript, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • npm
    • pip
    • go
    • gem
    • composer
    • cargo
    • dotnet

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • resend.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • RESEND_API_KEY
    • RESEND_WEBHOOK_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Resend loads about 3.6k tokens when it runs, and up to ~42k if it reads all its reference files. Until then it costs about 145 tokens; SKILL.md has 1,078 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~145
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~42k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Asymmetric-al/core at commit c30c8ff, republished under its MIT licence (© Asymmetric-al). 1,078 words, ~3,573 tokens.

Download SKILL.mdSave it as .claude/skills/resend/SKILL.md (or your agent's skills folder). This skill also uses 20 other files; get the full folder from GitHub.
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, automations, events, viewing API request logs, 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
metadata.version
3.10.0
metadata.homepage
https://resend.com/agent-skills
metadata.source
https://github.com/resend/resend-skills
references
sending, receiving.md, templates.md, webhooks.md, domains.md, contacts.md, broadcasts.md, api-keys.md, logs.md, contact-properties.md, segments.md, topics.md…

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
ChooseWhen
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)
Expiration24 hours
Max length256 characters
Same key + same payloadReturns original response without resending
Same key + different payloadReturns 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?

TaskReference
Send a single emailsending/overview.md — parameters, deliverability, testing
Send batch emailssending/overview.md → sending/batch-email-examples.md
Full SDK examples (Node.js, Python, Go, cURL)sending/single-email-examples.md
Idempotency, retries, error handlingsending/best-practices.md
Get, list, reschedule, cancel emails, retrieve metricssending/email-management.md
Receive inbound emailsreceiving.md — domain setup, webhooks, attachments
Manage templates (CRUD, variables)templates.md — lifecycle, aliases, pagination
Set up webhooks (events, verification)webhooks.md — verification, CRUD, retry schedule, IP allowlist
Manage domains (create, verify, claim, DNS)domains.md — regions, TLS, tracking, claiming, capabilities
Manage contacts (CRUD, properties)contacts.md — segments, topics, custom properties, bulk CSV import
Send broadcasts (marketing campaigns)broadcasts.md — lifecycle, scheduling, template variables
Manage API keysapi-keys.md — permission scoping, domain restrictions
View API request logslogs.md — list and retrieve API call history, debugging
Define contact propertiescontact-properties.md — custom fields for contacts
Manage segments (contact groups)segments.md — broadcast targeting, contact grouping
Manage topics (subscriptions)topics.md — opt-in/out preferences, broadcast filtering
Create automations (event-driven workflows)automations.md — steps, connections, runs, conditions
Define and send events (automation triggers)events.md — schemas, payloads, contact association
Install SDK (8+ languages)installation.md
Set up an AI agent inboxInstall the agent-email-inbox skill — covers security levels for untrusted input

SDK Version Requirements

Always install the latest SDK version. These are the minimum versions for full functionality (sending, receiving, webhook verification):

LanguagePackageMin VersionInstall
Node.jsresend>= 6.14.0npm install resend
Pythonresend>= 2.34.0pip install resend
Goresend-go/v3>= 3.11.0go get github.com/resend/resend-go/v3
Rubyresend>= 1.6.0gem install resend
PHPresend/resend-php>= 1.1.0composer require resend/resend-php
Rustresend-rs>= 0.26.1cargo add resend-rs
Javaresend-java>= 4.16.0See installation.md
.NETResend>= 0.2.1dotnet add package Resend

If the project already has a Resend SDK installed, check the version and upgrade if it's below the minimum. Older SDKs may be missing webhooks.verify(), emails.receiving.get(), or domains.claims.*.

See installation.md for full installation commands, language detection, and cURL fallback.

Common Setup

API Key

Store in environment variable — never hardcode:

bash
export RESEND_API_KEY=re_xxxxxxxxx

Get your key at resend.com/api-keys.

Detect Project Language

Check for these files: package.json (Node.js), requirements.txt/pyproject.toml (Python), go.mod (Go), Gemfile (Ruby), composer.json (PHP), Cargo.toml (Rust), pom.xml/build.gradle (Java), *.csproj (.NET).

Common Mistakes

#MistakeFix
1Retrying without idempotency keyAlways include idempotency key — prevents duplicate sends on retry. Format: <event-type>/<entity-id>
2Not verifying webhook signaturesAlways verify with resend.webhooks.verify() — unverified events can't be trusted
3Template variable name mismatchVariable names are case-sensitive — must match the template definition exactly. Use triple mustache {{{VAR}}} syntax
4Expecting email body in webhook payloadWebhooks contain metadata only — call resend.emails.receiving.get() for body content
5Using try/catch for Node.js SDK errorsSDK returns { data, error } — check error explicitly, don't wrap in try/catch
6Using batch for emails with attachmentsBatch doesn't support attachments — use single sends instead
7Testing with fake emails (test@gmail.com)Use delivered@resend.dev — fake addresses bounce and hurt reputation
8Sending with draft templateTemplates must be published before sending — call .publish() first
9html + template in same send callMutually exclusive — remove html/text/react when using template
10MX record not lowest priority for inboundEnsure Resend's MX has the lowest number (highest priority) or emails won't route
11403 when sending from resend.devThe default onboarding@resend.dev is a sandbox — it can only deliver to your Resend account email. Verify your own domain first
12403 domain mismatchThe from address domain must exactly match a verified domain. Verified send.acme.com but sending from user@acme.com will fail
13Calling Resend API from the browser (CORS)The API does not support CORS — this is intentional to protect your API key. Always call from server-side (API routes, serverless functions)
14401 restricted_api_keyA sending-only API key was used on a non-sending endpoint (domains, contacts, etc.). Create a full-access key instead
Show full SKILL.md (330 more words)Show less

Cross-Cutting Concerns

Send + Receive Together

Auto-replies, email forwarding, or any receive-then-send workflow requires both capabilities:

  1. Set up inbound domain first (see receiving.md)
  2. Set up sending (see sending/overview.md)
  3. Note: batch sending does NOT support attachments or scheduling — use single sends when forwarding with attachments
AI Agent Inbox

If your system processes untrusted email content and takes actions (refunds, database changes, forwarding), install the agent-email-inbox skill. This applies whether or not AI is involved — any system interpreting freeform email content from external senders needs security measures.

Marketing Emails

The sending capabilities in this skill are for transactional email (receipts, confirmations, notifications). For marketing campaigns to large subscriber lists with unsubscribe links and engagement tracking, use Resend Broadcasts — see broadcasts.md for the API.

Domain Warm-up

New domains must gradually increase sending volume. Day 1 limit: ~150 emails (new domain) or ~1,000 (existing domain). See the warm-up schedule in sending/overview.md.

Testing

Never test with fake addresses at real email providers (test@gmail.com, fake@outlook.com) — they bounce and destroy sender reputation.

AddressResult
delivered@resend.devSimulates successful delivery
bounced@resend.devSimulates hard bounce
complained@resend.devSimulates spam complaint
Suppression List

Resend automatically suppresses hard-bounced and spam-complained addresses. Sending to suppressed addresses fires the email.suppressed webhook event instead of attempting delivery. Manage in Dashboard → Suppressions.

Webhook Event Types
EventTrigger
email.sentAPI request successful
email.deliveredReached recipient's mail server
email.bouncedPermanently rejected (hard bounce)
email.complainedRecipient marked as spam
email.opened / email.clickedRecipient engagement
email.delivery_delayedSoft bounce, Resend retries
email.receivedInbound email arrived
domain.* / contact.*Domain/contact changes

See webhooks.md for full details, signature verification, and retry schedule.

Error Handling Quick Reference

CodeAction
400, 422Fix request parameters, don't retry
401Check API key — restricted_api_key means sending-only key used on non-sending endpoint
403Verify domain ownership — common causes: resend.dev sandbox, from domain mismatch, unverified domain
409Idempotency conflict — use new key or fix payload
429Rate limited — retry with exponential backoff (default rate limit: 2 req/s)
500Server error — retry with exponential backoff

Resources

© Asymmetric-al, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 20 other files (references) in .agents/skills/resend of Asymmetric-al/core.

  • SKILL.md
  • references/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/installation.md
  • references/logs.md
  • references/receiving.md
  • references/segments.md
  • references/sending/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/templates.md
  • … and 2 more

Open the folder on GitHubat commit c30c8ff

Compare with similar skills

Resend next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Resend compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Resend this skillAsymmetric-al/core381—~3.6kAutomated safety check: PassMIT
Pp Resendmvanhorn/printing-press-library2.1k—~4.3kAutomated safety check: NotesApache-2.0
Email Best Practicesviclafouch/meme-studio1107 repos~787Automated safety check: PassNone
Send Emailviclafouch/meme-studio1102 repos~3.8kAutomated safety check: PassNone
Cloudflare Email Servicehodgef/apiker1272 repos~2kAutomated safety check: PassMIT
Loops APIopeninary/openinary412—~1.1kAutomated safety check: PassAGPL-3.0

Similar skills

  • Pp Resend

    mvanhorn/printing-press-library

    The full Resend API (100 endpoints across emails, broadcasts, audiences, contacts, domains, templates, webhooks)...

    2.1k GitHub stars~4.3k tokensUpdated yesterday
    Backend & APIsAuto-check: notes
  • Email Best Practices

    viclafouch/meme-studio

    A skill your agent uses when building email features, emails going to spam, high bounce rates, setting up SPF/DKIM/DMARC authentication, implementing email capture, ensuring compliance (CAN-SPAM…

    110 GitHub starsUsed in 7 repos~787 tokens
    Backend & APIsAuto-check passed
  • Send Email

    viclafouch/meme-studio

    A skill your agent uses when sending transactional emails (welcome messages, order confirmations, password resets, receipts), notifications, or bulk emails via Resend API.

    110 GitHub starsUsed in 2 repos~3.8k tokens
    Backend & APIsAuto-check passed
  • Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing).

    127 GitHub starsUsed in 2 repos~2k tokens
    Backend & APIsAuto-check passed
  • Loops API

    openinary/openinary

    A skill your agent uses whenever the user wants to integrate Loops from application code, backend services, webhook handlers, or server-side automation.

    412 GitHub stars~1.1k tokensUpdated 6 days ago
    Backend & APIsAuto-check passed
  • Better Notify

    better-notify/better-notify

    End-to-end typed notification infrastructure for Node.js — typed catalog of email, SMS, push, web push, WhatsApp, Slack, Discord, Telegram, and GitHub notifications with provider-agnostic transports.

    313 GitHub stars~783 tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed

More from Asymmetric-al/core

All 43 skills in this repo
  • Idempotency Handling

    Asymmetric-al/core

    Implement idempotency keys and handling to ensure operations can be safely retried without duplicate effects.

    381 GitHub stars~867 tokensUpdated yesterday
    Auto-check passed
  • Accessibility Review

    Asymmetric-al/core

    Audit and fix accessibility in Core UI. An agent skill from Asymmetric-al/core.

    381 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Agent Email Inbox

    Asymmetric-al/core

    A skill your agent uses when building any system where email content triggers actions — AI agent inboxes, automated support handlers, email-to-task pipelines, or any workflow processing untrusted…

    381 GitHub stars~4.1k tokensUpdated yesterday
    Auto-check: notes
  • Components Build

    Asymmetric-al/core

    Build modern, composable, and accessible React UI components following the components.build specification.

    381 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Create Agent

    Asymmetric-al/core

    Guides a one-question-at-a-time design interview, captures alignment in agent/EVE-BRIEF.md, then scaffolds and implements a runnable eve agent with verbose teaching comments.

    381 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check: notes
  • Emil Design Engineering

    Asymmetric-al/core

    Design engineering principles and patterns for building polished, accessible web interfaces.

    381 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Resend

What does Resend do?

A skill your agent uses when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates, tracking delivery…. Resend is an agent skill from Asymmetric-al/core. 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, automations, events, viewing API request logs, or setting up the Resend SDK.

When should I use Resend?

Resend fits situations like: working with the Resend email API — sending transactional emails (single; receiving inbound emails via webhooks; managing email templates; tracking delivery events.

How do I install Resend in Claude Code?

Run `npx skills add Asymmetric-al/core --skill resend -a claude-code`. Or copy the skill folder (.agents/skills/resend in Asymmetric-al/core) into .claude/skills/resend in your project. Claude Code loads it when a task matches its description.

How do I install Resend in Codex?

Run `npx skills add Asymmetric-al/core --skill resend -a codex`. Or copy the skill folder (.agents/skills/resend in Asymmetric-al/core) into .agents/skills/resend in your project. Codex loads it when a task matches its description.

Can I use Resend in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Asymmetric-al/core --skill resend -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/resend, .gemini/skills/resend, .github/skills/resend and .opencode/skills/resend in your project.

What does Resend need to run?

Going by SKILL.md and its folder, Resend needs JavaScript for the scripts in its folder, the command-line tools its instructions call (npm, pip, go, gem, composer and cargo) and credentials named RESEND_API_KEY and RESEND_WEBHOOK_SECRET. Our summary lists: Python 3; Node.js; A credential in RESEND_API_KEY; A credential in RESEND_WEBHOOK_SECRET.

Does Resend access the network?

SKILL.md names 1 domain. As links in the text: resend.com. This is read from the text; nothing was executed.

Is Resend safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Resend use?

Resend is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Resend use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 38k tokens, read only when the agent opens those files.

What are the alternatives to Resend?

Skills that share tags, products or a category with Resend: Pp Resend (mvanhorn/printing-press-library, 2.1k stars), Email Best Practices (viclafouch/meme-studio, 110 stars), Send Email (viclafouch/meme-studio, 110 stars) and Cloudflare Email Service (hodgef/apiker, 127 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Resend?

Asymmetric-al (a GitHub organization) maintains it in Asymmetric-al/core, which has 381 GitHub stars. The repository holds 43 skills in this directory. The repository was last updated on October 9, 2026.

Source: Asymmetric-al/core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.