Overview
Resend is a developer-first transactional email API – modern SDK surface, React-based templating, and a clean dashboard. The Automize connector covers send (single, batch), broadcasts, audiences, contacts, domains, and email management (get / update / cancel scheduled).
- Regions: Single global API at api.resend.com. Sending IPs are US-based; EU residency is on the roadmap but not yet GA.
- Plans: Free tier: 100 emails/day, 3000/month, sending domain limited to a Resend test domain (onboarding@resend.dev). Paid plans unlock custom domains, broadcasts, audiences, dedicated IPs.
Setting up the connection
Auth type: Bearer Token.
- In Resend → API Keys, click Create API Key. Pick permissions: 'Full access' (sending + management) or 'Sending access' (send-only, no domain/contact CRUD).
- Copy the key (re_...) – shown once. Paste as the API token. Connector sends Authorization: Bearer <key>.
- For production, verify a sending domain (Domains → Add) – adds SPF/DKIM TXT records to your DNS. Onboarding can take 5-30 min for DNS propagation.
Find your credentials at https://resend.com/api-keys.
Rate limits
10 req/sec by default; raised on request for high-volume senders. Batch send (up to 100 emails / call) doesn't count against the per-second cap individually. 429 returns Retry-After; connector backs off.
Data model
Resend's sending graph splits transactional from broadcast:
Account
├─ Domains (verified via SPF + DKIM + MX)
│ └─ Region (us-east-1 default)
├─ Emails (transactional sends, individually addressed)
│ └─ scheduled_at? (future-dated, cancellable)
├─ Audiences (lists for broadcasts)
│ └─ Contacts
└─ Broadcasts (one-to-many marketing, scheduled or immediate)
ID prefixes:
email_id UUID prefix-free; returned on Send + visible in webhooks
audience_id UUID for a list
contact_id UUID for a member of an audience (scoped per audience)
broadcast_id UUID for a staged or sent broadcast
domain_id UUID for a sending domain
Status flow for emails:
queued → sent → delivered → opened? → clicked?
↘ bounced (hard|soft)
↘ complained (recipient marked spam)
All five terminal events fire as webhooks if configured. Suppression
is automatic on hard bounce + complaint – no API surface to remove.Available operations
17 operations available. Click any row to jump to its detail.
| Operation | Category | What it does |
|---|---|---|
| Cancel Scheduled Email | General | Cancel an email scheduled for future delivery |
| Create Audience | General | Create a new audience |
| Create Broadcast | General | Create a broadcast email campaign |
| Create Contact | General | Add a contact to an audience |
| Create Domain | General | Add a sending domain |
| Delete Audience | General | Delete an audience |
| Delete Contact | General | Delete a contact from an audience |
| Get Email | General | Get a single email by id |
| List Audiences | General | List all audiences |
| List Broadcasts | General | List all broadcasts |
| List Contacts | General | List contacts in an audience |
| List Domains | General | List verified sending domains |
| Send Batch | General | Send up to 100 emails in one call |
| Send Broadcast | General | Send (or schedule) a broadcast |
| Send Email | General | Send a single email |
| Update Scheduled Email | General | Update a scheduled email's send time |
| Verify Domain | General | Trigger DNS verification on a domain |
Operations
Cancel Scheduled Email
Cancel an email scheduled for future delivery
| Parameter | Required | Type | Description |
|---|---|---|---|
Email Id email_id | Yes | text |
Tips
- Only cancels scheduled (future) emails. Already-sent emails can't be unsent – Resend has no recall feature.
Create Audience
Create a new audience
| Parameter | Required | Type | Description |
|---|---|---|---|
Name name | No | text |
Tips
- Audience is a contact list. After create, add contacts via Create Contact with audience_id.
Create Broadcast
Create a broadcast email campaign
| Parameter | Required | Type | Description |
|---|---|---|---|
Audience Id audience_id | No | text | |
From from | No | text | |
Subject subject | No | text | |
Html html | No | text | |
Text text | No | text | |
Name name | No | text | |
Reply To reply_to | No | text |
Tips
- Broadcast = one-time blast to an audience (list of contacts). audience_id + from + subject + html/text.
- Send Broadcast triggers the actual send. Create Broadcast just stages it.
Create Contact
Add a contact to an audience
| Parameter | Required | Type | Description |
|---|---|---|---|
Audience Id audience_id | Yes | text | |
Email email | No | text | |
First Name first_name | No | text | |
Last Name last_name | No | text | |
Unsubscribed unsubscribed | No | text |
Tips
- email + audience_id + (optional) first_name, last_name, unsubscribed. Duplicate email in the same audience returns 409 – wrap with a check or accept and ignore.
Create Domain
Add a sending domain
| Parameter | Required | Type | Description |
|---|---|---|---|
Name name | No | text | |
Region region | No | text |
Tips
- name=yourcompany.com + region=us-east-1 (default). Returns SPF + DKIM TXT records – add to your DNS and call Verify Domain.
- Custom-return-path subdomain (e.g. bounce.yourcompany.com) is set up automatically for paid plans.
Delete Audience
Delete an audience
| Parameter | Required | Type | Description |
|---|---|---|---|
Audience Id audience_id | Yes | text |
Tips
- DELETE /audiences/{audience_id} – removes the list and orphans its contacts (contacts persist account-wide for billing/reconciliation).
- Doesn't cancel any pending broadcasts that reference this audience – those return 'audience not found' at send time.
Delete Contact
Delete a contact from an audience
| Parameter | Required | Type | Description |
|---|---|---|---|
Audience Id audience_id | Yes | text | |
Contact Id contact_id | Yes | text |
Tips
- DELETE /audiences/{audience_id}/contacts/{id_or_email} – removes the contact from this audience only. Same email in another audience is unaffected.
- GDPR erasure: delete from every audience + suppress for future sends. Resend doesn't expose an account-wide 'forget user' yet – track erasure on your side.
Get Email
Get a single email by id
| Parameter | Required | Type | Description |
|---|---|---|---|
Email Id email_id | Yes | text |
Tips
- GET /emails/{email_id} – returns the original send payload + last_event (queued|sent|delivered|bounced|complained|opened|clicked).
- Useful for status look-ups when you didn't subscribe to webhooks. Retained ~7 days; older emails return 404.
List Audiences
List all audiences
No input parameters.
Tips
- Returns marketing lists. Each audience has a contact_count snapshot – refresh by re-listing if you've added contacts.
List Broadcasts
List all broadcasts
No input parameters.
Tips
- Staged + sent broadcasts. status: draft → queued → sent → (failed). Includes sent_at + audience_id for each.
List Contacts
List contacts in an audience
| Parameter | Required | Type | Description |
|---|---|---|---|
Audience Id audience_id | Yes | text |
Tips
- Per-audience listing. GET /audiences/{audience_id}/contacts. Unsubscribed contacts are included unless you filter client-side by unsubscribed=false.
List Domains
List verified sending domains
No input parameters.
Tips
- GET /domains – every sending domain on the account + verification status per record (SPF, DKIM, MX, DMARC, return_path).
- Status: not_started → pending → verified → failed. Region (us-east-1, etc.) is per-domain.
Send Batch
Send up to 100 emails in one call
No input parameters.
Tips
- Up to 100 emails / call. Each entry is a full Send Email payload (from, to, subject, html/text).
- Returns an array of email_ids – same order as input. Each email is independent: one failure doesn't abort the rest.
Send Broadcast
Send (or schedule) a broadcast
| Parameter | Required | Type | Description |
|---|---|---|---|
Broadcast Id broadcast_id | Yes | text | |
Scheduled At scheduled_at | No | text |
Tips
- POST /broadcasts/{broadcast_id}/send – fires the actual send to the audience. scheduled_at (ISO 8601) future-dates it.
- Idempotent in the sense that sending an already-sent broadcast 409s – Resend won't re-blast the same broadcast.
Send Email
Send a single email
| Parameter | Required | Type | Description |
|---|---|---|---|
From from | No | text | |
To to | No | text | |
Subject subject | No | text | |
Html html | No | text | |
Text text | No | text | |
Cc cc | No | text | |
Bcc bcc | No | text | |
Reply To reply_to | No | text | |
Attachments attachments | No | text | |
Tags tags | No | text | |
Headers headers | No | text | |
Scheduled At scheduled_at | No | text |
Tips
- Required: from (verified domain or @resend.dev), to (string or array), subject, plus html OR text.
- react=<React component> works in the official SDK but Resend's REST surface accepts pre-rendered HTML only – render on your side and pass html.
- scheduled_at: ISO 8601 timestamp to schedule send. Returns email_id; cancellable via Cancel Email up to the scheduled time.
- tags=[{name,value}] surface in webhooks + the dashboard. Use them for routing analytics downstream.
Errors
403– Sender domain not verified, or you're sending to a recipient outside your verified domain on the test (onboarding@resend.dev) sender. Verify the domain or send to your own address.422– Missing required field (from / to / subject / body).
Update Scheduled Email
Update a scheduled email's send time
| Parameter | Required | Type | Description |
|---|---|---|---|
Email Id email_id | Yes | text | |
Scheduled At scheduled_at | No | text |
Tips
- Only valid for scheduled (future) emails. PATCH the scheduled_at to reschedule, or change html/text/subject before send.
- Once an email's status flips past 'queued', updates 400.
Verify Domain
Trigger DNS verification on a domain
| Parameter | Required | Type | Description |
|---|---|---|---|
Domain Id domain_id | Yes | text |
Tips
- Triggers Resend's DNS check. Returns status='not_started' | 'pending' | 'verified' | 'failed'. Verification is per-record (SPF/DKIM/DMARC), so a partial pass is possible.
FAQ
- Sending domain – really need it?
- For production yes. Resend's test domain (onboarding@resend.dev) only sends to your own verified email – useful for ad-hoc tests, blocked for real recipients. Verify a custom domain before any user-facing send.
- React Email templating – do I render server-side or send the JSX?
- Render server-side. The official SDK does this for you via the react: prop. Over REST, you pass pre-rendered html. Either way the API never sees the JSX.
- Bounces and complaints – auto-suppress?
- Hard bounces and spam complaints add the recipient to the suppression list automatically. List via the dashboard (no API surface for suppressions yet).
- Broadcasts vs Send Email loop – when is each right?
- Broadcasts: announcements/newsletters to an existing audience (1 → N). Send Email / Batch: per-user transactional (signup welcome, password reset). Don't loop Send Email for a 10k blast – use Broadcast.
- Webhooks?
- Resend webhooks fire on send/delivered/bounced/complained/opened/clicked. Configure under Webhooks → Add endpoint. Verify signatures via Svix-style HMAC – the secret is shown on creation.