Email Templates
Create and manage email templates for automated and bulk messages.
Overview
Email templates let you create reusable email layouts with dynamic variables. When a trigger event happens (signup, referral milestone, offboarding, or manual blast), MakeEmWait renders the template with the recipient’s data and sends the email automatically.
Templates are not active by default — you create them first, then assign them to specific waitlists. This lets you use different email copy for different waitlists (e.g., casual for a consumer product, formal for an enterprise waitlist), or reuse the same template across multiple waitlists.
Template Types
| Type | When it sends | Trigger |
|---|---|---|
signup_confirmation |
When someone joins the waitlist | Automatic on signup |
referral_milestone |
When a referrer hits a milestone count | Automatic when threshold reached |
offboarding |
When someone is removed from the waitlist | Automatic on signup deletion |
blast |
Manual bulk email to all signups | You send it from the dashboard or API |
Quick Start
Here’s how to get your first automated email working:
- Go to Templates and click Create Template
- Choose
signup_confirmationas the type - Set the subject to something like
You're on the list, {{first_name}}! - Add your HTML and/or plain text body
- Click Create
- Go to the Dashboard, click Edit on your waitlist
- Under Email Templates, select your new template for “Signup confirmation”
- Click Save
Now every new signup on that waitlist will receive your welcome email.
Create a Template
From the dashboard: Go to Templates, click Create Template, and fill in the form.
API: POST /templates
{
"template_type": "signup_confirmation",
"name": "Welcome Email",
"subject_template": "You're on the waitlist, {{first_name}}!",
"html_body_template": "<h1>Welcome, {{first_name}}!</h1><p>You're #{{position}} on the list for {{waitlist_name}}.</p>",
"text_body_template": "Welcome, {{first_name}}! You're #{{position}} on the list."
}
Required Fields
| Field | Required | Description |
|---|---|---|
template_type |
Yes | One of the four types above |
subject_template |
Yes | Email subject line (supports variables) |
html_body_template |
At least one | HTML version of the email body |
text_body_template |
At least one | Plain text version of the email body |
name |
No | A friendly name for the template (defaults to the type) |
HTML and Plain Text
When you provide both an HTML body and a plain text body, the email is sent as a multipart message containing both versions. The recipient’s email client decides which one to display:
- HTML-capable clients (Gmail, Outlook, Apple Mail, etc.) show the HTML version
- Plain text clients (terminal-based clients, accessibility readers, or users who prefer plain text) show the text version
The two versions don’t conflict — this is standard email behavior. If you only provide one, that’s what every recipient sees regardless of their client.
Template Variables
Use {{variable}} syntax in your subject line and body. Variables are replaced with actual values when the email is sent. If a variable isn’t available for a given context, it’s left as-is.
Variables by Template Type
Signup Confirmation
| Variable | Description |
|---|---|
{{first_name}} |
The signup’s first name |
{{last_name}} |
The signup’s last name |
{{position}} |
Their position on the waitlist |
{{waitlist_name}} |
The name of the waitlist |
Referral Milestone
| Variable | Description |
|---|---|
{{first_name}} |
The referrer’s first name |
{{referral_count}} |
How many referrals they’ve made |
{{position}} |
Their current position on the waitlist |
{{waitlist_name}} |
The name of the waitlist |
Offboarding
| Variable | Description |
|---|---|
{{first_name}} |
The signup’s first name |
{{last_name}} |
The signup’s last name |
{{email}} |
The signup’s email address |
{{waitlist_name}} |
The name of the waitlist |
Blast
Blast emails do not support template variables. The subject and body you provide are sent to every recipient unchanged. See Email Blasts for details.
Template Examples
Signup Confirmation
Subject: Welcome to {{waitlist_name}}, {{first_name}}!
HTML Body:
<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto;">
<h1>You're on the list!</h1>
<p>Hi {{first_name}},</p>
<p>Thanks for signing up for <strong>{{waitlist_name}}</strong>. You're currently at position <strong>#{{position}}</strong>.</p>
<p>Want to move up? Share your referral link with friends — every signup through your link bumps you up in line!</p>
</div>
Referral Milestone
Subject: {{first_name}}, you've referred {{referral_count}} people!
HTML Body:
<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto;">
<h1>Milestone reached!</h1>
<p>Hi {{first_name}},</p>
<p>You've referred <strong>{{referral_count}}</strong> people to <strong>{{waitlist_name}}</strong>. You're now at position <strong>#{{position}}</strong>.</p>
<p>Keep sharing to climb even higher!</p>
</div>
Offboarding
Subject: You're in! Welcome to {{waitlist_name}}
HTML Body:
<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto;">
<h1>Great news, {{first_name}}!</h1>
<p>You've been accepted off the <strong>{{waitlist_name}}</strong> waitlist.</p>
<p>Check your inbox for next steps.</p>
</div>
Per-Waitlist Template Assignment
Each waitlist can have its own template for each type. This means your “Product Launch” waitlist can send a different welcome email than your “Beta Access” waitlist.
Assigning from the Dashboard
- Go to the Dashboard and click Edit on a waitlist
- Open the Email Templates section
- Select a template from the dropdown for each type (signup confirmation, referral milestone, offboarding)
- Click Save
The dropdowns only show templates that match the type — a signup confirmation dropdown only lists signup_confirmation templates.
Assigning via API
Include email_templates in your waitlist settings:
PATCH /waitlists/{waitlist_id}
{
"settings": {
"email_templates": {
"signup_confirmation": "TEMPLATE_ID",
"referral_milestone": "TEMPLATE_ID",
"offboarding": "TEMPLATE_ID"
}
}
}
Set a value to null to unassign a template for that type. Omit a key to leave it unchanged.
What Happens When No Template is Assigned
If a waitlist has no template assigned for a trigger type, no email is sent for that event. For example, if you don’t assign a signup confirmation template, new signups won’t receive a welcome email.
What Happens When a Template is Deleted
If you delete a template that’s still assigned to a waitlist, the email simply won’t be sent — no error occurs. The assignment remains in the waitlist settings but has no effect until you assign a new template.
Unsubscribe Links
All marketing emails (blasts, referral notifications, and milestone emails) automatically include:
- A footer unsubscribe link — visible text link at the bottom of every email
List-Unsubscribeheaders (RFC 8058) — enables one-click unsubscribe in email clients like Gmail and Yahoo
Signups who unsubscribe are skipped in future marketing sends but keep their waitlist position. After unsubscribing, they can also delete their data entirely via the unsubscribe page.
Transactional emails (signup confirmation and email verification) do not include unsubscribe links — they are triggered by the user’s own actions and are necessary for the service to function.
How Emails Are Sent
All automated emails (signup confirmations, referral milestones, offboarding) are sent in the background and never block the user-facing action. If an email fails to send, the signup or deletion still succeeds — the failure is logged but doesn’t affect the user experience.
Sending Domain
Emails are sent from the default MakeEmWait address unless you’ve set up a custom email domain. With a verified custom domain, emails are sent from noreply@yourdomain.com instead, which improves deliverability and brand trust.
Sending Flow
- A trigger event happens (signup, milestone reached, or signup deleted)
- The system checks the waitlist’s
email_templatessetting for a template ID - If a template ID is set, it fetches that specific template from the database
- The template’s subject and body are rendered with the recipient’s data
- The email is sent via Resend using the appropriate sender address
- If anything fails (missing template, send error), the failure is logged and skipped silently
Manage Templates
List All Templates
API: GET /templates
Returns all templates with their IDs, types, names, subject lines, and creation dates. Body content is not included in the list response — use the get endpoint to fetch full content.
Get a Template
API: GET /templates/{template_id}
Returns the full template including HTML and text body content.
Update a Template
API: PATCH /templates/{template_id}
Only provide the fields you want to change. Omitted fields keep their current values.
{
"subject_template": "Updated subject: Welcome, {{first_name}}!"
}
Delete a Template
API: DELETE /templates/{template_id}
Returns 204 No Content. Any waitlists that had this template assigned will simply stop sending that email type until a new template is assigned.
Blast Templates
Blast templates work differently from the other three types. Instead of being triggered automatically, you use them with the email blast feature to send a one-time email to everyone on a waitlist.
When creating a blast from the dashboard or API, you provide the subject and body directly — you don’t reference a template by ID. However, creating a blast template is useful as a starting point that you can copy and modify for each send.
Related Features
- Email Blasts — send bulk emails to your entire waitlist
- Referral Milestones — configure the referral counts that trigger milestone emails
- Custom Domains — send emails from your own domain
- Offboarding Emails — how offboarding works when deleting signups