- Events — an ordered log of every delivery lifecycle event for every message
- Messages — a view of each distinct message along with its full delivery history
Events
Every message goes through a series of lifecycle events as it moves through Helo’s infrastructure.| Event | Description |
|---|---|
accepted | Helo has accepted the message for processing |
processed | The message has been processed and handed off to the receiving mail server |
delivered | The receiving server confirmed delivery |
opened | The recipient opened the email (requires open tracking to be enabled) |
clicked | The recipient clicked a tracked link (requires link tracking to be enabled) |
bounced | The message could not be delivered — see Bounces |
complained | The recipient marked the message as spam |
unsubscribed | The recipient unsubscribed |
resubscribed | A previously unsubscribed recipient opted back in |
Querying events
You can retrieve events via the API with a wide range of filters:| Filter | Description |
|---|---|
channelId | Scope results to a specific channel |
messageId | Retrieve all events for a specific message |
startDate / endDate | Filter by event timestamp |
recipient | Filter by recipient email address |
subject | Filter by message subject |
mailType | transactional or broadcast |
eventTypes | One or more event types (e.g., bounced, delivered) |
tags | Filter by tags attached to the message |
after value from a response to fetch the next page. Each page returns up to 500 events.
Messages
The messages view gives you a higher-level perspective — one record per distinct message sent, each with a summary of its delivery status and recipient list. Each message has:- A unique
messageId - The
channelIdit was sent through mailType(transactionalorbroadcast)mailSource(apiorsmtp)deliveryType(liveorsandbox)status(queuedorsent)- Subject, recipients, and tags
Message details
Fetching a single message by ID returns the full picture:- Headers — from, to, cc, bcc, reply-to addresses
- Content — plain text body, HTML body
- Attachments — filename, disposition (
inlineorattachment), and size - Tracking settings — whether open tracking and link tracking were enabled
- Events — the complete ordered history of events for that message
Querying messages
Messages support the same filters as events:channelId, startDate/endDate, recipient, subject, tags, mailType, and status. Results are paginated up to 100 per page.
Statistics
Helo aggregates your sending data into statistics so you can understand trends and monitor the health of your sending over time. Stats are always broken down by mail type —transactional and broadcast — so you can see how each sending stream is performing independently.
The following metrics are tracked:
| Metric | Description |
|---|---|
sent | Messages handed off for delivery |
delivered | Messages confirmed delivered by the receiving server |
opened | Messages opened by at least one recipient |
clicked | Messages where at least one link was clicked |
bounced | Messages that could not be delivered (hard + soft) |
unsubscribed | Messages that resulted in an unsubscribe |
complained | Messages that resulted in a spam complaint |
Time-based aggregations
Stats are available at three granularities:- Hourly — one data point per hour, for a given
from/torange - Daily — one data point per day, for a given
from/torange (pass atimezoneto align days to your local time) - Totals — a single aggregated summary for the entire
from/torange
channelId and by tags.
Channel deliverability
Helo monitors the deliverability health of each channel and will alert you when metrics approach problematic thresholds. Each channel receives a health score:| Health | Delivery rate |
|---|---|
excellent | Above 98% |
good | 97–98% |
ok | 95–97% |
poor | Below 95% |
(sent - bounced) / sent, separately assessed across both mail types and then combined.
Deliverability alerts
When bounce rates or spam complaint rates exceed safe thresholds, Helo generates an alert. Alerts have two severity levels: Bounce rate alerts:| Severity | Threshold |
|---|---|
warning | Bounce rate exceeds 3% |
critical | Bounce rate exceeds 5% |
| Severity | Threshold |
|---|---|
warning | Spam complaint rate exceeds 0.08% |
critical | Spam complaint rate exceeds 0.1% |
Bounces
A bounce means an email could not be delivered. Helo tracks two types of bounces, which behave differently and require different responses.Hard bounces
A hard bounce is a permanent delivery failure. The receiving server has definitively rejected the message. Common causes include:- The recipient email address does not exist
- The domain does not exist or has no mail server
- The receiving server has explicitly blocked your sender
Soft bounces
A soft bounce is a temporary delivery failure. The address is valid, but delivery failed at the time of sending. Common causes include:- The recipient’s mailbox is full
- The receiving mail server is temporarily unavailable or throttling inbound mail
- The message was too large to be accepted
How to minimize bounces
Keeping your bounce rate low is critical to maintaining deliverability. Here are the most effective practices: Keep your list clean- Remove hard-bounced addresses immediately after a bounce event
- Regularly prune addresses that have not engaged in a long time
- Use double opt-in for new subscribers to verify addresses before adding them to your list
- Use an email validation service at the point of address capture to catch obvious typos and fake addresses
- Avoid purchasing third-party email lists — they tend to be full of stale and invalid addresses
- If you’re starting to send from a new domain or IP, ramp up volume slowly
- Sudden spikes in volume from a cold sender look suspicious to receiving servers and can result in temporary rejections (soft bounces)
- Helo will surface bounce rate warnings before they become critical — check your channel health regularly and investigate spikes as soon as they appear
- Use the Webhooks feature to receive real-time
bouncedevents so you can update your list immediately without polling
- Test your integration with a Sandbox Channel to avoid accidentally sending to real addresses during development, which can contaminate your bounce metrics from day one