Action-based email covers triggered, one-to-one sends driven by a user action or system event — order confirmations, password resets, receipts, account alerts. Uses channel type EMAIL with message_type: MESSAGE. Always billed as Basic Message regardless of HTML length or images.

Request

Authorization
string
required
Bearer <api_key>
Idempotency-Key
string
UUID to prevent duplicate sends on retry.

Body — inline content

{
  "channel_id": "ch_550e8400e29b41d4a716446655440000",
  "to": "customer@arowana.app",
  "subject": "Order #1234 confirmed",
  "message_type": "MESSAGE",
  "content": {
    "html": "<p>Thank you for your purchase. Your order is confirmed.</p>",
    "text": "Thank you for your purchase. Your order is confirmed."
  }
}
channel_id
string
required
Email channel id from the dashboard. Determines the sender domain and identity.
to
string
required
Recipient email address. Checked against suppression lists before send.
subject
string
required
Email subject line. Required unless the template provides it.
message_type
string
required
MESSAGE for action-based sends.
content.html
string
HTML body. Provide both html and text for maximum deliverability.
content.text
string
Plain text fallback. Used by clients that cannot render HTML.

Body — template reference

{
  "channel_id": "ch_550e8400e29b41d4a716446655440000",
  "to": "customer@arowana.app",
  "message_type": "MESSAGE",
  "template_id": "tpl_xxxx",
  "template_version": "3",
  "template_data": {
    "order_number": "1234",
    "customer_name": "Alex"
  }
}
template_id
string
Template id from the dashboard. Mutually exclusive with inline content.
template_version
string
Specific version to render. Omit to use the latest published version.
template_data
object
Variables passed into the template at render time.

Responses

{
  "message_id": "msg_e1f2a3b4",
  "status": "queued",
  "created_at": "2026-03-28T09:00:00Z",
  "billing": {
    "channel": "EMAIL",
    "message_type": "basic_message",
    "hold_amount": 0.09,
    "message_price": 0.09,
    "balance": {
      "free": 49.91,
      "reserved": 0.09,
      "total": 50.00
    },
    "tier": {
      "channel": "EMAIL",
      "current": "tier_1",
      "volume_used": 5200
    }
  }
}
message_id
string
Message id for GET /v1/messages/{id}, revoke, and webhook correlation.
status
string
Initial state — queued. Provider events (delivered, bounced) arrive via webhook.
billing.message_type
string
Always basic_message for email sends.
billing.hold_amount
number
Balance held; email holds typically resolve quickly after provider confirmation.
billing.tier
object