Skip to main content

Sending email

POST /sending/messages accepts a send with your API key as X-API-Key. The sender domain must already be verified (see Domains).

Request rules

  • envelopeSender is the sender email address on your verified domain.
  • to, cc and bcc are lists of email addresses. Supply at least one recipient in total, with no more than 10,000 per request.
  • content.from is the visible sender, optionally with a display name.
  • content.subject is required. Put your message in content.htmlBody, content.textBody, or both.
  • content.replyTo optionally directs replies to another address.
  • For attachments, use the separate flow in Attachments.

Responses

  • 200 with success: true — accepted for sending. The sending result is in data.result.
  • 400 — invalid recipient or message content.
  • 401 — missing, invalid or revoked API key.
  • 403 — domain or sending permission unavailable for this account.
  • 429 — sending allowance or rate limit exceeded.

Check what happened next

Acceptance is separate from delivery. Review delivery activity in your account and check an inbox you control before connecting a live signup or checkout flow. Sending is subject to your account plan and configured provider limits. See integration examples for JavaScript, TypeScript, PHP, Go, Rust and Python.

Send normal text without HTML

Use textBody and leave out htmlBody. Newlines are preserved. Tags such as <b> remain literal text.

Offer both plain text and HTML

Provide both bodies in the same content object so the receiving email client can choose its preferred format. Write equivalent content in each version. The API does not generate the plain-text version for you.
To include PDFs, images or other files, use the attachment examples rather than adding local paths to this JSON payload.