--- title: Templates description: Create reusable email templates --- ## Why use templates Templates let you design emails once and reuse them across: - Transactional API sends (`/v1/send`) - Automated workflows Benefits: - Update design in one place, applies everywhere - Maintain consistent branding - Separate content from code ## Template types ### Marketing templates **Use for:** Newsletters, promotions, announcements - Only sends to subscribed contacts - Automatically includes unsubscribe link - Respects subscription preferences ### Transactional templates **Use for:** Order confirmations, password resets, receipts - Sends to all contacts, even if unsubscribed - No unsubscribe link required - Critical business communications Choose the right type based on content, not delivery method. You can use both types in campaigns, workflows, and API calls. The type determines subscription enforcement. ## Creating templates ### In the dashboard 1. Go to **Templates** 2. Click **Create Template** 3. Choose type (Marketing or Transactional) 4. Set subject, from address, and body 5. Add variables using `{{variableName}}` 6. Save ### Via API ```bash curl -X POST {{API_URL}}/templates \ -H "Authorization: Bearer sk_your_secret_key" \ -H "Content-Type: application/json" \ -d '{ "name": "order-confirmation", "subject": "Order #{{orderNumber}} confirmed", "body": "

Thanks for your order!

Order #{{orderNumber}} will arrive by {{deliveryDate}}.

", "from": "orders@example.com", "fromName": "Acme Store", "type": "TRANSACTIONAL" }' ``` ## Using variables Variables let you personalize each email. Use `{{variableName}}` syntax: ```html

Hello {{firstName}}!

Your {{plan}} subscription renews on {{renewalDate}}.

Total: ${{amount}}

``` When sending, provide values in the `data` object: ```json { "template": "subscription-renewal", "data": { "firstName": "Sarah", "plan": "Pro", "renewalDate": "April 15, 2024", "amount": "29.00" } } ``` ## Persistent vs. Temporary Data Template variables can come from **persistent contact data** or **temporary non-persistent data**: **Persistent data** — Saved to contact profile: ```json { "to": "user@example.com", "subject": "Welcome {{firstName}}!", "body": "

Your {{plan}} subscription is active.

", "data": { "firstName": "John", // Saved to contact "plan": "Pro" // Saved to contact } } ``` **Non-persistent data** — Used only for this email: ```json { "to": "user@example.com", "subject": "Password Reset", "body": "

Reset code: {{resetCode}}

Hello {{firstName}}!

", "data": { "firstName": "John", // Saved to contact "resetCode": {value: "ABC123", persistent: false} // NOT saved to contact } } ``` **When to use non-persistent data:** - One-time verification codes or tokens - Temporary URLs (password reset, magic links) - Session-specific information - Data that shouldn't pollute contact profiles **In workflows:** Non-persistent data from events is available throughout the entire workflow execution via the execution context, allowing you to use tokens/URLs across multiple workflow steps. ### Fallback values Provide defaults for missing data: ```html

Hello {{firstName ?? 'there'}}!

``` If `firstName` isn't provided, displays "Hello there!" instead. ### Nested data Access nested objects with dot notation: ```html

{{user.email}}

{{order.items.0.name}}

{{preferences.newsletter}}

``` ## Sending with templates ### Transactional emails ```bash curl -X POST {{API_URL}}/v1/send \ -H "Authorization: Bearer sk_your_secret_key" \ -H "Content-Type: application/json" \ -d '{ "to": "user@example.com", "template": "order-confirmation", "data": { "orderNumber": "12345", "deliveryDate": "March 20" } }' ``` ### In workflows When creating a **Send Email** workflow step, select the template from the dropdown. Variables are automatically filled from contact data and workflow context. ### In campaigns When creating a campaign, choose a template instead of composing inline. All campaign recipients get the same template with personalized variables. ## When to use inline vs templates **Use templates when:** - Sending the same email repeatedly - Multiple workflows/campaigns use same design - Design may change over time - Want to centralize branding **Use inline content when:** - One-off transactional emails - Unique per-user content - Testing or prototyping - Content is generated dynamically Example inline send: ```bash curl -X POST {{API_URL}}/v1/send \ -H "Authorization: Bearer sk_your_secret_key" \ -H "Content-Type: application/json" \ -d '{ "to": "user@example.com", "subject": "Your verification code", "body": "

Your code: {{code}}

", "data": {"code": "ABC123"} }' ``` ## Managing templates ### List templates ```bash curl -X GET {{API_URL}}/templates \ -H "Authorization: Bearer sk_your_secret_key" ``` Filter by type: ```bash curl -X GET "{{API_URL}}/templates?type=MARKETING" \ -H "Authorization: Bearer sk_your_secret_key" ``` ### Update template ```bash curl -X PATCH {{API_URL}}/templates/template_id \ -H "Authorization: Bearer sk_your_secret_key" \ -H "Content-Type: application/json" \ -d '{ "subject": "New subject line", "body": "

Updated content

" }' ``` Changes apply to all future sends using this template. ### Delete template ```bash curl -X DELETE {{API_URL}}/templates/template_id \ -H "Authorization: Bearer sk_your_secret_key" ``` Templates used in active workflows are not deleted—you'll need to update workflows first. ## Best practices **Keep templates simple** — Focus on content, avoid complex layouts that break in email clients. **Test across clients** — Email rendering varies. Preview in Gmail, Outlook, Apple Mail, and mobile devices. **Use semantic HTML** — Use `

`, `

`, `` instead of styled `

` elements. **Provide all variables** — Missing variables display as empty. Use fallbacks: `{{name ?? 'Customer'}}`. **Version your templates** — For critical transactional emails, create new templates rather than editing existing ones. ## Next Steps - [Create campaigns](/guides/campaigns) with your templates - [Build workflows](/guides/workflows) with automated emails - [Track performance](/guides/analytics) of your templates