Skip to main content
POST
/
api
/
v1
/
transactional
/
send
Send Transactional Email
curl --request POST \
  --url https://api.sequenzy.com/api/v1/transactional/send \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "to": [
    "<string>"
  ],
  "slug": "<string>",
  "subject": "<string>",
  "body": "<string>",
  "preview": "<string>",
  "variables": {},
  "subscriberExternalId": "<string>",
  "from": "<string>",
  "replyTo": "<string>",
  "attachments": [
    {}
  ]
}
'
{
  "success": true,
  "jobId": "job_xyz789",
  "to": "user@sequenzy.com",
  "transactional": {
    "id": "txn_abc123",
    "slug": "welcome",
    "name": "Welcome Email"
  }
}
Send a transactional email. You can either use a saved template (by slug) or send custom content directly.
A successful response means the email was accepted for background processing. Transactional emails are not blocked by subscriber unsubscribe or double opt-in status. If a recipient is suppressed because of a hard bounce or spam complaint, the worker records the send as suppressed instead of delivering it. Use the sent email details endpoint to inspect the final status.

Request Body

Recipients

to
string | string[]
required
Recipient email address(es). Can be a single email string or an array of up to 50 emails. All recipients will receive the same email and can see each other in the To header.

Option 1: Send via template

slug
string
Template slug (use this OR subject+body)

Option 2: Send direct content

subject
string
Email subject (required if no slug)
body
string
Email HTML body (required if no slug)
preview
string
Preview text

Common fields

variables
object
Template variables for personalization. Values can be scalars, nested objects, or arrays. Repeat blocks read arrays from paths such as items. Raw HTML templates can also use subscriber/custom-attribute conditionals like {{#if subscriber.plan}}...{{else}}...{{/if}} and {{#unless subscriber.plan}}...{{/unless}}.
subscriberExternalId
string
Customer-owned subscriber ID for single-recipient sends. If it matches an existing subscriber, analytics, localization, and engagement attach to that subscriber even if the delivery email changed. Sequenzy also stores this value on the send, so outbound email webhooks include it as external_id even when no subscriber record exists. Maximum length: 255 characters.
from
string
Custom from address. Format: "Name <email>" or just "email". The domain must be verified for your account. If not verified, this field is silently ignored and the default sender profile is used.
replyTo
string
Reply-to address. Format: "Name <email>" or just "email". Can be any valid email address.When reply tracking is disabled, this is sent as the email’s Reply-To header. When reply tracking is enabled, Sequenzy sends a unique trackable Reply-To address instead and stores this value as the forwarding destination for replies.
With reply tracking and reply forwarding enabled, direct-content sends that omit replyTo forward replies to the company’s default reply profile. If no default reply profile is set, Sequenzy uses the first reply profile in the company as a fallback. If no reply profile exists, replies are still captured in Sequenzy but are not forwarded externally. Template sends use the template’s reply profile unless the API request provides replyTo.
attachments
array
File attachments to include with the email. Maximum total size: 40MB.Each attachment object has:
  • filename (required): The name of the file as it will appear to the recipient
  • content: Base64-encoded file content (use this OR path)
  • path: URL to fetch the file from (use this OR content)
You must provide either content or path, but not both.

Example: Send via template

curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@sequenzy.com",
    "subscriberExternalId": "user_123",
    "slug": "welcome",
    "variables": {
      "NAME": "John",
      "LOGIN_URL": "https://sequenzy.com/sign-in"
    }
  }'

Example: Send array data to a repeat block

If a template contains a repeat block with source items and item alias item, child blocks can use merge tags like {{item.title}} and {{item.description}}.
curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "slug": "order-confirmation",
    "variables": {
      "NAME": "John",
      "items": [
        {
          "title": "Pro plan",
          "description": "Monthly subscription"
        },
        {
          "title": "Priority support",
          "description": "Added to your account"
        }
      ]
    }
  }'

Example: Send to multiple recipients

curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["user1@example.com", "user2@example.com"],
    "slug": "invoice",
    "variables": {
      "INVOICE_NUMBER": "INV-2024-001",
      "AMOUNT": "$500.00"
    }
  }'

Example: Send direct content

curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@sequenzy.com",
    "subject": "Your order is confirmed",
    "body": "<h1>Thank you, {{NAME}}!</h1><p>Order #{{ORDER_ID}} confirmed.</p>",
    "variables": {
      "NAME": "John",
      "ORDER_ID": "12345"
    }
  }'

Example: Send with custom from and reply-to

curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "slug": "order-confirmation",
    "variables": {
      "NAME": "John",
      "ORDER_ID": "12345"
    },
    "from": "Notifications <notifications@example.com>",
    "replyTo": "Support <support@example.com>"
  }'

Example: Send with URL-based attachment

curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "slug": "invoice",
    "variables": {
      "INVOICE_NUMBER": "INV-2024-001"
    },
    "attachments": [
      {
        "filename": "invoice.pdf",
        "path": "https://example.com/invoices/INV-2024-001.pdf"
      }
    ]
  }'

Example: Send with Base64 attachment

curl -X POST "https://api.sequenzy.com/api/v1/transactional/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "subject": "Your report is ready",
    "body": "<p>Please find your report attached.</p>",
    "attachments": [
      {
        "filename": "report.csv",
        "content": "TmFtZSxFbWFpbCxTdGF0dXMKSm9obixqb2huQGV4YW1wbGUuY29tLEFjdGl2ZQ=="
      }
    ]
  }'

Responses

{
  "success": true,
  "jobId": "job_xyz789",
  "to": "user@sequenzy.com",
  "transactional": {
    "id": "txn_abc123",
    "slug": "welcome",
    "name": "Welcome Email"
  }
}
Emails are queued for background processing. The jobId can be used to track delivery status. For single-recipient sends without cc or bcc, EMAIL resolves from the recipient address. Pass name, firstName, lastName, FIRST_NAME, or LAST_NAME in variables when a REST API template needs recipient names.
When using multiple to recipients, all recipient addresses are visible to each other. Use single-recipient sends when recipients should not see each other.