Create multi-step email sequences triggered by contact events. Automate onboarding, re-engagement, transactional workflows, and more — no code required.
How it works
An automation has three parts: a trigger that starts the sequence, a series of steps (each sending an email), and delays between steps. When a contact matches the trigger, they're enrolled and emails are sent on schedule.
1
Trigger
Contact joins a list or a property changes
2
Enroll
Contact enters the automation
3
Step 1
Send first email (immediately or after delay)
4
Delay
Wait (1 hour, 1 day, 1 week...)
5
Step 2
Send next email
6
Complete
All steps sent
Trigger types
Automations start when a contact matches a trigger condition. Three trigger types are supported:
1. List join
Fires when a contact is added to a specific contact list. Use this for welcome sequences, onboarding flows, and campaign-based automations.
Fires when a contact property matches a specific value. Use this for behavioral triggers like abandoned carts, payment reminders, or inactivity alerts.
Fires when a contact property changes from one value to another. Use this for status transitions like trial-to-paid, loan approval, or account verification.
Create an automation with a trigger and one or more steps. Each step defines an email to send and a delay before sending.
Create automation
curl -X POST https://api.grosend.com/api/v1/automations \
-H "Authorization: Bearer sv_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome Series",
"description": "4-day onboarding for new users",
"triggerType": "list_join",
"triggerConfig": { "listName": "new-users" },
"steps": [
{
"delayMinutes": 0,
"subject": "Welcome to {{company}}, {{name}}!",
"bodyHtml": "<h1>Welcome!</h1><p>We are glad to have you.</p>"
},
{
"delayMinutes": 1440,
"subject": "Getting started guide",
"bodyHtml": "<h1>Quick start</h1><p>Here is how to get the most out of Grosend.</p>"
},
{
"delayMinutes": 4320,
"subject": "Tips for better deliverability",
"bodyHtml": "<h1>Deliverability tips</h1><p>Follow these best practices.</p>"
},
{
"delayMinutes": 10080,
"subject": "Need help?",
"bodyHtml": "<h1>We are here for you</h1><p>Reply to this email anytime.</p>"
}
]
}'
Steps are ordered by position (0, 1, 2...). You can add, update, or remove steps at any time while the automation is paused.
Add a step
Add step
curl -X POST https://api.grosend.com/api/v1/automations/{automation-id}/steps \
-H "Authorization: Bearer sv_live_..." \
-H "Content-Type: application/json" \
-d '{
"delayMinutes": 20160,
"subject": "Final check-in",
"bodyHtml": "<h1>How is it going?</h1><p>Let us know if you need anything.</p>"
}'
Pausing does not cancel already-enqueued emails. Contacts currently waiting for a delayed step will still receive their next email. Pausing only prevents new enrollments.
Enrollments
An enrollment tracks a contact's progress through an automation. Each contact can only be enrolled once per automation. Enrollments are created automatically by the trigger engine — you cannot create them via API.
# Active enrollments only
curl "https://api.grosend.com/api/v1/automations/{id}/enrollments?status=active" \
-H "Authorization: Bearer sv_live_..."
# Paginated
curl "https://api.grosend.com/api/v1/automations/{id}/enrollments?limit=25&offset=50" \
-H "Authorization: Bearer sv_live_..."
Template variables
Use {{variable_name}} syntax in your email subjects and bodies. Variables are rendered when the email is sent.
Built-in variables
{{name}}Contact name (falls back to "there")
{{email}}Contact email address
{{company}}Your company name (from env)
{{list_name}}Name of the list that triggered enrollment
Contact properties
All string-valued contact properties are automatically available as template variables. For example, if a contact has {"plan": "pro", "company": "Acme"}, you can use {{plan}} and {{company}} in your emails.
Example with variables
{
"subject": "{{name}}, your {{plan}} plan is ready",
"bodyHtml": "<h1>Hi {{name}}</h1><p>Your {{plan}} plan with {{company}} is now active.</p>"
}
Pre-built scenarios
Grosend ships with 43 pre-built automation scenarios across 7 industries. Each includes pre-written email copy, optimal delay timing, and appropriate trigger configuration.
curl -X POST https://api.grosend.com/api/v1/automations \
-H "Authorization: Bearer sv_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Abandoned Cart Recovery",
"triggerType": "property_equals",
"triggerConfig": {
"property": "abandoned_cart",
"value": "true"
},
"steps": [
{
"delayMinutes": 60,
"subject": "You left something in your cart",
"bodyHtml": "<h1>Complete your order</h1><p>You have items waiting. Your cart total: {{cart_total}}</p><p><a href=\"{{cart_url}}\">Complete checkout →</a></p>"
},
{
"delayMinutes": 1440,
"subject": "Still thinking about it?",
"bodyHtml": "<h1>Your cart is waiting</h1><p>Complete your order before your items sell out.</p><p><a href=\"{{cart_url}}\">Return to cart →</a></p>"
},
{
"delayMinutes": 4320,
"subject": "Last chance — 10% off your cart",
"bodyHtml": "<h1>Here is 10% off</h1><p>Use code SAVE10 at checkout. Your cart: {{cart_total}}</p><p><a href=\"{{cart_url}}\">Claim discount →</a></p>"
}
]
}'
Step 3: Activate
Activate
curl -X POST https://api.grosend.com/api/v1/automations/{id}/activate \
-H "Authorization: Bearer sv_live_..."
Now whenever a contact has abandoned_cart = "true", they'll receive a 3-email sequence: reminder at 1 hour, nudge at 1 day, and discount at 3 days.
Example: Welcome series with templates
Use email templates with your automations for consistent branding across steps.
Using templates in automations
# First, create a template
curl -X POST https://api.grosend.com/api/v1/templates \
-H "Authorization: Bearer sv_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome Email",
"subject": "Welcome to {{company}}!",
"htmlBody": "<h1>Welcome, {{name}}!</h1><p>Thanks for joining. Here is how to get started.</p>"
}'
# Then reference it in your automation step
curl -X POST https://api.grosend.com/api/v1/automations/{id}/steps \
-H "Authorization: Bearer sv_live_..." \
-H "Content-Type: application/json" \
-d '{
"delayMinutes": 0,
"templateId": "template-uuid"
}'
When a step has a templateId, the template's subject and body are used instead of the step's inline subject/bodyHtml. Template variables are still rendered.
Delay reference
Delays are specified in minutes. Common durations:
0 minImmediately
60 min1 hour
120 min2 hours
1440 min1 day
2880 min2 days
4320 min3 days
7200 min5 days
10080 min1 week
14400 min10 days
20160 min2 weeks
30240 min3 weeks
43200 min1 month
Webhook events
Emails sent by automations fire the same webhook events as regular emails. Each automation email includes an automation_id tag for filtering.