Create a template
Brand → Transactional → New template. Each template has:
- An ID (auto-generated
tpl_xxxx) — what you reference from your code. - Subject + HTML + optional plaintext.
- Variable placeholders:
{{name}},{{link}}, etc. - Rate limit (per recipient, per hour) — guards against runaway loops.
Send a transactional email
curl -X POST https://your-app.com/api/public/transactional/<API_KEY>/send \
-H "Content-Type: application/json" \
-d '{
"template_id": "tpl_welcome",
"to": "[email protected]",
"variables": {
"name": "Alice",
"verify_link": "https://yourapp.com/verify?t=xxx"
}
}'Returns 202 Accepted with a send ID:
{ "send_id": "ts_8f2a...", "queued_at": "2026-04-29T18:42:33Z" }Authentication
- API key in URL (above), or
- Bearer header:
Authorization: Bearer <API_KEY>
Find the brand API key in Brand settings → API. Treat it as a secret.
Rate limits
Default: 100/hour per recipient. Configurable per template. Trips return 429 Too Many Requests with a Retry-After header.
Variables
Same syntax as campaigns: {{variable}}. Send the values in the JSON body's variables object. Any field not in the object renders as empty string in the rendered email.
Tracking + bounce events
Transactional sends share the same tracking pipeline as campaigns. Open and click events land in the brand-wide analytics; bounces/complaints unsubscribe the contact (if one exists for the email).
Don't use this for campaigns
The Transactional API has no built-in unsubscribe footer. Use it only for legitimate transactional flows (receipts, password resets, one-off notifications). For marketing, use Campaigns.