Use the transactional endpoints when you want to send a saved template directly, and to manage those templates programmatically.
  • GET /v1/transactional lists available templates.
  • POST /v1/transactional/send renders and sends one template to one recipient.
  • POST /v1/transactional/create creates a new template.
  • GET /v1/transactional/{templateId} fetches a single template’s metadata.
  • PUT /v1/transactional/update updates an existing template.
  • POST /v1/transactional/delete deletes a template.
  • GET /v1/transactional/{templateId}/content/{locale} fetches a locale’s content tree.
  • PUT /v1/transactional/{templateId}/content/{locale} sets a locale’s content tree.
Throughout these endpoints, templateId is the workspace-unique slug ID (the id returned by the list endpoint), not the internal UUID.

Listing templates

GET /v1/transactional returns every active template in the workspace, including its rendered body and its variables:
  • htmlBody / textBody are the rendered body for the template’s primary locale, with {{variable}} placeholders preserved. Use GET /v1/transactional/{templateId}/content/{locale} when you need the source component tree or a specific locale.
  • variables are the placeholders you supply in the send endpoint’s dataVariables.
  • autoResolvedVariables are platform-filled placeholders (for example company_name, date, and any contact.* field). MailKatana resolves these automatically at send time — do not pass them in dataVariables. They are listed here so you know what the template references.
Both variable arrays carry the same shape: name, label, kind, data_type, required, auto_resolved, editable_in_rule, and optional sources / child_fields / legacy_aliases.

Email content is a component tree

Email bodies are built from a small, fixed set of React Email components rather than raw HTML. A template’s body (per locale) is a JSON component tree — an ordered list of nodes:
Available component types: container, section, header, footer, heading, text, button, link, image, list. {{variable}} placeholders are allowed in any text prop and are substituted at send time. The platform renders the tree to HTML/text and caches it; you never send raw HTML.

Example send

The send response preserves success and supplies the public Activity ID:
Use messageId to correlate the request with Email Activity. Acceptance does not prove delivery or Inbox placement. A timeout remains ambiguous; do not blindly resend it.

Managing templates

Create a template with metadata and an optional content tree for the primary locale. The response id is the slug ID you pass to send, update, delete, content, and get-by-id endpoints.
Update applies a partial change — metadata fields present in the body are modified; when content is present it replaces the primary-locale tree:
Set or fetch a specific locale’s content tree:
Delete a template:
Delivery-rule automation remains managed in the MailKatana app.

Rendering rules

  • Email bodies render from the component tree; dataVariables use simple {{key}} replacement against the rendered subject/body.
  • Locale fallback order is exact locale, base locale, workspace brand primary locale, then English.

Attachments

Attachments are base64-encoded and support these content types:
  • application/pdf
  • image/png
  • image/jpeg
  • text/plain
  • text/csv
Limits:
  • up to 3 attachments
  • 10 MB decoded per file
  • 20 MB decoded total
  • 25 MB total request size

Contact linking

When addToContact is true, MailKatana best-effort creates or updates the recipient as a contact and links the outbound recipient row without changing marketing consent.