FlowKit

Connecting Resend to n8n: sending transactional emails and tracking status via webhook

Published 18 August 2026 · 5 min read

n8n's Send Email node works over SMTP: it just needs a server and credentials, but it says nothing about what happens to the email once it's sent — delivered, bounced, marked as spam? Total silence, until a customer reports never receiving anything. Resend approaches the problem from the other end: a simple REST API for sending, paired with webhooks that notify n8n on every status change. Enough to build a transactional email pipeline (order confirmation, invoice, password reset, alert) that knows what became of each message instead of just hoping it arrived.

Generating an API key and verifying a domain

A free Resend account is enough to get started: the dashboard lets you create an API Key in a few seconds, prefixed re_. For testing, sending from the shared domain onboarding@resend.dev works with zero configuration — handy for validating a workflow before wiring it into production.

For real use, verifying your own domain is essential: under Domains, add your sending domain and paste the provided DNS records (an SPF record, a DKIM key, and a recommended DMARC record) into your registrar. This step isn't a formality — a study by Tatang, Zettl, and Holz, published at the RAID conference in 2021 ("The Evolution of DNS-based Email Authentication: Measuring Adoption and Finding Flaws", see on Google Scholar), shows that adoption of SPF, DKIM, and DMARC remains highly uneven across the web, and that domains correctly configured on all three protocols are markedly less exposed to spoofing and to being flagged as spam by major mail providers' filters. Without these records, even flawless email content often ends up in the junk folder.

Sending an email from n8n

Once the domain is verified, sending is a single HTTP Request node:

  • Method: POST
  • URL: https://api.resend.com/emails
  • Authentication: an Header Auth credential, Authorization header, value Bearer re_your_api_key
  • JSON body: from (an address on your verified domain, with an optional name: "Shop <orders@yourdomain.com>"), to, subject, and html (or text) for the content

No community node is needed — the Resend API is intentionally minimal, and a plain HTTP Request, as detailed in our guide to the HTTP Request node for driving a REST API, covers the essentials. For richer emails (a PDF invoice attached, a cart-abandonment reminder), the attachments field accepts base64-encoded content, generated upstream by a Code node or pulled from a PDF invoice generated in the same workflow.

Unlike the SMTP-based Send Email node, compared in detail in our dedicated SMTP sending guide, the Resend API immediately returns an email id in the response — worth keeping around to later match each webhook event back to the original send.

A concrete use case: order confirmation with tracking

An e-commerce scenario shows the API + webhook combo at its best. The workflow described in our guide to automating e-commerce orders fires a confirmation email as soon as a Shopify or WooCommerce order is created. With Resend:

  1. The Shopify Webhook Trigger (see our Shopify connection guide) receives the new order.
  2. An HTTP Request node calls POST /emails with the order details, and stores the returned id in a Supabase table, alongside the order number.
  3. A second Webhook Trigger, this time on Resend's side, listens for email.delivered, email.bounced, and email.complained events, and updates the send's status in that same table.
  4. On an email.bounced, a Slack node alerts the support team — the customer's email address is likely wrong, and the order risks going without a received confirmation.

The same pattern maps directly onto the payment-reminder workflow described in our guide to Stripe webhooks and reminders: a reminder email that silently vanishes into nowhere is worse than no automation at all.

Setting up and securing the Resend webhook

In the Resend dashboard, the Webhooks section lets you add your n8n Webhook Trigger's production URL and pick which events to receive (email.sent, email.delivered, email.delivery_delayed, email.bounced, email.complained, email.opened, email.clicked). Every request is signed by Svix, the webhook infrastructure Resend runs on: three headers (svix-id, svix-timestamp, svix-signature) travel with each payload, and the signature is an HMAC-SHA256 computed over the concatenated id, timestamp, and raw body. Verifying that signature before processing the event — rather than trusting any request that lands on the public URL — follows exactly the method described in our n8n webhook security guide, using a Crypto node to recompute the HMAC (see also our Crypto node guide) and compare it against the received header.

Like any webhook, duplicate deliveries can happen if Resend retries a delivery: an idempotency mechanism keyed on svix-id, detailed in our dedicated guide, avoids processing the same event twice and firing a duplicate alert for the same bounce.

Resend is not a marketing email tool

Worth clarifying before picking the wrong tool for the job: Resend is built for transactional email, triggered by a user action (signup, order, invoice, password reset), not for bulk campaigns. For newsletters or marketing sequences sent to a contact list, our guide to automating email marketing with Brevo remains the right reference — Brevo handles consent, unsubscribes, and segmentation, none of which the Resend API does natively. Mixing both use cases on the same domain generally hurts overall deliverability: a dedicated domain or subdomain per send type limits that risk.

Securing the API key

A Resend key lets someone send emails on behalf of your domain — access that, in the wrong hands, serves spam just as well as targeted phishing impersonating your brand. Store it exclusively in an encrypted n8n credential, never in a Set node or a shared variable, following the principles detailed in our API credential security guide. The Resend dashboard supports scoped keys (send-only, without access to domain or webhook management): limiting each n8n credential to the strictly necessary scope reduces the blast radius of a potential leak.

Going further

This pipeline turns a "send and hope" email into a flow where every step is tracked, from trigger to final status. If that tracking needs to feed a full audit trail (who received what, when, with what delivery status), the Compliance & Audit Pack (€149) provides the Supabase logging building block, ready to wire into the output of your Resend webhooks. And if your transactional emails fit into a broader flow of sorting and auto-replying to incoming mail, the Inbox AI Pack (€79) covers the other half of the journey. All three packs, bundled together in the Complete FlowKit Bundle (€269 instead of €347 bought separately), cover the entire email lifecycle, from receipt to delivery confirmation.

FAQ

Frequently asked questions

Do I need to verify a domain to send emails with Resend?

Yes, for production use. Resend lets you send a few test emails from a shared domain (onboarding@resend.dev), but real sending requires verifying your own domain in the Resend dashboard by adding the provided DNS records (SPF, DKIM, and ideally DMARC). Without this step, emails go out with weak sender reputation and often land in spam.

How do I authenticate n8n against the Resend API?

Create an API key in the Resend dashboard (prefixed re_), then in n8n set up an HTTP Header Auth credential with the Authorization header set to Bearer re_your_api_key. The HTTP Request node then calls POST https://api.resend.com/emails using that credential.

How do I receive delivery statuses (delivered, bounced, spam) in n8n?

Resend exposes configurable webhooks in the dashboard, signed via Svix (svix-id, svix-timestamp, svix-signature headers). An n8n Webhook Trigger receives these events (email.delivered, email.bounced, email.complained…) and can route each case to a tracking table or an alert, without having to poll the API repeatedly.

What should happen after a repeated bounce on the same address?

A hard bounce signals an invalid address: removing it from your sending lists immediately prevents it from degrading domain reputation for every following email. An n8n workflow that listens for the email.bounced event and flags the address as invalid in your CRM or database, before any new send, closes that loop automatically.

Bundle FlowKit Complet

€269