Skip to main content
Broadcasts let you send a single email campaign to a large list of recipients — think newsletters, product announcements, or promotional emails. Rather than sending individual messages one at a time, you submit the entire campaign in a single API call, and Helo handles delivery at scale. We also provide engagement and deliverability insights over individual broadcasts, offering helpful feedback on the performance of your campaigns.

When to use broadcasts

Use broadcasts when you have a list of recipients who all receive a variation of the same template-driven email, and the content is information/promotional in nature rather than driven by user actions.
This category of email can be prone to spam complaints and unsubscribes if you’re not careful about managing your contact lists (recipients should not be surprised they received an email from you!).These messages must contain unsubscribe links (don’t worry, we take care of that for you).

The API

Submit a broadcast

Submits a broadcast for processing. Helo validates the request, stores the content, and begins sending as soon as your channel is available. Example request
command-line
Response
status is one of: For additional details about the API, see our API reference.

Send a broadcast message

Sends just a single broadcast message. Use this when you want to send promotional email one-at-a-time, require immediate per-message feedback, and you don’t want all of the features broadcasts offer (ie. controlled processing rates, campaign performance metrics).
This API does not create a broadcast object, and many of the features mentioned in this document will not apply. It functions much the same way as the Send transactional API, only it creates messages of type broadcast instead.
Example request
command-line
Response
status is one of: Just like transactional sending, you can supply content directly (as above) or via a template object, and Helo checks the recipients against your channel’s suppression list — any suppressed addresses are removed and returned in the suppressions array. For additional details about the API, see our API reference.

Broadcast lifecycle

One broadcast per channel at a time. If your channel already has a broadcast in processing, additional broadcasts queue in accepted status and start automatically when the current one finishes. Broadcasts are processed in the order they were submitted.

Delivery rate

Helo processes broadcasts at an appropriate rate in order to maintain good deliverability. The more messages a given broadcast has, the more time it will take to complete. As a rough guide: These are processing times, not inbox delivery times. Actual inbox delivery depends on recipient mail servers.
This is somewhat dependent on your sending domain’s history - inbox providers do not look kindly on significant increases in sending volume. Large spikes from your domain will result in deliverability issues, so there’s a limit to how much we can control there.Feel free to reach out to discuss your sending volume - it is our top priority to ensure your deliverability remains pristine, and we’re more than happy to work with you to achieve that.

Failures and suppressions

After a broadcast completes, two categories of undelivered recipients are available: Failures — permanent errors that prevented delivery, such as template rendering or domain issues. Retrieve them at GET /broadcasts/{id}/failures. Each failure includes the recipient list, message index, error code, and a description. Suppressions — recipients skipped because they appear on your suppression list (previous bounces, unsubscribes, or manual suppressions). Retrieve them at GET /broadcasts/{id}/suppressions. Transient errors (temporary network or service issues) are retried automatically and do not appear in the failures list unless they ultimately cannot be delivered.

Tracking

By default, open and link tracking follow your channel settings. Override them per-message with the tracking object:

Validation errors

If the API returns "status": "failed", the response includes an errorCode. See API overview for specific error codes. You can control where unsubscribe links appear (and what they look like) via a special tag: {{{ helo: unsubscribe }}}. When processing messages for delivery, we’ll replace this placeholder with an unsubscribe link tailored for each recipient. If you don’t provide this placeholder, we’ll automatically insert our own at the end of the email. However we strongly recommend you include it yourself for full control over the appearance of these links.