Interactive Transactional Emails via the Send API

Most transactional-email senders only render plain HTML. POST /api/v1/send in template mode instead renders one of your own studio projects — full fallback engine and interactive blocks included — with mergeData standing in for the row of dynamic values, so a receipt or confirmation email your backend triggers can carry a Rating block or a Product upsell exactly like a marketing send would.

Subject

Your order receipt

Most transactional-email senders only render plain HTML. POST /api/v1/send in template mode instead renders one of your own studio projects — full fallback engine and interactive blocks included — so a receipt or confirmation your backend triggers can carry a Rating block or a Product upsell exactly like a marketing send would.

A receipt is one of the highest-open-rate emails a company sends — and almost always the plainest, because it's usually generated by whatever transactional library was easiest to wire up, not by anything with a design system attached.

Design it once, trigger it from your backend

Build the receipt or confirmation as a normal studio project, with whichever blocks make sense — a Rating for post-purchase CSAT, a related-item Product upsell. Your backend then calls the Send API in template mode with the project's ID and a mergeData object standing in for that specific order's dynamic values.

Mark it transactional, correctly

Setting type to "transactional" bypasses unsubscribe-suppression — a receipt still needs to reach someone who opted out of marketing — but never bounce-suppression, since a genuinely bad address shouldn't keep being sent to regardless of email type.

It's authenticated like any API integration

A per-owner named API key, Bearer-authenticated, mints and revokes from the Developers section of the dashboard. An Idempotency-Key header keeps a retried request from sending the receipt twice.

What doesn't carry over

Freeform mode (no projectId, just raw html/text) skips the rendering pipeline entirely — no merge tags, no fallback engine, sent exactly as given. That's the right choice for something like a one-off OTP code; template mode is what's worth using once the email itself benefits from an interactive block.

Getting started

Build the transactional template as a studio project with the interactive blocks you want, mint an API key under Developers, and call POST /api/v1/send in template mode with your mergeData and type: "transactional".

A typical build-and-send sequence

  1. 1

    Build the transactional template as a studio project

    Design the receipt or confirmation once in the studio, with whichever interactive blocks make sense — a Rating, a related-item Product, a status Button.

  2. 2

    Mint an API key

    Create a named API key under Developers in the dashboard — it authenticates every Send API call as a Bearer token.

  3. 3

    Call the Send API in template mode

    Your backend POSTs to /api/v1/send with the project's ID and a mergeData object standing in for that specific order or event's dynamic values.

  4. 4

    Mark it transactional

    Set type to "transactional" so the send bypasses unsubscribe-suppression (bounce-suppression still applies) — the right semantics for a receipt the recipient needs regardless of marketing preferences.

Frequently asked questions

Can a transactional email sent via the API include the same interactive blocks as a regular campaign?

Yes — template mode renders an existing studio project exactly as renderEmail() would for any other send, so every block and the full three-tier fallback engine carry over identically.

How does per-recipient data get into the template, since there's no data source row for an API call?

The mergeData object in the request body stands in for a data-source row — up to 100 flat key/value fields resolve into the project's {{field}} merge tags for that one call.

What's the difference between "transactional" and "marketing" type on the same endpoint?

The type field controls which suppression list is checked: transactional bypasses unsubscribe-suppression (a receipt still needs to reach someone who opted out of marketing) but never bounce-suppression; marketing respects both.

Is there a rate limit on the Send API?

Yes — 60 requests per minute per API key, plus the same per-owner monthly volume cap every sending path shares; an Idempotency-Key header prevents a retried request from sending twice.

Can I send a freeform HTML email through the same endpoint instead of a studio project?

Yes — omitting projectId and instead sending html/text directly uses freeform mode, sent as-is with no rendering pipeline or merge tags; template mode (with projectId) is what carries the interactive blocks and fallback engine.

Build this in the studio

Start on the free plan — every interactive block and the full fallback engine are included on every tier.