Send an email
Send transactional email from a verified domain with an idempotent request.
/v1/emails/sendAuthorization
Bearer token
- Authorizationrequiredheader
Send your API key as
Bearer YOUR_API_KEY.
Headers
AuthorizationrequiredBearer YOUR_API_KEYContent-Typerequiredapplication/jsonIdempotency-KeyrequiredA stable key for this send operation
Body parameters
application/json
fromrequiredstringBare sender email address; use
fromNamefor a display name.torequiredstring or string[]One address, or an array of 1–100 addresses.
subjectstringRequired without
templateId; 1–500 characters.htmlstringHTML body. Provide
html,text, or both; at least one is required without a template.textstringPlain-text body. Provide
html,text, or both; at least one is required without a template.templateIdoptionalstringID of a published template. Its subject, HTML, and text replace
subject,html, andtext. See Templates.templateVariablesoptionalobjectValues for the template's variables, keyed by variable name: strings, numbers, or booleans.
fromNameoptionalstringSender display name, 1–100 characters.
replyTooptionalstringReply-to email address.
ccoptionalstring or string[]Copy recipients. Only with one primary recipient.
to,cc, andbcctogether can have at most 50 addresses.bccoptionalstring or string[]Blind copy recipients. Only with one primary recipient.
to,cc, andbcctogether can have at most 50 addresses.metadataoptionalobjectAdditional metadata for the send.
scheduledAtoptionalstringWhen to send, as an ISO 8601 timestamp with a timezone offset, such as
2026-10-05T09:00:00+01:00. Must be in the future and at most 30 days ahead.
Response
Example identifiers below are illustrative.
messageId identifies the message; deliveryIds identify its recipient deliveries. totalQueued is the number queued or scheduled. scheduledAt is the scheduled time, or null for an immediate send. The Node.js and PHP SDKs unwrap the HTTP data object.
With scheduledAt, each delivery has status scheduled and is sent within about a minute of that time. Until then you can reschedule or cancel it with its messageId. A scheduled send uses your sending allowance when it is sent, not when you schedule it: if your allowance is used up at that time, its deliveries become failed with the reason quota_exceeded and nothing is charged. A recipient suppressed before that time, or a key revoked since, is not sent and not charged. Your plan limits how many recipients can wait in scheduled emails at once, and a scheduled send also counts toward the daily limit of the day it is scheduled for; see Usage limits.
Acceptance is not delivery. Follow email.delivered, email.bounced, and email.failed, or check email logs.