Resend Email
Use the Resend Email node to send a transactional email through Resend from a workflow. It suits order confirmations, shipping notifications, welcome emails and internal alerts such as a low-stock warning to an operations mailbox.
The node sends one email per record it receives. Set From Email, To Email, Subject and an HTML Content or Text Content body, using expressions such as {{data.orderNumber}} to fill in data from the trigger or the previous node. When the node receives an array of records (for example after a Field Mapping node fans out an order list), each record is templated separately and sent through Resend's batch endpoint in groups of up to 100. Schedule Send and Attachments are not supported by the batch endpoint, so records that use them are sent one at a time instead.
INFO
Node type: action.resend-email · Category: Action
Credentials
INFO
This node uses a resend credential. Create it under Integrations in Nexus before you configure the node.
- In Resend, verify the domain you will send from (SPF and DKIM records) and create an API key with sending permission.
- In Nexus, open Integrations and select Resend.
- Enter a name for the integration and paste the key into API key. Resend keys start with
re_. - Use Test connection, then save.
Node parameters
Configure this node with these parameters.
From Email
Sender address — must use a verified Resend domain
- Type: Text
- Required
To Email
Recipient address(es), comma-separated. Supports {{field}} templating.
- Type: Text
- Required
Subject
Email subject line. Supports {{field}} templating.
- Type: Text
- Required
HTML Content
HTML email body. Provide html and/or text. Supports {{field}} templating.
- Type: Code / template
- Optional
Text Content
Plain-text email body (fallback when html is empty).
- Type: Code / template
- Optional
CC
CC address(es), comma-separated.
- Type: Text
- Optional
BCC
BCC address(es), comma-separated.
- Type: Text
- Optional
Reply-To
Reply-To address(es), comma-separated.
- Type: Text
- Optional
Schedule Send
Optional. Send at a future time. ISO 8601 (2026-07-01T09:00:00Z) or natural language (in 1 hour). Supports {{field}} templating. Empty = send now. Not available with batch (multi-record) sends.
- Type: Text
- Optional
Attachments
Optional array of attachments, each { filename, content (base64) OR path (remote URL), contentType, contentId }. String fields support {{field}} templating. Not available with batch sends.
- Type: JSON
- Optional
- Default:
[]
Tags
Optional array of Resend tags for analytics/filtering, each { name, value }.
- Type: JSON
- Optional
- Default:
[]
Custom Headers
Optional custom email headers as a JSON object, e.g. { "X-Entity-Ref-ID": "{{id}}" }.
- Type: Code / template
- Optional
Input and output
Input
| Port | Type | Description |
|---|---|---|
| Input | any | Input data for the email template |
Output
| Port | Type | Description |
|---|---|---|
| Output | object | Resend send result (message id in metadata) |
The node passes its input data through unchanged and adds the Resend message ID to the output metadata as resend_email_id.
Examples
Order confirmation
Connect a Shopware Event Trigger listening for Order placed to this node and configure:
| Parameter | Value |
|---|---|
| From Email | orders@yourshop.com |
| To Email | {{data.orderCustomer.email}} |
| Subject | Thanks for your order {{data.orderNumber}} |
| HTML Content | <p>Hi {{data.orderCustomer.firstName}}, we received order {{data.orderNumber}} for {{data.amountTotal}} {{data.currency.isoCode}}.</p> |
| Tags | [{"name": "type", "value": "order-confirmation"}] |
Low-stock alert to an operations mailbox
| Parameter | Value |
|---|---|
| From Email | alerts@yourshop.com |
| To Email | warehouse@yourshop.com |
| Subject | Low stock: {{data.productNumber}} |
| Text Content | {{data.name}} ({{data.productNumber}}) is down to {{data.stock}} units. |
Related resources
What to do if your operation isn't supported
If this node doesn't support the operation you need, use the API Request node to call the service's API directly. Add the authentication headers the service expects and use expressions to pass in data from the trigger or the previous node.
Common issues
- Permission denied by the connected service: Resend refused the send. The two usual reasons are that the API key is not valid (Resend reports it as an invalid API key) and that the domain in From Email is not verified in Resend, or the address does not use a verified domain. Check the domain status in Resend and send from an address on it; if the domain is fine, create a new API key with sending access and update the credential under Integrations.
- The connected service rejected the request: Resend accepted the key but not the email. Common reasons are a From Email that is not a valid address or
Name <address>pair, an invalid attachment, a Schedule Send value Resend cannot parse, or a required field Resend considers missing. Check the rendered values in the run's input and fix the field. - The connected service is rate limiting requests: there are two different causes. Resend's per-second rate limit (5 requests per second per team, shared by all keys) is retried automatically after the wait Resend asks for, so you only see this message when the retries run out. A used-up daily or monthly sending quota is not retried; raise the quota in Resend and run the workflow again.
- The node configuration is invalid: a required value is empty after expressions are resolved (From Email, To Email, Subject, or both HTML Content and Text Content), Attachments, Tags or Custom Headers is not valid JSON, an attachment sets both or neither of
contentandpath, or the selected credential is missing or of the wrong type. The details name the credential problem when there is one. An expression that points at a field the record does not have resolves to empty, which is the most common cause of a missing recipient. - A retried step did not send a second email: expected. Nexus sends an idempotency key with every email, so when a failed step is retried, Resend returns the original result for 24 hours instead of sending a duplicate. Separate workflow runs always send, and so do records with different data in the same run.