Send Email
Send a transactional email via the REST API.
Send a single transactional email. Use Batch to send up to 100 different emails in one API call.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
to | string | object | array | Yes | Recipient(s). A single email string, a {name, email} object, or an array of either. |
from | string | object | Yes | Sender — must be a verified domain. A plain email string or a {name, email} object. |
subject | string | Yes* | Email subject line. Required unless template is set. |
body | string | Yes* | HTML email body. Supports {{variable}} placeholders. Required unless template is set. |
template | string | No | ID of a saved template to use instead of subject/body. |
data | object | No | Variables merged into {{placeholder}} slots in body or the template. |
reply | string | No | Reply-to email address. |
headers | object | No | Custom email headers as key/value pairs. |
attachments | array | No | Files to attach — see below. |
subscribed | boolean | No | Set true to subscribe the contact, false to mark them unsubscribed. Default: preserves existing state (new contacts default to unsubscribed). |
Attachment object
| Field | Type | Description |
|---|---|---|
filename | string | File name shown in the email client |
content | string | Base64-encoded file content |
contentType | string | MIME type, e.g. application/pdf |
Response
{
"success": true,
"data": {
"emails": [
{
"contact": { "id": "con_01HV3K...", "email": "jane@example.com" },
"email": "3f2a91b0-..."
}
],
"timestamp": "2026-01-15T10:30:00.000Z"
}
}The email field in each result is the email record ID. Pass it to GET /emails/:id to retrieve delivery status.
Send to multiple recipients
Pass to as an array to send the same email to multiple addresses in one call. Each recipient gets their own email record:
{
"to": [
"alice@example.com",
{ "name": "Bob Smith", "email": "bob@example.com" }
],
"from": "hello@yourdomain.com",
"subject": "Team update",
"body": "<p>Hi {{name}}, here is your update.</p>",
"data": { "update": "Q3 results are in" }
}Use a template
{
"to": "jane@example.com",
"from": "hello@yourdomain.com",
"template": "tmpl_01HV3K...",
"data": { "name": "Jane", "plan": "Pro" }
}Error codes
| Code | Description |
|---|---|
VALIDATION_ERROR | Missing required field or malformed body |
DOMAIN_NOT_VERIFIED | from domain has not been verified |
NOT_FOUND | Template ID not found or not owned by your project |
RATE_LIMIT_EXCEEDED | Too many requests — back off and retry |

