From 6ee7fecdbd9726dab5f5e426348202733e7a7649 Mon Sep 17 00:00:00 2001 From: Mark Kraakman Date: Thu, 15 Oct 2026 10:15:47 +0200 Subject: [PATCH 1/4] Docs: Transactional Templates guide - New page send-api/templates: when to use a template, dashboard editors, variables and fallbacks, draft/publish/versions, sending with Create Template Message, permissions, errors, tracking - Link it from the send-email Template Variables accordion, the October changelog entry, the glossary and the plans table in facts --- changelog.mdx | 2 +- docs.json | 3 +- facts.mdx | 2 +- glossary.mdx | 1 + send-api/send-email.mdx | 2 +- send-api/templates.mdx | 123 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 send-api/templates.mdx diff --git a/changelog.mdx b/changelog.mdx index 62fb37d..fd807ab 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -10,7 +10,7 @@ The AhaSend changelog lists product releases, API changes and fixes by month, wi #### New Features -- **[Transactional templates](/api-reference/templates/get-templates) in API v2.** Create, update and delete templates, work on a draft, publish it, and read or restore published versions. Send a template with [Create Template Message](/api-reference/messages/create-template-message): each recipient gives its own values for the template's variables. +- **[Transactional templates](/send-api/templates) in API v2.** Create, update and delete templates, work on a draft, publish it, and read or restore published versions. Send a template with [Create Template Message](/api-reference/messages/create-template-message): each recipient gives its own values for the template's variables. - **Transactional templates in the dashboard.** Under Transactional → Templates, design a template with the Simple Editor or the Advanced Editor, or upload your own HTML file or a zip with its images. Each template has its own page with its ID, its variables, a sample API request, a preview with your sample values, a test send, a default sender and subject, and its delivery statistics for the last 30 days. Your edits go to a draft. API sends keep using the published version until you click Publish, and the last 50 published versions can be previewed and restored. - **[Campaigns](/api-reference/campaigns/overview) and [campaign templates](/api-reference/campaign-templates/get-campaign-templates) in API v2.** Create a draft campaign from MJML, HTML or a campaign template, check it, send a test, schedule or send it, and read its statistics and recipients. - **Saved campaign templates.** Save a campaign's design as a template under Marketing → Templates and start new campaigns from it. Each campaign keeps its own copy, so a later change to the template does not change campaigns you already made. diff --git a/docs.json b/docs.json index 91026a9..d9418e3 100644 --- a/docs.json +++ b/docs.json @@ -95,7 +95,8 @@ "pages": [ "send-api/credentials", "send-api/sandbox", - "send-api/send-email" + "send-api/send-email", + "send-api/templates" ] }, { diff --git a/facts.mdx b/facts.mdx index 099dd17..7f19b22 100644 --- a/facts.mdx +++ b/facts.mdx @@ -33,7 +33,7 @@ AhaSend is a European transactional email service for developers: send through a | [S3 archiving](/retention/s3), [DSN reports](/integrations/dsn-reports), [OIDC single sign-on](/security/sso) | No | No | Yes | | [Sub-accounts](/scale/sub-accounts), [DNS whitelabel](/scale/dns-whitelabel), [per-domain DKIM selectors and bring-your-own DKIM](/api-reference/domains/create-domain) | Platform Partners | Platform Partners | Platform Partners | | Support | Community, best effort | Every day 9:00–21:00 CEST | Premium, 4-hour response time | -| [API](/send-api/send-email), [SMTP](/smtp), [sandbox](/send-api/sandbox), [webhooks](/integrations/webhooks), [inbound routing](/integrations/routing), [tracking](/tracking/open-tracking), [2FA](/security/2fa) and [2FA enforcement](/security/2fa-enforcement), [scoped keys](/security/scoped-credentials), [IP allow lists](/security/ip-allow-lists), [Reputation Shield](/security/reputation-shield), [signed webhooks and routes](/api-reference/webhooks/security), [automatic DKIM rotation](/domains) | Yes | Yes | Yes | +| [API](/send-api/send-email), [SMTP](/smtp), [transactional templates](/send-api/templates), [sandbox](/send-api/sandbox), [webhooks](/integrations/webhooks), [inbound routing](/integrations/routing), [tracking](/tracking/open-tracking), [2FA](/security/2fa) and [2FA enforcement](/security/2fa-enforcement), [scoped keys](/security/scoped-credentials), [IP allow lists](/security/ip-allow-lists), [Reputation Shield](/security/reputation-shield), [signed webhooks and routes](/api-reference/webhooks/security), [automatic DKIM rotation](/domains) | Yes | Yes | Yes | Platform Partner features require the Platform Partner program. [Contact sales](mailto:sales@ahasend.com) about access. diff --git a/glossary.mdx b/glossary.mdx index c5ce047..22d2fbc 100644 --- a/glossary.mdx +++ b/glossary.mdx @@ -16,6 +16,7 @@ AhaSend's glossary explains the email terms used in these docs and links each te | Transactional email | A message sent because of a user's action or an account event, such as a receipt or reset | [First send](/quickstart) | | SMTP relay | A server that accepts email from your app and passes it toward the recipient's mail server | [SMTP settings](/smtp) | | Email API | An HTTP service your app calls with a message and recipients | [REST API](/send-api/send-email) | +| Transactional template | An email design stored in AhaSend and sent by ID through the API, with values per recipient; not the same as a campaign template | [Transactional templates](/send-api/templates) | | Envelope sender | The SMTP sender used for delivery errors; it can differ from the visible From address | [Authentication](/email-authentication) | | Return-path | The address used for delivery-status messages, normally based on the envelope sender | [Domain records](/domains) | | MX record | A DNS record that names a domain's receiving mail servers | [Inbound routing](/integrations/routing) | diff --git a/send-api/send-email.mdx b/send-api/send-email.mdx index bef037a..5a8cfe5 100644 --- a/send-api/send-email.mdx +++ b/send-api/send-email.mdx @@ -396,7 +396,7 @@ Based on the [API documentation](/api-reference/messages/create-message), ensure - AhaSend supports [MiniJinja](https://github.com/mitsuhiko/minijinja) templating language for email content. To send a transactional template stored in your account, use [Create Template Message](/api-reference/messages/create-template-message). + AhaSend supports [MiniJinja](https://github.com/mitsuhiko/minijinja) templating language for email content. To store a design in AhaSend and send it by ID, see [Transactional templates](/send-api/templates). - Use descriptive variable names - Provide fallback values in templates - Validate variables before sending diff --git a/send-api/templates.mdx b/send-api/templates.mdx new file mode 100644 index 0000000..d48f755 --- /dev/null +++ b/send-api/templates.mdx @@ -0,0 +1,123 @@ +--- +title: "Transactional Templates" +sidebarTitle: "Templates" +description: "Store an email design once in AhaSend and send it by ID through the API, with your own values for each recipient." +--- + +A transactional template is an email design that lives in your AhaSend account. Your code sends the template's ID and a few values per recipient; AhaSend supplies the body, the subject and the sender. The person who designs the email can change it in the dashboard without a code release. + +Templates are sent through the API only. SMTP cannot send a template. + +## When to Use a Template + +| | Template | Create Message | +| --- | --- | --- | +| Where the design lives | In AhaSend | In your code, sent with every call | +| Who changes the wording | Anyone with dashboard access | A developer, with a deploy | +| Request size | `template_id` plus values | Full HTML and text every time | +| Endpoint | [Create Template Message](/api-reference/messages/create-template-message) | [Create Message](/api-reference/messages/create-message) | + +Use a template for emails whose wording changes more often than your code: password resets, order confirmations, invoices, onboarding steps. Use Create Message when the body is built per send, for example a report that is generated on the fly. + +Transactional templates are separate from [campaign templates](/api-reference/campaign-templates/get-campaign-templates), which are starting designs for marketing campaigns under Marketing → Templates. + +## Create a Template + +In the dashboard, open **Transactional → Templates** and create a template. Choose how to build the design: + +- **Simple Editor**: write the email like a document. Its design can only be changed in the dashboard. +- **Advanced Editor**: design the email in MJML. +- **Upload**: your own HTML file, or a zip with the HTML and its images (the `html` editor in the API). + +Each template has its own page with its ID, the variables the design uses, a sample API request, a preview with your sample values, a test send, a default sender and subject, and its delivery statistics for the last 30 days. + +You can also create a template through the API with [Create Template](/api-reference/templates/create-template), from MJML (`content.mjml`) or HTML (`content.html`). Images and stylesheets must use full `https://` URLs; the API cannot upload files. The MJML, the HTML and a custom text version can each be at most 200 KB. + +## Variables + +Write a variable in the design as `{{ first_name }}`. The templating language is [MiniJinja](https://github.com/mitsuhiko/minijinja), the same as for [Create Message](/send-api/send-email). + +- **Required or optional.** Every variable is required unless the design gives it a fallback, for example `{{ first_name|default("there") }}`. The template page and [Get Template](/api-reference/templates/get-template) list each variable with `required: true` or `false`. +- **Escaping.** In the HTML body, every value is HTML-escaped. To insert a value as HTML, write `{{ content|safe }}` in the design. The subject, the headers and the text body get values as they are. +- **Reserved names.** AhaSend supplies `email` (the recipient's address) and, when the design uses it, `unsubscribe_url`. A value you give for these is replaced. +- **Subject and headers.** A `{{ variable }}` in the subject or in a custom header resolves from the same values. A variable with no value becomes empty. + +### Unsubscribe Link + +When the design uses `{{ unsubscribe_url }}`, each recipient gets its own link, and the message carries `List-Unsubscribe` and `List-Unsubscribe-Post: List-Unsubscribe=One-Click`, so the unsubscribe button of mail clients works. The button suppresses the recipient for the sending domain; the link opens a confirmation page first. Most transactional email should not have an unsubscribe link; use it for templates that are optional for the recipient, such as digests. + +## Draft, Publish, Versions + +Every edit, in the dashboard or through the API, goes to the template's **draft**. Sends use the **published** copy. + + + A template that was never published cannot be sent, and changes you save are not sent until you click **Publish** (or call [Publish Template](/api-reference/templates/publish-template)). Check the preview and send a test from the template page first. + + +- The dashboard and the API edit the same draft. A publish publishes the whole draft, including dashboard changes. [Get Template Draft](/api-reference/templates/get-template-draft) shows what a publish will publish; [Discard Template Draft](/api-reference/templates/discard-template-draft) throws it away. +- Each publish makes a version. A template keeps its 50 most recent versions. Preview any of them on the template page or with [Get Template Version](/api-reference/templates/get-template-version), and bring one back with [Restore Template Version](/api-reference/templates/restore-template-version). +- `has_draft` on [Get Template](/api-reference/templates/get-template) tells you whether unpublished changes are waiting. + +## Send a Template + +Call [Create Template Message](/api-reference/messages/create-template-message) with the template's ID. Each recipient gets a separate message with its own values. One request can hold up to 100 recipients. + +```bash +curl -X POST "https://api.ahasend.com/v2/accounts/{account_id}/messages/template" \ + -H "Authorization: Bearer $AHASEND_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "template_id": "6f1b7f0e-2d3a-4c58-9b1e-0b6f2e9d4a11", + "recipients": [ + { + "email": "anna@example.com", + "name": "Anna", + "substitutions": { "first_name": "Anna", "order_id": "10457" } + }, + { + "email": "jonas@example.com", + "substitutions": { "first_name": "Jonas", "order_id": "10458" } + } + ] + }' +``` + +The response is the same per-recipient list as Create Message: for each recipient an `id` (null when nothing was sent), a `status` (`queued`, `scheduled` or `error`) and an `error`. + +What the request can set, and what it cannot: + +- **`from`**: optional. Left out, the template's default sender is used. When neither is set, the request is refused with `400 from is required because the template has no default sender`. +- **`subject`**: optional. Left out or empty, the template's published subject is used. When neither has a subject, the request is refused. +- **`reply_to`**: optional. Left out, the template's reply-to is used. +- **`substitutions`**: per recipient only. A `substitutions` object at the top of the request is refused with `400 substitutions go on each recipient, not at the top of the request`. +- **Body**: always the template's, and the message has no AMP part. `html_content`, `text_content` and `amp_content` are refused with `400 is not accepted, the template supplies the body`. +- **`attachments`, `headers`, `tags`, `tracking`, `retention`, `schedule`, `sandbox`**: work as in [Create Message](/api-reference/messages/create-message). Sandbox sends are a good way to check your substitutions without using credits. + +The [Node.js SDK](/guides/nodejs-sdk) (`@ahasend/sdk` 0.3.0 and later) and the [Go SDK](/guides/go-sdk) (v0.3.0 and later) cover template sends; see the [changelog](/changelog) for the release. + +### Permissions + +Sending a template needs a key that can send from the sender's domain: `messages:send:all` or the domain-specific send scope. No `templates` scope is needed to send. Creating, editing and publishing templates needs `templates:write`; deleting needs `templates:delete`. See [Permission scopes](/api-reference/scopes). + +## Errors You Will See + +| Response | Cause | Fix | +| --- | --- | --- | +| `404 template not found` | `template_id` is not a template of this account, or the template was deleted | Copy the ID from the template page or [List Templates](/api-reference/templates/get-templates) | +| `400 template has no published content, design it and publish it` | The template was never published | Click Publish on the template page | +| `400 the template has no subject, publish one on the template page or pass subject` | No `subject` in the request and none published on the template | Set a subject on the template page, or send `subject` | +| `400 missing required template variables: anna@example.com needs first_name, order_id` | A recipient lacks a required variable. No message in the request is sent | Add the value, or give the variable a fallback in the design | +| `400 from is required because the template has no default sender` | No `from` in the request and none on the template | Set a default sender on the template page, or send `from` | +| `403` | The key cannot send from the sender's domain, or the domain is paused | Check the key's scopes and the domain's status | +| `403 this api key is not authorized to send messages` | No `from` in the request and the key can send from no domain | Send `from`, or give the key a send scope | + +## Tracking + +- Every message sent from a template records the template: [Get Message](/api-reference/messages/get-message) returns its `template_id`, and the template page shows delivery statistics for the last 30 days. +- Templates are available through the [MCP server](/mcp-server): an AI agent can create, change, publish and restore templates, and send one. + +## Related + +- [Create Template](/api-reference/templates/create-template), [Update Template](/api-reference/templates/update-template), [Publish Template](/api-reference/templates/publish-template), [List Template Versions](/api-reference/templates/get-template-versions) +- [Create Template Message](/api-reference/messages/create-template-message) +- [Sending guide](/send-api/send-email), [Sandbox](/send-api/sandbox), [Permission scopes](/api-reference/scopes) From 699092c842f707b50ffdcc360b5ef07a48afefb6 Mon Sep 17 00:00:00 2001 From: Mark Kraakman Date: Thu, 15 Oct 2026 10:19:59 +0200 Subject: [PATCH 2/4] Docs: homepage and facts cover campaigns - Homepage title, description and intro now say transactional email and campaigns; cards for Transactional Templates, Campaigns and Marketing Domains; Campaign Builder in the feature list and next steps - Facts: shared monthly quota, Campaign Builder row on all plans, template and campaign limits --- facts.mdx | 10 +++++++--- index.mdx | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/facts.mdx b/facts.mdx index 7f19b22..b6fc9c1 100644 --- a/facts.mdx +++ b/facts.mdx @@ -5,7 +5,7 @@ description: "Check AhaSend's EU data location, free email allowance, plan featu icon: "circle-info" --- -AhaSend is a European transactional email service for developers: send through a REST API, SMTP relay, CLI or the official Node.js and Go SDKs, with data stored in the EU and 1,000 free emails per month. +AhaSend is a European email service for developers: send transactional email through a REST API, SMTP relay, CLI or the official Node.js and Go SDKs, and newsletters and campaigns with Campaign Builder, with data stored in the EU and 1,000 free emails per month shared by both. ## Company and Service @@ -23,7 +23,7 @@ AhaSend is a European transactional email service for developers: send through a | Feature | Free | Pro | Max | |---|---|---|---| -| Emails included per month | 1,000 | 25,000 | 100,000 | +| Emails included per month, transactional and campaigns combined | 1,000 | 25,000 | 100,000 | | [Sending domains](/domains) | 3 | Unlimited | Unlimited | | [Metadata retention](/retention) | 1–7 days | 1–14 days | 1–30 days | | [Message data retention](/retention) | 1–7 days | 0–14 days (0 needs approval) | 0–30 days (0 needs approval) | @@ -32,6 +32,7 @@ AhaSend is a European transactional email service for developers: send through a | [Bring your own IP](/scale/byoip) | No | No | Add-on | | [S3 archiving](/retention/s3), [DSN reports](/integrations/dsn-reports), [OIDC single sign-on](/security/sso) | No | No | Yes | | [Sub-accounts](/scale/sub-accounts), [DNS whitelabel](/scale/dns-whitelabel), [per-domain DKIM selectors and bring-your-own DKIM](/api-reference/domains/create-domain) | Platform Partners | Platform Partners | Platform Partners | +| [Campaign Builder](/api-reference/campaigns/overview): contacts and lists, campaign templates, scheduling and test sends, campaign reports, [marketing domains](/deliverability#which-sending-type-should-my-domain-use) with a separate [daily marketing limit](/deliverability/marketing-limit) | Yes | Yes | Yes | | Support | Community, best effort | Every day 9:00–21:00 CEST | Premium, 4-hour response time | | [API](/send-api/send-email), [SMTP](/smtp), [transactional templates](/send-api/templates), [sandbox](/send-api/sandbox), [webhooks](/integrations/webhooks), [inbound routing](/integrations/routing), [tracking](/tracking/open-tracking), [2FA](/security/2fa) and [2FA enforcement](/security/2fa-enforcement), [scoped keys](/security/scoped-credentials), [IP allow lists](/security/ip-allow-lists), [Reputation Shield](/security/reputation-shield), [signed webhooks and routes](/api-reference/webhooks/security), [automatic DKIM rotation](/domains) | Yes | Yes | Yes | @@ -47,6 +48,9 @@ New accounts keep message metadata and message data for 7 days. Zero data retent | API request limit | 100 requests per second with bursts of 200 | [API rate limits](/api-reference/rate-limits) | | Statistics, stream and trigger endpoints | 1 request per second | [API rate limits](/api-reference/rate-limits) | | Create Message recipients | Up to 100 per request | [Send email](/send-api/send-email) | +| Create Template Message recipients | Up to 100 per request | [Transactional templates](/send-api/templates) | +| Campaign lists | 1 to 50 lists per campaign | [Campaigns](/api-reference/campaigns/overview) | +| Template content size | MJML, HTML and custom text each up to 200 KB | [Transactional templates](/send-api/templates) | | Scheduled sending | First attempt within 7 days; expiry within 8 days | [Create Message](/api-reference/messages/create-message) | | SMTP host | `send.ahasend.com` | [SMTP settings](/smtp) | | SMTP ports and encryption | 25, 587 and 2525; STARTTLS on all ports; AUTH PLAIN only after STARTTLS | [SMTP settings](/smtp) | @@ -64,6 +68,6 @@ Hourly sending limits apply to transactional mail. They start low for new accoun ## Related Guides - [Start sending](/quickstart), [Domain setup](/domains), [Send-only API keys](/send-api/credentials). -- [Sending guide](/send-api/send-email), [SMTP settings](/smtp), [CLI quickstart](/cli/quickstart). +- [Sending guide](/send-api/send-email), [Transactional templates](/send-api/templates), [Campaigns](/api-reference/campaigns/overview), [SMTP settings](/smtp), [CLI quickstart](/cli/quickstart). - [SDK and framework guides](/guides), [Product releases](/changelog), [Retention rules](/retention). - [Tracking setup](/tracking/open-tracking), [Sandbox behavior](/send-api/sandbox), [Dedicated IP availability](/scale/dedicated-ips). diff --git a/index.mdx b/index.mdx index d7c594d..b9632e0 100644 --- a/index.mdx +++ b/index.mdx @@ -1,7 +1,7 @@ --- -title: "Transactional Email API and SMTP Relay Docs" +title: "Transactional Email, SMTP Relay and Campaigns Docs" sidebarTitle: "Introduction" -description: "AhaSend developer docs: send transactional email with the REST API, SMTP relay, CLI or SDKs, verify your sending domain, and track events with webhooks." +description: "AhaSend developer docs: send transactional email with the REST API, SMTP relay, CLI or SDKs, send newsletters with Campaign Builder, verify your sending domain, and track events with webhooks." icon: "book-open" --- @@ -10,7 +10,7 @@ import EmailHelpGuides from "/snippets/email-help-guides.mdx"; import OfficialSdks from "/snippets/official-sdks.mdx"; -AhaSend is a European transactional email service for developers: send through a REST API, SMTP relay, CLI or the official Node.js and Go SDKs, with data stored in the EU and 1,000 free emails per month. +AhaSend is a European email service for developers: send transactional email through a REST API, SMTP relay, CLI or the official Node.js and Go SDKs, and newsletters and campaigns with Campaign Builder, with data stored in the EU and 1,000 free emails per month shared by both. **New to AhaSend?** Start with our [Quickstart Guide](/quickstart) to send your first email in under 5 minutes, or [create your free account](https://dash.ahasend.com/user/register) to get 1,000 free emails per month. @@ -23,6 +23,7 @@ AhaSend is a European transactional email service for developers: send through a ### Built for Developers - **[Clean, intuitive REST APIs](/api-reference)** and [SMTP relay](/smtp) +- **[Campaign Builder](/api-reference/campaigns/overview)** on every plan: contacts, lists, templates and campaign reports, on separate marketing infrastructure - **[Powerful CLI tool](/cli)** for development, testing, and automation - **Sandbox Mode** for [SMTP](/send-api/sandbox) and [API](/send-api/sandbox) testing and development - **[Engineering-led support](mailto:support@ahasend.com)** from real developers, not chatbots @@ -58,6 +59,15 @@ AhaSend is a European transactional email service for developers: send through a Command-line interface for developers. Send emails, manage webhooks, test integrations locally. + + Store a design once and send it by ID with values per recipient. + + + Newsletters and campaigns to contact lists, in the dashboard or through the API. + + + Marketing mail runs on separate infrastructure with its own limit, so it never touches your transactional reputation. + ## Popular Integration Guides @@ -106,6 +116,7 @@ Replace placeholder values with your API keys and verified domain. Use [sandbox 2. **[Set up your domain](/domains)**, authorizing AhaSend to send emails on your behalf 3. Use our **[APIs](/send-api/send-email)** or **[SMTP](/smtp)** to send your first email 4. **[Configure webhooks](/integrations/webhooks)** to track email events in real-time +5. **[Send a campaign](/api-reference/campaigns/overview)** to a contact list when you have a newsletter to send Ready to start sending emails that actually reach the inbox? Let's get you set up! 🚀 From 66ac97389032d2e515ed72461a29cc28c1dd9327 Mon Sep 17 00:00:00 2001 From: Mark Kraakman Date: Thu, 15 Oct 2026 10:21:39 +0200 Subject: [PATCH 3/4] Docs: menu icon for Transactional Templates --- send-api/templates.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/send-api/templates.mdx b/send-api/templates.mdx index d48f755..d7b6af5 100644 --- a/send-api/templates.mdx +++ b/send-api/templates.mdx @@ -2,6 +2,7 @@ title: "Transactional Templates" sidebarTitle: "Templates" description: "Store an email design once in AhaSend and send it by ID through the API, with your own values for each recipient." +icon: "file-code" --- A transactional template is an email design that lives in your AhaSend account. Your code sends the template's ID and a few values per recipient; AhaSend supplies the body, the subject and the sender. The person who designs the email can change it in the dashboard without a code release. From bbe73ff041f16d13fbb099ca9047208b04ffad08 Mon Sep 17 00:00:00 2001 From: Mark Kraakman Date: Thu, 15 Oct 2026 10:26:38 +0200 Subject: [PATCH 4/4] Docs: fit index and templates descriptions to 120-160 characters --- index.mdx | 2 +- send-api/templates.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.mdx b/index.mdx index b9632e0..4247b82 100644 --- a/index.mdx +++ b/index.mdx @@ -1,7 +1,7 @@ --- title: "Transactional Email, SMTP Relay and Campaigns Docs" sidebarTitle: "Introduction" -description: "AhaSend developer docs: send transactional email with the REST API, SMTP relay, CLI or SDKs, send newsletters with Campaign Builder, verify your sending domain, and track events with webhooks." +description: "AhaSend docs: send transactional email with the REST API, SMTP relay, CLI or SDKs, send campaigns with Campaign Builder, and track events with webhooks." icon: "book-open" --- diff --git a/send-api/templates.mdx b/send-api/templates.mdx index d7b6af5..f5460d8 100644 --- a/send-api/templates.mdx +++ b/send-api/templates.mdx @@ -1,7 +1,7 @@ --- title: "Transactional Templates" sidebarTitle: "Templates" -description: "Store an email design once in AhaSend and send it by ID through the API, with your own values for each recipient." +description: "Store an email design once in AhaSend and send it by ID through the API, with your own values for each recipient. Covers variables, publishing and errors." icon: "file-code" ---