resend expert

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

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "resend expert" with this command: npx skills add willsigmon/sigstack/willsigmon-sigstack-resend-expert

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

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

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

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

swiftlint-autofix

No summary provided by upstream source.

Repository SourceNeeds Review
General

bitrise expert

No summary provided by upstream source.

Repository SourceNeeds Review
General

fastlane expert

No summary provided by upstream source.

Repository SourceNeeds Review