---
title: "Email opened"
method: POST
path: "email.opened"
tags: ["Webhook Events"]
---

# Email opened

`POST email.opened` (webhook)

A mail client loaded the open pixel of a message sent with `trackOpens: true`.

Opens are a signal, not proof of reading:

- Gmail and Apple Mail fetch images through their own proxies, some as soon as the mail arrives.
- Clients that block images never report an open.
- The sender viewing the message in their own Sent folder counts too.

Repeat fetches within 10 seconds raise `count` without firing again.

## Payload

- WebhookPayloadEmailOpened: Webhook payload for email.opened.
  - `id` string, required
  - `profiles` object[]: The profiles this event belongs to, each with the externalId you set on it (null when none is set). Use it to route the event to your tenant without storing Zernio profile ids. Present on every event tied to a profile, absent on events that belong to none. Events spanning several profiles (a post published to accounts of different profiles) list each once.
    - `id` string, required
    - `externalId` string, nullable, required
  - `test` boolean: Always true when present: only a sample sent by POST /v1/webhooks/test with an event carries it. Real deliveries never do.
  - `event` 'email.opened', required
  - `account` object, required
    - `accountId` string
    - `profileId` string
    - `platform` string
    - `username` string
    - `displayName` string, nullable
  - `email` WebhookEmailTrackedMessage, required: The tracked message an email.* event is about. `messageId` and `threadId` are the provider ids (read the message with `GET /v1/email/messages/{messageId}`); `metadata` is what you sent with it.
    - `messageId` string
    - `threadId` string
    - `trackingId` string: Also returned as `data.trackingId` by the send.
    - `metadata` object, nullable
  - `open` object, required
    - `openedAt` string, date-time
    - `firstOpenedAt` string, date-time
    - `count` integer: Pixel loads so far, including repeat fetches by the same client.
  - `timestamp` string, date-time, required

## Acknowledgement `200`

Webhook received successfully

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) - [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/a79c233ebf22?raw)
