Skip to main content
Resend Docs

Search documentation

Type to search this documentation.

On this pageOverview

Send Email

This automation step triggers a Template email to be sent to the contact.

After adding a trigger, create a new step to Send an email.

Add Send Email Action

Select a published template, then configure the sender address.

Send Email Action Sender Settings

The subject always comes from the Template. To send a different subject, set subject when creating the step via the API.

Add a send_email step to your Automation's steps array.

Node.js
import { Resend } from 'resend';const resend = new Resend('re_xxxxxxxxx');const { data, error } = await resend.automations.create({  name: 'Welcome series',  steps: [    {      key: 'start',      type: 'trigger',      config: { eventName: 'user.created' },    },    {      key: 'welcome',      type: 'send_email',      config: {        template: {          id: '044db673-fff6-420f-a566-f6aba05d60e7',        },      },    },  ],  connections: [{ from: 'start', to: 'welcome' }],});
PHP
$resend = Resend::client('re_xxxxxxxxx');$resend->automations->create([  'name' => 'Welcome series',  'steps' => [    [      'key' => 'start',      'type' => 'trigger',      'config' => ['event_name' => 'user.created'],    ],    [      'key' => 'welcome',      'type' => 'send_email',      'config' => [        'template' => [          'id' => '044db673-fff6-420f-a566-f6aba05d60e7',        ],      ],    ],  ],  'connections' => [['from' => 'start', 'to' => 'welcome']],]);
Python
import resendresend.api_key = "re_xxxxxxxxx"params: resend.Automations.CreateParams = {  "name": "Welcome series",  "steps": [    {      "key": "start",      "type": "trigger",      "config": {"event_name": "user.created"},    },    {      "key": "welcome",      "type": "send_email",      "config": {        "template": {          "id": "044db673-fff6-420f-a566-f6aba05d60e7",        },      },    },  ],  "connections": [{"from": "start", "to": "welcome"}],}resend.Automations.create(params)
Ruby
require "resend"Resend.api_key = "re_xxxxxxxxx"params = {  name: "Welcome series",  steps: [    {      key: "start",      type: "trigger",      config: { event_name: "user.created" },    },    {      key: "welcome",      type: "send_email",      config: {        template: {          id: "044db673-fff6-420f-a566-f6aba05d60e7",        },      },    },  ],  connections: [{ from: "start", to: "welcome" }],}Resend::Automations.create(params)
Go
package mainimport "github.com/resend/resend-go/v4"func main() {	client := resend.NewClient("re_xxxxxxxxx")	params := &resend.CreateAutomationRequest{		Name: "Welcome series",		Steps: []resend.AutomationStep{			{				Key:  "start",				Type: resend.AutomationStepTypeTrigger,				Config: map[string]any{					"event_name": "user.created",				},			},			{				Key:  "welcome",				Type: resend.AutomationStepTypeSendEmail,				Config: map[string]any{					"template": map[string]any{						"id": "044db673-fff6-420f-a566-f6aba05d60e7",					},				},			},		},		Connections: []resend.AutomationConnection{			{From: "start", To: "welcome"},		},	}	client.Automations.Create(params)}
Rust
use resend_rs::{  types::{    AutomationStatus, AutomationTemplate, Connection, CreateAutomationOptions, SendEmailStepConfig,    Step, TriggerStepConfig,  },  Resend, Result,};#[tokio::main]async fn main() -> Result<()> {  let resend = Resend::new("re_xxxxxxxxx");  let opts = CreateAutomationOptions {    name: "Welcome series".to_owned(),    steps: vec![      Step::Trigger {        key: "start".to_owned(),        config: TriggerStepConfig {          event_name: "user.created".to_owned(),        },      },      Step::SendEmail {        key: "welcome".to_owned(),        config: SendEmailStepConfig::new(AutomationTemplate::new(          "044db673-fff6-420f-a566-f6aba05d60e7",        )),      },    ],    connections: vec![Connection::new("start", "welcome")],    status: AutomationStatus::Disabled,  };  let _automation = resend.automations.create(opts).await?;  Ok(())}
Java
import com.resend.*;import com.resend.core.exception.ResendException;import com.resend.services.automations.model.AutomationConnection;import com.resend.services.automations.model.AutomationStep;import com.resend.services.automations.model.CreateAutomationOptions;import com.resend.services.automations.model.CreateAutomationResponseSuccess;import java.util.Map;public class Main {    public static void main(String[] args) throws ResendException {        Resend resend = new Resend("re_xxxxxxxxx");        CreateAutomationOptions options = CreateAutomationOptions.builder()                .name("Welcome series")                .steps(                    AutomationStep.trigger("start")                        .eventName("user.created")                        .build(),                    AutomationStep.sendEmail("welcome")                        .template("044db673-fff6-420f-a566-f6aba05d60e7")                        .templateVariable("name", Map.of("var", "event.firstName"))                        .build()                )                .connections(                    AutomationConnection.builder()                        .from("start")                        .to("welcome")                        .build()                )                .build();        CreateAutomationResponseSuccess data = resend.automations().create(options);    }}
.NET
using Resend;using System.Text.Json;IResend resend = ResendClient.Create( "re_xxxxxxxxx" );var startConfig = JsonSerializer.SerializeToElement( new { event_name = "user.created" } );var welcomeConfig = JsonSerializer.SerializeToElement( new{    template = new    {        id = "044db673-fff6-420f-a566-f6aba05d60e7",        variables = new { name = new { @var = "event.firstName" } },    },    subject = "Welcome to Acme!",    from = "Acme <hello@example.com>",    reply_to = "support@example.com",} );var resp = await resend.AutomationCreateAsync( new AutomationCreateData(){    Name = "Welcome series",    Steps = new List<AutomationStepData>    {        new AutomationStepData { Ref = "start", Type = "trigger", Config = startConfig },        new AutomationStepData { Ref = "welcome", Type = "send_email", Config = welcomeConfig },    },    Connections = new List<AutomationEdge>    {        new AutomationEdge { From = "start", To = "welcome", EdgeType = "default" },    },} );
cURL
curl -X POST 'https://api.resend.com/automations' \     -H 'Authorization: Bearer re_xxxxxxxxx' \     -H 'Content-Type: application/json' \     -d '{  "name": "Welcome series",  "steps": [{    "key": "start",    "type": "trigger",    "config": { "event_name": "user.created" }  }, {    "key": "welcome",    "type": "send_email",    "config": {      "template": {        "id": "044db673-fff6-420f-a566-f6aba05d60e7"      }    }  }],  "connections": [    { "from": "start", "to": "welcome" }  ]}'
CLI
resend automations create --name "Welcome series" --file ./automation.json

