When to use transactional vs. broadcasts
Use transactional messages when you are sending event-driven mail (one message per user action). The recipient is expecting to receive an email about an action they have taken, and delivery must be prompt and reliable. Use broadcasts when you are sending promotional/informational messages not triggered by user actions.Sending a message
Direct content
Use this for simple messages where the content is fully known ahead of time. Example requestcommand-line
Template content
Use this when you want to populate content dynamically using{{variable}} placeholders. Move your subject, HTML, and text into a template object alongside a data map.
Example request
command-line
template, top-level subject, html, and text fields must not be included — pick one approach or the other.
Response
status is one of:
A successful response always includes a
messageId you can use for support lookups.
If some recipients were on your suppression list, they appear in the suppressions array — the message still sends to the remaining recipients.
errorCode: "recipients_suppressed" rather than sending to no one.
Batch sending
command-line
Idempotency
To prevent duplicate sends when retrying a failed request, include an idempotency key:Suppressions
Helo automatically checks every recipient against your channel’s suppression list before sending. Suppressed addresses (from previous bounces, unsubscribes, or manual additions) are silently removed from the To, Cc, and Bcc fields, and their addresses are returned in thesuppressions array on the response.
If you need to check whether an address is suppressed before submitting, use the Suppressions API.
Tracking
By default, open and link tracking follow your channel settings. Override them per-message with thetracking object:
Validation errors
If the API returns"status": "failed", the response includes an errorCode.
See API overview for specific error codes.