Resend API
Use this skill for tasks that specifically involve Resend's API, SDKs, webhook model, receiving
API, or official agent-facing tooling. Do not use it for generic email-platform advice unless
the user is clearly working with Resend.
Read only what you need
Start with the smallest relevant file instead of loading everything.
references/core-reference.md — auth, headers, rate limits, pagination, idempotency, error triage
references/sending-and-templates.md — transactional sends, batch sends, scheduling, templates
references/domains-and-api-keys.md — verified domains, DNS records, regions, tracking, key scope
references/contacts-broadcasts-and-subscriptions.md — contacts, segments, topics, properties, broadcasts
references/webhooks-inbound-and-beta.md — webhook verification, receiving, replay/retry, workflows, events
assets/endpoint-catalog.json — compact stable-endpoint catalogue plus beta notes
assets/resend-openapi.yaml — raw stable OpenAPI snapshot for deeper schema inspection
assets/*.json — reusable payload templates for common operations
Quick routing
Choose the product primitive before generating code or making live calls.
- Single transactional email →
POST /emails
- Many distinct sends in one call →
POST /emails/batch
- Campaign to a segment or list → Broadcasts + Segments + Topics
- Reusable content → Templates
- Verified sender domain or receiving domain → Domains
- Scoped credentials → API Keys
- Subscriber model and profile data → Contacts, Topics, Contact Properties, Segments
- Inbound email processing → Receiving Emails API +
email.received webhook
- Event delivery to your app → Webhooks
- Custom event-driven automations → Workflows + Events, but treat them as beta/private alpha
Workflow
1) Identify the job type
Classify the request first:
- Code generation — add or edit Resend integration code in an existing project
- Live API execution — make a real call against a Resend account
- Debugging — explain an error, fix a payload, or diagnose a failed flow
- Architecture — choose between Resend features and design the right flow
2) Choose the best execution surface
Prefer the most native surface for the user's environment:
- If the project already uses an official Resend SDK, generate or modify code in that language.
- If the user wants a reproducible example or is stack-agnostic, prefer raw REST or cURL.
- If the environment already has the official Resend MCP server installed, it is fine to use it
for live operations, but still follow the payload and workflow guidance in this skill.
3) Before any live request
Always do these checks for real API calls:
- Load
references/core-reference.md.
- Confirm
RESEND_API_KEY is present.
- Use
python3 scripts/resend_api.py schema METHOD PATH if you need an offline schema summary.
- Use
python3 scripts/resend_api.py request ... or an equivalent HTTP client for the live call.
- Include
Authorization: Bearer ... and a User-Agent.
- For
POST /emails and POST /emails/batch, add an Idempotency-Key before any retry.
- Avoid automatic retries on unsafe mutations unless idempotency is in place.
4) Generate code or payloads
When writing code or examples:
- Keep them minimal, runnable, and explicit about required environment variables.
- Use absolute ISO 8601 timestamps for scheduling.
- Call out feature limits that affect the request shape.
- Mention the exact endpoint(s), payload keys, and next verification step.
- Use the sample payload files in
assets/ as a starting point when helpful.
5) Debug in the right order
When something fails, inspect these first:
- Wrong or missing API key
- Missing
User-Agent on raw HTTP
- Unverified or test-only sender domain
- Retried send without idempotency
- Invalid attachment or from-address format
- Batch limitations (no attachments, no scheduling)
- Template not published before send
- Expecting full inbound message content directly inside the webhook payload
6) Special handling rules
- Scheduling: use an exact timestamp and mention the 72-hour limit.
- Templates: publish before sending; if a template is used, do not also send raw
html or text.
- Subscriptions: prefer Topics + Segments over deprecated Audiences.
- Receiving: treat the webhook as the trigger; fetch the full message and attachments via the
receiving endpoints.
- Webhooks: verify the signature against the raw request body before parsing JSON.
- Workflows/Events: explicitly label them as beta/private alpha and confirm availability before
proposing them as production-critical building blocks.
Bundled tools
scripts/resend_api.py
The bundled helper script is designed for agents:
catalog — list stable endpoints from the bundled catalogue
schema — show a compact schema/parameter summary for an endpoint
request — make a live request with auth, user-agent, JSON parsing, optional pagination, and
cautious retry behaviour
Examples:
python3 scripts/resend_api.py catalog --group Emails
python3 scripts/resend_api.py schema POST /emails
python3 scripts/resend_api.py request GET /domains
python3 scripts/resend_api.py request POST /emails --json-file assets/send-email.json --idempotency-key welcome-001
python3 scripts/resend_api.py request GET /emails --paginate --page-limit 3
Common pitfalls
- Using
/emails/batch when attachments or scheduling are required
- Forgetting that
/emails is the right primitive for one logical email, even when to is an array
- Generating template-send code before the template has been published
- Using deprecated Audiences for new subscriber flows
- Expecting inbound webhooks to include the full raw message or attachment bytes
- Treating beta workflow/event APIs as stable
- Ignoring the default per-team rate limit and flooding the API with parallel requests
Output expectations
When this skill is active, return:
- The exact endpoint(s) involved
- The minimal payload or code needed
- The operational caveats that matter for this task
- The next verification step, such as listing resources, confirming DNS records, or replaying
a webhook
Example prompts this skill should handle
- “Add Resend to this Next.js app and send a scheduled password-reset email”
- “Why is my raw Resend API call returning 403?”
- “Create a verified sending domain in eu-west-1 and turn receiving on”
- “Set up topic-based newsletter subscriptions with contacts and broadcasts”
- “Build an inbound email webhook for support@”
- “Should I use batch sends, broadcasts, or templates for this flow?”
- “Can Resend workflows wait for a custom event and then send follow-ups?”
1---2name: resend-api3description: Use this skill when the user wants to integrate with, call, debug, or operate the Resend API or official SDKs/MCP tooling. Covers sending and scheduling emails, batch sends, templates, domains and DNS verification, API keys, contacts, segments, topics, broadcasts, inbound email, webhooks, receiving attachments, and Resend workflows/events. Also use it when the user mentions Resend, resend.emails.send, verified domains, email.received, broadcast campaigns, template publishing, or needs help choosing between single email, batch, broadcast, inbound, or workflow patterns.4---5
6
7# Resend API
8
9Use this skill for tasks that specifically involve Resend's API, SDKs, webhook model, receiving
10API, or official agent-facing tooling. Do **not** use it for generic email-platform advice unless
11the user is clearly working with Resend.
12
13## Read only what you need
14
15Start with the smallest relevant file instead of loading everything.
16
17- `references/core-reference.md` — auth, headers, rate limits, pagination, idempotency, error triage
18- `references/sending-and-templates.md` — transactional sends, batch sends, scheduling, templates
19- `references/domains-and-api-keys.md` — verified domains, DNS records, regions, tracking, key scope
20- `references/contacts-broadcasts-and-subscriptions.md` — contacts, segments, topics, properties, broadcasts
21- `references/webhooks-inbound-and-beta.md` — webhook verification, receiving, replay/retry, workflows, events
22- `assets/endpoint-catalog.json` — compact stable-endpoint catalogue plus beta notes
23- `assets/resend-openapi.yaml` — raw stable OpenAPI snapshot for deeper schema inspection
24- `assets/*.json` — reusable payload templates for common operations
25
26## Quick routing
27
28Choose the product primitive before generating code or making live calls.
29
301. **Single transactional email** → `POST /emails`
312. **Many distinct sends in one call** → `POST /emails/batch`
323. **Campaign to a segment or list** → Broadcasts + Segments + Topics
334. **Reusable content** → Templates
345. **Verified sender domain or receiving domain** → Domains
356. **Scoped credentials** → API Keys
367. **Subscriber model and profile data** → Contacts, Topics, Contact Properties, Segments
378. **Inbound email processing** → Receiving Emails API + `email.received` webhook
389. **Event delivery to your app** → Webhooks
3910. **Custom event-driven automations** → Workflows + Events, but treat them as beta/private alpha
40
41## Workflow
42
43### 1) Identify the job type
44
45Classify the request first:
46
47- **Code generation** — add or edit Resend integration code in an existing project
48- **Live API execution** — make a real call against a Resend account
49- **Debugging** — explain an error, fix a payload, or diagnose a failed flow
50- **Architecture** — choose between Resend features and design the right flow
51
52### 2) Choose the best execution surface
53
54Prefer the most native surface for the user's environment:
55
56- If the project already uses an official Resend SDK, generate or modify code in that language.
57- If the user wants a reproducible example or is stack-agnostic, prefer raw REST or cURL.
58- If the environment already has the official Resend MCP server installed, it is fine to use it
59 for live operations, but still follow the payload and workflow guidance in this skill.
60
61### 3) Before any live request
62
63Always do these checks for real API calls:
64
651. Load `references/core-reference.md`.
662. Confirm `RESEND_API_KEY` is present.
673. Use `python3 scripts/resend_api.py schema METHOD PATH` if you need an offline schema summary.
684. Use `python3 scripts/resend_api.py request ...` or an equivalent HTTP client for the live call.
695. Include `Authorization: Bearer ...` and a `User-Agent`.
706. For `POST /emails` and `POST /emails/batch`, add an `Idempotency-Key` before any retry.
717. Avoid automatic retries on unsafe mutations unless idempotency is in place.
72
73### 4) Generate code or payloads
74
75When writing code or examples:
76
77- Keep them minimal, runnable, and explicit about required environment variables.
78- Use absolute ISO 8601 timestamps for scheduling.
79- Call out feature limits that affect the request shape.
80- Mention the exact endpoint(s), payload keys, and next verification step.
81- Use the sample payload files in `assets/` as a starting point when helpful.
82
83### 5) Debug in the right order
84
85When something fails, inspect these first:
86
871. Wrong or missing API key
882. Missing `User-Agent` on raw HTTP
893. Unverified or test-only sender domain
904. Retried send without idempotency
915. Invalid attachment or from-address format
926. Batch limitations (no attachments, no scheduling)
937. Template not published before send
948. Expecting full inbound message content directly inside the webhook payload
95
96### 6) Special handling rules
97
98- **Scheduling**: use an exact timestamp and mention the 72-hour limit.
99- **Templates**: publish before sending; if a template is used, do not also send raw `html` or `text`.
100- **Subscriptions**: prefer Topics + Segments over deprecated Audiences.
101- **Receiving**: treat the webhook as the trigger; fetch the full message and attachments via the
102 receiving endpoints.
103- **Webhooks**: verify the signature against the raw request body before parsing JSON.
104- **Workflows/Events**: explicitly label them as beta/private alpha and confirm availability before
105 proposing them as production-critical building blocks.
106
107## Bundled tools
108
109### `scripts/resend_api.py`
110
111The bundled helper script is designed for agents:
112
113- `catalog` — list stable endpoints from the bundled catalogue
114- `schema` — show a compact schema/parameter summary for an endpoint
115- `request` — make a live request with auth, user-agent, JSON parsing, optional pagination, and
116 cautious retry behaviour
117
118Examples:
119
120```bash
121python3 scripts/resend_api.py catalog --group Emails
122python3 scripts/resend_api.py schema POST /emails
123python3 scripts/resend_api.py request GET /domains
124python3 scripts/resend_api.py request POST /emails --json-file assets/send-email.json --idempotency-key welcome-001
125python3 scripts/resend_api.py request GET /emails --paginate --page-limit 3
126```
127
128## Common pitfalls
129
130- Using `/emails/batch` when attachments or scheduling are required
131- Forgetting that `/emails` is the right primitive for one logical email, even when `to` is an array
132- Generating template-send code before the template has been published
133- Using deprecated Audiences for new subscriber flows
134- Expecting inbound webhooks to include the full raw message or attachment bytes
135- Treating beta workflow/event APIs as stable
136- Ignoring the default per-team rate limit and flooding the API with parallel requests
137
138## Output expectations
139
140When this skill is active, return:
141
1421. The **exact endpoint(s)** involved
1432. The **minimal payload or code** needed
1443. The **operational caveats** that matter for this task
1454. The **next verification step**, such as listing resources, confirming DNS records, or replaying
146 a webhook
147
148## Example prompts this skill should handle
149
150- “Add Resend to this Next.js app and send a scheduled password-reset email”
151- “Why is my raw Resend API call returning 403?”
152- “Create a verified sending domain in eu-west-1 and turn receiving on”
153- “Set up topic-based newsletter subscriptions with contacts and broadcasts”
154- “Build an inbound email webhook for support@”
155- “Should I use batch sends, broadcasts, or templates for this flow?”
156- “Can Resend workflows wait for a custom event and then send follow-ups?”