Use the variables field to pass data into your template. Each variable value can be a dynamic reference or a static string.

Type Format Description
Event data { "var": "event.<field>" } Resolves a field from the triggering event's payload.
Contact data { "var": "contact.<field>" } Resolves a field from the contact record.
Waited event data { "var": "wait_events.<event_name>.<field>" } Resolves a field from a preceding wait for event step's payload.
Static value "<string>" Passed as-is to the template.
JSON
{  "key": "welcome",  "type": "send_email",  "config": {    "template": {      "id": "044db673-fff6-420f-a566-f6aba05d60e7",      "variables": {        "firstName": { "var": "event.firstName" },        "orderNumber": { "var": "event.orderId" },        "total": { "var": "event.amount" },        "company": { "var": "contact.properties.company" },        "feedback": { "var": "wait_events.feedback.received.response" },        "supportEmail": "help@example.com"      }    }  }}

Template variables must be present in your referenced template and the key names must match exactly with the template variable names.

For more help working with variables, see the Template documentation.

Resend does not automatically add an unsubscribe link to emails sent from a send_email step. To let contacts opt out, add {{{RESEND_UNSUBSCRIBE_URL}}} to the Template used by the step.

See when to use an unsubscribe link to decide whether your Automation emails need one.

  • config.template (object, required) — The published template to send. Provide id and optionally variables.
properties
  • config.template.id (string, required) — The ID or alias of the template to send.
  • config.template.variables (object) — A key-value map of template variables. Each value can be a static string or a variable reference object ({ "var": "event.fieldName" }) that resolves dynamically from the event.*, contact.*, or wait_events.* namespaces.
  • config.from (string) — The sender email address.

If provided, this value will override the template's default value.

  • config.subject (string) — The email subject line.

If provided, this value will override the template's default value.

  • config.reply_to (string) — Reply-to email address.

If provided, this value will override the template's default value.

JSON
{
  "key": "welcome",
  "type": "send_email",
  "config": {
    "template": {
      "id": "062f8ef4-fbfa-44f1-b5e0-ff8e1e8ffa96",
      "variables": {
        "name": { "var": "event.firstName" }
      }
    },
    "from": "hello@example.com",
    "subject": "Welcome!",
    "reply_to": "support@example.com"
  }
}
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu