Set up lifecycle messages and drip campaigns with triggers, personalization, and real-time observability.
Resend makes it easy to send and receive emails.
Today, we're making it easy to orchestrate them.
Automations let you build lifecycle sequences triggered by events in your app:
Here's how to create and manage Automations.
Every Automation starts with an event.
You create these events to fit your own needs. Each event can include an optional schema, so you always know what data is available.
Once an event fires, you control what happens next:
Design sequences visually with the drag-and-drop editor, or describe what you want in plain language and let AI build it for you.
Conditions support equals, contains, greater than, and and/or logic. Each email step uses your existing Templates, so copy stays consistent and your team can edit it without touching code.
This personalization can be used to:
Before going live, fire a test event and watch it flow through each step.
When you're ready, publish your automation and start firing events.
When something happens in your app, fire the event from your application to trigger the Automation.
import { Resend } from 'resend';const resend = new Resend('re_xxxxxxxxx');const { data, error } = await resend.events.send({event: 'user.created',email: 'steve.wozniak@gmail.com',payload: {plan: 'pro',},});
As soon as the event is fired, your published Automation runs.
Once running, the observability panel shows every run in real time: what's in progress, what completed, what failed. Debugging a stuck sequence takes seconds, not hours.
You can also inspect runs programmatically through the API.
We designed Automations to be developer-first. The entire Automation experience is available via the API or through the Dashboard, to let you build in the way that best fits your team.
You can create Automations, define Events, and inspect Runs programmatically using the API, our SDKs, the MCP Server, or the CLI.
import { Resend } from 'resend';const resend = new Resend('re_xxxxxxxxx');const { data, error } = await resend.automations.create({name: 'Welcome series',status: 'disabled',steps: [{key: 'start',type: 'trigger',config: { eventName: 'user.created' },},{key: 'welcome',type: 'send_email',config: {template: { id: '34a080c9-b17d-4187-ad80-5af20266e535' },},},],connections: [{ from: 'start', to: 'welcome' }],});
Automations unlock entirely new ways to engage your audience by building lifecycle sequences triggered by events in your own app.
You can get started with 10,000 Automation Runs for free, and scale as you need. See Pricing for all the details.
Visit the Automations page or read the API docs to build your first Automation.