Emails
Send, schedule, list, and inspect emails.
Send an email
POST /emails
| Field | Type | Description |
|---|---|---|
| fromrequired | string | Sender, as Name <addr@domain> or a bare address. The domain must be verified. |
| torequired | string | string[] | Recipient address(es). |
| subject | string | Subject line. Required unless a template supplies it. |
| html | string | HTML body. At least one of html / text / template_id is required. |
| text | string | Plain-text body. |
| cc / bcc / reply_to | string | string[] | Additional recipients and reply address. |
| headers | object | Extra headers to set on the message. |
| attachments | object[] | {"filename", "content"} with base64 content. |
| template_id | string | Use a template for subject/body. |
| template_data | object | Values for the template's {{variables}}. |
| scheduled_at | datetime | ISO 8601 future time — see scheduled sending. |
| tags | object[] | Arbitrary metadata stored with the email. |
{"id": "eml_..."}Supports the Idempotency-Key header — details. Sends are asynchronous; the returned email starts as queued (or scheduled).
Send a batch
POST /emails/batch
Body is an array of up to 100 email objects (same shape as above). Returns {"data": [{"id": "eml_..."}, ...]}. Quota is checked for the whole batch up front.
List emails
GET /emails
| Field | Type | Description |
|---|---|---|
| status | query | Filter by status. |
| q | query | Case-insensitive subject search. |
| limit / offset | query | Pagination (limit ≤ 100). |
{"total": 1204, "data": [{"id", "from", "to", "subject", "status",
"open_count", "click_count", "broadcast_id", "scheduled_at",
"created_at", "last_event_at"}, ...]}The log shows emails inside your plan's retention window — 7 days on Free, 30 on Pro, 90 on Scale. Older entries age out of the API and dashboard and are deleted afterwards.
Export as CSV
GET /emails/export
Streams every email in your retention window as CSV (same status / q filters as the list). Also available as the Export CSVbutton on the dashboard's Emails page — handy for archiving before entries age out.
Retrieve an email
GET /emails/:id
Everything from the list view plus cc, bcc, reply_to, html, text, headers, tags, error, and the full events timeline.
Reschedule or cancel
PATCH /emails/:id
POST /emails/:id/cancel
Both apply only while status is scheduled. PATCH takes {"scheduled_at": "..."} (must be in the future).