Resend integration

Transactional email: send, batch send, schedule, broadcasts, contacts, audiences, domains

Help CentreConnectors

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.

  1. In Resend → API Keys, click Create API Key. Pick permissions: 'Full access' (sending + management) or 'Sending access' (send-only, no domain/contact CRUD).
  2. Copy the key (re_...) – shown once. Paste as the API token. Connector sends Authorization: Bearer <key>.
  3. 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.

OperationCategoryWhat it does
Cancel Scheduled EmailGeneralCancel an email scheduled for future delivery
Create AudienceGeneralCreate a new audience
Create BroadcastGeneralCreate a broadcast email campaign
Create ContactGeneralAdd a contact to an audience
Create DomainGeneralAdd a sending domain
Delete AudienceGeneralDelete an audience
Delete ContactGeneralDelete a contact from an audience
Get EmailGeneralGet a single email by id
List AudiencesGeneralList all audiences
List BroadcastsGeneralList all broadcasts
List ContactsGeneralList contacts in an audience
List DomainsGeneralList verified sending domains
Send BatchGeneralSend up to 100 emails in one call
Send BroadcastGeneralSend (or schedule) a broadcast
Send EmailGeneralSend a single email
Update Scheduled EmailGeneralUpdate a scheduled email's send time
Verify DomainGeneralTrigger DNS verification on a domain

Operations

Cancel Scheduled Email

Cancel an email scheduled for future delivery

ParameterRequiredTypeDescription
Email Id email_idYestext

Tips

  • Only cancels scheduled (future) emails. Already-sent emails can't be unsent – Resend has no recall feature.

Create Audience

Create a new audience

ParameterRequiredTypeDescription
Name nameNotext

Tips

  • Audience is a contact list. After create, add contacts via Create Contact with audience_id.

Create Broadcast

Create a broadcast email campaign

ParameterRequiredTypeDescription
Audience Id audience_idNotext
From fromNotext
Subject subjectNotext
Html htmlNotext
Text textNotext
Name nameNotext
Reply To reply_toNotext

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

ParameterRequiredTypeDescription
Audience Id audience_idYestext
Email emailNotext
First Name first_nameNotext
Last Name last_nameNotext
Unsubscribed unsubscribedNotext

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

ParameterRequiredTypeDescription
Name nameNotext
Region regionNotext

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

ParameterRequiredTypeDescription
Audience Id audience_idYestext

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

ParameterRequiredTypeDescription
Audience Id audience_idYestext
Contact Id contact_idYestext

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

ParameterRequiredTypeDescription
Email Id email_idYestext

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

ParameterRequiredTypeDescription
Audience Id audience_idYestext

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

ParameterRequiredTypeDescription
Broadcast Id broadcast_idYestext
Scheduled At scheduled_atNotext

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

ParameterRequiredTypeDescription
From fromNotext
To toNotext
Subject subjectNotext
Html htmlNotext
Text textNotext
Cc ccNotext
Bcc bccNotext
Reply To reply_toNotext
Attachments attachmentsNotext
Tags tagsNotext
Headers headersNotext
Scheduled At scheduled_atNotext

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

ParameterRequiredTypeDescription
Email Id email_idYestext
Scheduled At scheduled_atNotext

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

ParameterRequiredTypeDescription
Domain Id domain_idYestext

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.

Related connectors

See it working on your own data

Everything documented here ships with the platform – try the document tools free, or go live in 7 days.