---
title: "Email Opened"
method: POST
path: "MessageLoaded"
tags: ["Engagement Events"]
---

# Email Opened

`POST MessageLoaded` (webhook)

Triggered when a recipient opens an email (tracking pixel loaded).

**Requirements:**
- Open tracking must be enabled for your domain
- HTML emails only (plain text emails cannot be tracked)
- Recipient's email client must load images

**Note:** Some email clients pre-fetch images or block tracking pixels,
so open rates may not be 100% accurate.

## Payload

- WebhookPayload — Webhook event payload sent to your configured endpoint. The payload structure varies by event type: - **Delivery events** (MessageSent, MessageDelayed, MessageDeliveryFailed, MessageHeld): Include `message`, `status`, `details`, `output`, `sent_with_ssl`, `timestamp`, `time` - **MessageBounced**: Includes `original_message` and `bounce` (both are message objects) - **Engagement events** (MessageLoaded, MessageLinkClicked): Include `message`, `ip_address`, `user_agent` - **DomainDNSError**: Includes `server`, `domain`, `uuid`, `dns_checked_at`, and DNS status fields - **SendLimit events**: Include `server`, `volume`, `limit` **Note:** The event type is determined by which webhook events you subscribe to, not by a field in the payload. Use the `status` field to identify delivery event types: `Sent`, `SoftFail`, `HardFail`, `Held`.
  - `message` WebhookMessageData — Email message information included in webhook payloads
    - `id` integer — Internal message ID
    - `token` string — Message token for identification
    - `direction` 'outgoing' | 'incoming' — Direction of the email
    - `message_id` string — RFC 5322 Message-ID header
    - `to` string, email — Recipient email address
    - `from` string, email — Sender email address
    - `subject` string — Email subject line
    - `timestamp` number, float — Unix timestamp when the message was created (with microsecond precision)
    - `spam_status` 'NotChecked' | 'Spam' | 'NotSpam' — Spam check status
    - `tag` string, nullable — Tag applied to the email (null if not set)
    - `metadata` object, nullable — Custom metadata attached when the email was sent. Use this to correlate webhook events with your internal systems. Returns null if no metadata was provided.
  - `original_message` WebhookMessageData — Email message information included in webhook payloads
    - `id` integer — Internal message ID
    - `token` string — Message token for identification
    - `direction` 'outgoing' | 'incoming' — Direction of the email
    - `message_id` string — RFC 5322 Message-ID header
    - `to` string, email — Recipient email address
    - `from` string, email — Sender email address
    - `subject` string — Email subject line
    - `timestamp` number, float — Unix timestamp when the message was created (with microsecond precision)
    - `spam_status` 'NotChecked' | 'Spam' | 'NotSpam' — Spam check status
    - `tag` string, nullable — Tag applied to the email (null if not set)
    - `metadata` object, nullable — Custom metadata attached when the email was sent. Use this to correlate webhook events with your internal systems. Returns null if no metadata was provided.
  - `bounce` WebhookMessageData — Email message information included in webhook payloads
    - `id` integer — Internal message ID
    - `token` string — Message token for identification
    - `direction` 'outgoing' | 'incoming' — Direction of the email
    - `message_id` string — RFC 5322 Message-ID header
    - `to` string, email — Recipient email address
    - `from` string, email — Sender email address
    - `subject` string — Email subject line
    - `timestamp` number, float — Unix timestamp when the message was created (with microsecond precision)
    - `spam_status` 'NotChecked' | 'Spam' | 'NotSpam' — Spam check status
    - `tag` string, nullable — Tag applied to the email (null if not set)
    - `metadata` object, nullable — Custom metadata attached when the email was sent. Use this to correlate webhook events with your internal systems. Returns null if no metadata was provided.
  - `status` 'Sent' | 'SoftFail' | 'HardFail' | 'Held' — Delivery status. Values correspond to event types: - `Sent` (MessageSent) - `SoftFail` (MessageDelayed) - `HardFail` (MessageDeliveryFailed) - `Held` (MessageHeld)
  - `details` string — Human-readable details about the delivery attempt
  - `output` string — Raw SMTP response from the receiving server (truncated to 512 chars)
  - `sent_with_ssl` boolean — Whether the message was delivered over a TLS connection
  - `time` number, float — Time taken to deliver in seconds
  - `timestamp` number, float — Unix timestamp of the delivery attempt (with microsecond precision)
  - `url` string — The URL that was clicked (for MessageLinkClicked events)
  - `token` string — Unique token for the clicked link (for MessageLinkClicked events)
  - `ip_address` string — IP address of the recipient (for MessageLoaded and MessageLinkClicked events)
  - `user_agent` string — User agent of the recipient's email client (for MessageLoaded and MessageLinkClicked events)
  - `server` WebhookServerData — Server information included in some webhook payloads
    - `uuid` string — Server UUID
    - `name` string — Server name
    - `permalink` string — Server permalink/slug
    - `organization` string — Organization permalink
  - `domain` string — Domain name with DNS issues (for DomainDNSError events)
  - `uuid` string — Unique identifier for the domain (for DomainDNSError events)
  - `dns_checked_at` number, float — Unix timestamp when DNS was checked (for DomainDNSError events)
  - `spf_status` 'OK' | 'Missing' | 'Invalid' — SPF record status (for DomainDNSError events)
  - `spf_error` string, nullable — SPF error message if status is not OK
  - `dkim_status` 'OK' | 'Missing' | 'Invalid' — DKIM record status (for DomainDNSError events)
  - `dkim_error` string, nullable — DKIM error message if status is not OK
  - `mx_status` 'OK' | 'Missing' | 'Invalid' — MX record status (for DomainDNSError events)
  - `mx_error` string, nullable — MX error message if status is not OK
  - `return_path_status` 'OK' | 'Missing' | 'Invalid' — Return path record status (for DomainDNSError events)
  - `return_path_error` string, nullable — Return path error message if status is not OK
  - `volume` integer — Current send volume in the last hour (for SendLimit events)
  - `limit` integer — Configured send limit per hour (for SendLimit events)

## Acknowledgement `200`

Webhook received successfully

---

[API](https://skmtc.dev/arkhq-io/apis/ark-email-api.md) · [All operations](https://skmtc.dev/arkhq-io/apis/ark-email-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/arkhq-io/ark-email-api/revisions/2cfd9423fd8a/schema)
