Platform · Transactional API

One endpoint. Every transactional email.

Send order confirmations, password resets, and shipping alerts from your backend. Slug-based templates, dynamic variables, delivery logs, and webhooks — in a single REST call.

JavaScriptPOST /api/v1/send/{slug}
// POST /api/v1/send/order-confirmation

await fetch("https://api.artmail.io/v1/send/order-confirmation", {
  method: "POST",
  headers: {
    "Authorization": "Bearer am_live_sk_...",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    to: "sarah@example.com",
    variables: {
      customer_name: "Sarah",
      order_number: "#1042",
      order_total: "$89.00",
      items: [ ... ],
      tracking_url: "https://track.example.com/1042"
    }
  })
})

One endpoint · Slug-based templates · HMAC webhooks · BYOS supported · Suppression built in

From request to inbox in under a second

Your Backend

Issues POST with API key

Artmail API

Validates key, checks suppression

Template + Variables

Renders MJML, optional brand

SES / Resend

BYOS or managed router

Delivery Events

Logs + HMAC webhooks

Slug-based templates with dynamic variables

Define templates in Artmail with a slug like order-confirmation or password-reset. Your backend calls the slug — never raw HTML.

Variables use {{mustache}} syntax and get validated against an optional JSON schema before rendering.

📄 order-confirmation

Subject: "Order {{order_number}} confirmed"

Hi {{customer_name}},

Your order {{order_number}} for {{order_total}} is confirmed.

[Track Your Order]

{{tracking_url}}

Variables: customer_name, order_number, order_total, tracking_url, items[]

Marketing builds the template in Artmail's drag-and-drop editor. Engineering calls the slug. Both stay aligned without syncing HTML files.

Common transactional emails

Order Confirmation

"Your order #{{order_number}} is confirmed"

Password Reset

"Reset your password with this link"

Shipping Notification

"Your order shipped via {{carrier}}"

Payment Receipt

"Payment of {{amount}} received"

Welcome Email

"Welcome to {{company_name}}, {{first_name}}"

Account Alert

"New login from {{device}} in {{location}}"

Or generate any template with AI — describe what you need and Artmail builds the MJML, subject line, and variable schema. Explore AI features →

Receipts that look like your brand, not a plain text dump

Default

Order #1042

Thank you for your purchase.

Track order

Your Store

With brand styles

Order #1042

Thank you for your purchase.

Transactional templates optionally inherit your brand style — colors, fonts, logo, button design. Set it once, applied to every receipt and alert.

Track every email from queue to inbox

📤 Queued

API call accepted, email queued for delivery

0ms

✈️ Sent

Handed off to SES/Resend for delivery

~200ms

📬 Delivered

Accepted by recipient's mail server

~1.2s

👁️ Opened

Recipient opened the email

4m 23s

🔗 Clicked

Recipient clicked the tracking URL

4m 51s

Alternative path

🔴 Bounced

Recipient address doesn't exist

~1.5s

⚠️ Complained

Marked as spam by recipient

~12h

Real-time delivery events piped to your stack

Webhook payload
{
  "id": "evt_a1b2c3",
  "type": "email.delivered",
  "timestamp": "2026-03-24T14:22:01Z",
  "data": {
    "to": "sarah@example.com",
    "from": "orders@yourstore.com",
    "subject": "Order #1042 Confirmed",
    "template_slug": "order-confirmation",
    "message_id": "msg_x7y8z9"
  }
}

Headers on every webhook:

  • X-ArtMail-Signature — HMAC-SHA256 of the payload
  • X-ArtMail-Timestamp — Unix timestamp for replay protection
EventDescription
email.queuedEmail accepted and queued
email.sentHanded off to sending provider
email.deliveredAccepted by recipient server
email.openedRecipient opened the email
email.clickedRecipient clicked a link
email.bouncedDelivery failed (hard/soft)
email.complainedMarked as spam

Subscribe to specific events per webhook endpoint. Route delivery confirmations to your order system, bounces to your CRM, complaints to your support queue.

Every send, logged and searchable

🔍 Filter: All templates ▾Last 7 days ▾All statuses ▾
Deliveredsarah@example.comorder-confirmation2s ago
Deliveredmike@example.comshipping-update5m ago
Openedanna@example.compassword-reset12m ago
🔴 Bouncedold@defunct.compayment-receipt1h ago
Deliveredteam@startup.iowelcome3h ago

Filter by template, recipient, status, or date range. Click any entry for the full delivery timeline, rendered HTML preview, and headers.

Transactional email at infrastructure pricing

Your transactional emails go through the same BYOS router as campaigns and automations. Connect AWS SES or Resend, and every API call sends at your provider's direct pricing. Your code doesn't change — only the bill does.

Same suppression checks, same delivery logs, same HMAC webhooks. Automations and transactional share one router. Metrics land in analytics.

100K transactional/month

Postmark~$150
SendGrid~$120
Artmail + SES~$10 + plan

Learn more about BYOS →

No feature gating. No per-email add-ons.

Slug-based templatesFull delivery logsHMAC webhooksBrand stylesSuppression list

Every paid plan includes the full transactional API — templates, logs, webhooks, brand styles, and suppression. Addresses on the suppression list are blocked before send. Same features whether you send 1,000 or 500,000 emails.

Transactional vs. marketing email — you need both

📄 Transactional
📢 Marketing
Triggered by user action
Sent by you on schedule
Expected by recipient
Promotional by nature
Order receipts, resets
Campaigns, newsletters
Highest open rates
Revenue-driving at scale
API-triggered
Built in the dashboard
No unsubscribe needed*
Unsubscribe required

* Critical transactional emails (password resets, receipts) don't require unsubscribe links under CAN-SPAM.

Artmail handles both in one platform. Your brand styles, deliverability tools, and sending infrastructure are shared — no separate vendor for transactional and another for campaigns.

Explore email marketing →

Skip the HTML. Describe what you need.

"Create an order confirmation email with order number, items table, shipping address, and a track order button."

Template: order-confirmation

📝 Subject: "Order {{order_number}} Confirmed"

📦 Variables: customer_name, order_number, order_total, items[], tracking_url, shipping_address

🎨 Brand style: Applied automatically

Frequently asked questions

Email triggered by a user action — order confirmations, password resets, shipping notifications, payment receipts. Unlike marketing email, transactional messages are expected by the recipient and typically have the highest open rates of any email type.

Ship your first transactional email today

Create an account, build a template, call the API from staging. Free plan includes the full transactional API.