Open tracking
Enable open tracking to record when an email client loads the tracking pixel in an HTML message.
How it works
When open tracking is enabled for a route, Lettermint automatically injects a transparent 1x1 tracking pixel into your HTML emails. The pixel is inserted just before the closing </body> tag.
Code
When the recipient's email client renders the email and loads images, the pixel request is stored as a tracking observation. Lettermint classifies the observation before it is promoted into customer-visible events, status, webhooks, and default metrics.
Enabling open tracking
Via dashboard
- Navigate to your project
- Go to Routes and select your transactional or broadcast route
- In Route Settings, enable Track Opens
- Save your changes
Via API
Use the route update method shown in Tracking with this settings payload:
Code
Open tracking is only available for transactional and broadcast routes. Inbound routes cannot have tracking enabled.
Per-email override
You can override the route's open tracking setting for a single email. This is useful for sensitive transactional messages that use a tracked route, or for one-off emails where you want to enable open tracking without changing the route default.
API sends use settings.track_opens:
Code
SMTP sends use the Lettermint override header:
Code
The override applies only to that email and takes precedence over the selected route's Track Opens setting.
Bot detection
Many email opens are not from actual humans viewing the email. Email clients, security tools, and privacy features can trigger open events automatically. Lettermint detects these automated interactions to give you accurate engagement data.
Webhook payload
Lettermint sends message.opened for human-countable opens and supported privacy opens. Security scanners, previews, and generic bots require Include machine events.
Code
Engagement fields:
tracking_event_id- Stable ID for this tracking observation. Use it withclassification_revisionto process later updates.classification_revision- Revision number for this tracking event. A higher number replaces a lower number for the sametracking_event_id.engagement- Optional engagement conclusion. It separates observed, human, privacy, and inferred engagement. It can also containprivacy_fetch_at,engagement_confirmed_at, andhuman_open_time_known.first_open-trueif this is the first time this recipient opened the emailfirst_observed_open-truefor the first human or supported privacy open observationdevice_type- Device category:desktop,mobile, ortabletclient_type- Client category:browser,email_client, etc.client_name- Specific client name:Chrome,Safari,Outlook, etc.
Bot detection fields:
bot.detected-trueif the open appears automatedbot.probability- Confidence score from 0-100 (higher = more likely a bot)bot.classification- Source classification such asgenuine,privacy_proxy,security_scanner, orgeneric_botbot.proxy_type- Known proxy family when applicable, otherwisenullbot.reason_codes- Machine-readable reasons behind the classificationbot.machine-truewhen the open is classified as machine, privacy, or security activitybot.counts_for_metrics- Whether the open contributes to human-open metrics. Privacy opens use separate observed and privacy metrics.bot.counts_for_status- Whether the event can change the message statusbot.webhook_eligible- Whether the event is eligible for a default webhook
Privacy inference revisions
A supported privacy fetch first creates a message.opened event at revision 1. If a later high-confidence click confirms human engagement, Lettermint sends revision 2 of the open event. The revised event keeps the same tracking_event_id, opened_at, and engagement.privacy_fetch_at values. Its engagement.engagement_confirmed_at value contains the click time. Its engagement.human_open_time_known value is false because a privacy proxy hides the human-open time.
The related message.clicked event has its own tracking_event_id and starts at revision 1. Store the highest classification_revision for each tracking_event_id.
See Bot Detection Field Values for the stable classification contract and guidance for open diagnostic strings.
Limitations
HTML emails only
Open tracking requires HTML content. The tracking pixel cannot be added to:
- Plain-text only emails
- Emails where the recipient views only the text part
Token expiration
Tracking tokens expire 30 days after the email is sent. Opens after this period are not recorded. This protects recipient privacy and reduces long-term data storage.
Privacy proxies
Some email clients pre-fetch or relay images to protect user privacy:
- Apple relay - The relay IP cannot separate Mail Privacy Protection from Hide IP Address. Lettermint records an ambiguous privacy open.
- Proton Mail - Verified delivery-prefetch activity is a privacy open.
- HEY and Fastmail - Their documented proxies fetch when the user displays the message, so Lettermint records a likely-human proxy open.
- DuckDuckGo and Superhuman - These clients can remove or block tracking pixels. Lettermint does not create an open when no request exists.
Observed opens are the unique union of human opens and supported privacy opens. Human and privacy counts remain separate. A later high-confidence click can confirm engagement for an Apple or Proton privacy fetch, but it cannot reveal the real human-open time.
Image blocking
Some recipients configure their email clients to block images by default. These opens will only be recorded if the recipient explicitly loads images.
Best practices
- Do not use opens as your only signal - Click tracking provides stronger engagement signals
- Consider privacy - Be transparent with recipients about tracking in your privacy policy
- Monitor trends - Individual open rates vary; focus on aggregate trends over time
Next steps
- Click Tracking - Track link clicks for deeper engagement insights
- Webhook Events - Full payload reference for tracking events