POST /v1/emails
A send is a single JSON request. The minimum is a from address, a to array, a subject, and a body — either html, text, or both. A successful call returns 202 Accepted with a message id and a status of queued; delivery happens asynchronously and surfaces over webhooks and metrics.
202 Accepted
Test mode. Before you verify a domain, send from the shared onboarding domain — it can only deliver to your own address. To email anyone from your own brand, verify a domain (DKIM + SPF + DMARC, guided), then use it as your
from.Recipients
Every address is an object —{ email } with an optional name for the display name. to, cc, bcc, and replyTo are all arrays, so you can pass several at once.
Multiple recipients
- to — primary recipients. At least one is required.
- cc — carbon copies, visible to everyone.
- bcc — blind copies, hidden from other recipients.
- replyTo — where replies should go when it differs from
from(e.g. send fromnoreply@, reply tosupport@).
From a verified domain
Subject and body
Thesubject is required for an inline send. For the body, provide html, text, or both. Sending both is recommended: clients that can’t render HTML — and many spam filters — fall back to the plain-text part, and a good text alternative improves deliverability.
- html — the rich body. Inline your CSS; most mail clients strip
<style>blocks and external stylesheets. - text — the plain-text alternative. If you only send HTML, recipients on text-only clients see nothing.
Templates instead of inline bodies. To reuse a body across sends, store it once and send by
templateId with data for the merge variables. You may not combine templateId with inline html/text. See Templates.Attachments
Passattachments as an array. Each item needs a filename, the base64-encoded content, and a contentType. Encode the raw bytes — don’t wrap them in a data URL.
Custom headers and tags
headers is a flat string → string map merged into the outgoing message — useful for List-Unsubscribe, your own reference IDs, or any header your downstream systems expect. tags is a separate string → string map stored on the message for filtering and analytics; tags travel on the delivery events you receive over webhooks, but are never added to the email itself.
Headers + tags
Request fields
The sender.
{ email, name? }. The email must belong to a verified domain (or the onboarding domain in test mode).Primary recipients,
{ email, name? }. At least one.The subject line. Optional only when
templateId supplies it.The HTML body. Provide
html, text, or both.The plain-text body / alternative part.
Carbon-copy recipients.
Blind-carbon-copy recipients.
Where replies are routed when different from
from.Files to attach. Each is
{ filename, content, contentType }, where content is base64-encoded bytes.A
string → string map of custom headers added to the message.A
string → string map stored on the message for filtering and analytics.Merge variables for
templateId.ISO-8601 timestamp to send the message in the future. See Batch & scheduled.
Next
Batch & scheduled
Send up to 100 in one request, or schedule a send for later.
Templates
Store reusable HTML with
{{merge}} variables.Idempotency
Retry POSTs safely with an idempotency key.
API reference
The full
POST /v1/emails contract.