v101

latestOpenAPI 3.1.0raw.githubusercontent.com2026-08-08235133843.7 KB
Transactional

Create transactional email

Creates a saved transactional email template from exactly one of prompt, HTML, or Sequenzy blocks. Prompt-created templates default to disabled.

post/transactional

Request body

htmlstring

Raw HTML body. Provide either html or blocks, not both.

namestring required
slugstring

Optional API slug used when sending by slug. If omitted, one is generated from the name.

subjectstring

Required with HTML or blocks; optional with prompt, where it overrides the generated subject.

previewTextstring nullable
promptstring

Natural-language request for branded transactional blocks.

stylestring

Generation style; valid only with prompt.

tonestring

Generation tone; valid only with prompt.

enabledboolean

Defaults to false with prompt and true with explicit HTML or blocks.

Example request

{
  "html": "<h1>Hello</h1>",
  "blocks": [
    {
      "id": "block_123",
      "type": "html",
      "content": "<h1>Hello</h1>",
      "styles": {
        "backgroundColor": "#f8fafc",
        "backgroundOpacity": 80,
        "textColor": "#111827",
        "borderRadius": 12,
        "borderColor": "#cbd5e1",
        "borderWidth": 1
      },
      "conditions": [
        {
          "id": "c1",
          "value": "plan:pro"
        }
      ]
    }
  ],
  "name": "Password Reset",
  "slug": "password-reset",
  "subject": "Reset your password, {{NAME}}",
  "previewText": "Use this link to reset your password.",
  "enabled": true
}

Response

Transactional email created

successboolean
warningsstring[]

Non-blocking advisories about a successful write. Present when an input was discarded or did not take effect as requested. This includes block fields that do not render as their names suggest, sequence email-step formatting restored on top of submitted blocks, and sender-identity conflicts such as a replyToName that differs from the saved profile. Each message identifies the affected input and gives recovery guidance. Absent when there is nothing to report.

Example response

{
  "success": true,
  "transactional": {
    "id": "tx_abc123",
    "name": "Welcome Email",
    "slug": "welcome-email",
    "emailId": "email_123",
    "enabled": true,
    "variables": [
      "NAME",
      "COMPANY",
      "PRODUCT"
    ],
    "subject": "Welcome, {{NAME}}",
    "previewText": "Your account is ready.",
    "emailPreset": "branded",
    "blocks": [
      {
        "id": "block_123",
        "type": "html",
        "content": "<h1>Hello</h1>",
        "styles": {
          "backgroundColor": "#f8fafc",
          "backgroundOpacity": 80,
          "textColor": "#111827",
          "borderRadius": 12,
          "borderColor": "#cbd5e1",
          "borderWidth": 1
        },
        "conditions": [
          {
            "id": "c1",
            "value": "plan:pro"
          }
        ]
      }
    ],
    "email": {
      "id": "email_123",
      "companyId": "company_123",
      "name": "Welcome email",
      "subject": "Welcome",
      "previewText": "Here's what to do next",
      "blocks": [
        {
          "id": "block_123",
          "type": "html",
          "content": "<h1>Hello</h1>",
          "styles": {
            "backgroundColor": "#f8fafc",
            "backgroundOpacity": 80,
            "textColor": "#111827",
            "borderRadius": 12,
            "borderColor": "#cbd5e1",
            "borderWidth": 1
          },
          "conditions": [
            {
              "id": "c1",
              "value": "plan:pro"
            }
          ]
        }
      ]
    }
  },
  "warnings": [
    "blocks[0].styles.color is not a supported field and was ignored. Button label color comes from the block-level `buttonTextColor` field. Supported styles fields: backgroundColor, backgroundOpacity, bleed, borderColor, borderRadius, borderWidth, paddingBottom, paddingLeft, paddingRight, paddingTop, textAlign, textColor."
  ]
}