Features Pricing
Start My Free Trial

Email Templates

Create and manage email templates for automated and bulk messages.

!
Pro Plan Required Email templates require a Pro plan.

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:

  1. Go to Templates and click Create Template
  2. Choose signup_confirmation as the type
  3. Set the subject to something like You're on the list, {{first_name}}!
  4. Add your HTML and/or plain text body
  5. Click Create
  6. Go to the Dashboard, click Edit on your waitlist
  7. Under Email Templates, select your new template for “Signup confirmation”
  8. 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.

*
Always provide both HTML and plain text versions. Some spam filters penalize HTML-only emails, so including both improves deliverability.

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

  1. Go to the Dashboard and click Edit on a waitlist
  2. Open the Email Templates section
  3. Select a template from the dropdown for each type (signup confirmation, referral milestone, offboarding)
  4. 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.

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-Unsubscribe headers (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

  1. A trigger event happens (signup, milestone reached, or signup deleted)
  2. The system checks the waitlist’s email_templates setting for a template ID
  3. If a template ID is set, it fetches that specific template from the database
  4. The template’s subject and body are rendered with the recipient’s data
  5. The email is sent via Resend using the appropriate sender address
  6. 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.

*
Test your templates by creating a waitlist with only your own email signed up, assigning the template, and triggering the event (e.g., sign up again after deleting your signup, or send a blast).

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.