Send Email

Queue one transactional email. Provide exactly one of html, tiptap, or markdown.

MethodPOST
/api/v2/emails

Queues one transactional email. Permission: emails.

Exactly one of html, tiptap, or markdown. Markdown is rendered to HTML. Omit text to generate it from the rendered HTML. text: "" skips generation.

Unsupported: attachments, template, topic_id, scheduled_at, react, content, contentType.

Body Parameters

NameTypeDescription
fromstringRequired. Sender. Display name is allowed: Acme <[email protected]>. Domain must be verified.
tostring or [string]Required. One recipient. A one-address array is accepted.
subjectstringRequired. Subject line.
htmlstringHTML body. Provide exactly one of html, tiptap, or markdown.
tiptapstring or objectTipTap JSON. Rendered to HTML on send.
markdownstringMarkdown body. Rendered to HTML on send.
textstringPlain-text body. Omit to generate from HTML. Empty string skips generation.
reply_tostring or string[]Reply-To addresses. Stored as an array. SES uses the first address.
ccstring or string[]Carbon copies.
bccstring or string[]Blind carbon copies.
headersobjectExtra MIME headers.
tags{ name, value }[]Metadata tags stored on the email.
previewstringPreview / preheader text.

Options

NameTypeDescription
Idempotency-KeystringOptional header. Repeat the same key to reuse the queued email id.

SDK: pass { idempotencyKey } as the second argument to emails.send.

Response Fields

FieldTypeDescription
idstringQueued email id (eml_...). Fetch the body and last_event with Get Email.

Errors

StatusnameWhen
401missing_api_keyMissing or invalid bearer token
403missing_permissionToken lacks the emails permission
422validation_errorMissing required fields, more than one body format, or unsupported fields