Engagement Events

Email Opened

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.

postWebhookMessageLoaded

Payload

event'MessageSent' | 'MessageDelayed' | 'MessageDeliveryFailed' | 'MessageBounced' | 'MessageHeld' | 'MessageLoaded' | 'MessageLinkClicked' | 'DomainDNSError' | 'SendLimitApproaching' | 'SendLimitExceeded' required

The type of event that occurred

timestampnumber float required

Unix timestamp when the event occurred (with microsecond precision)

uuidstring

Unique identifier for this webhook delivery (use for idempotency)

Example payload

{
  "event": "MessageSent",
  "timestamp": 1704672000.123456,
  "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "payload": {
    "message": {
      "id": 12345,
      "token": "abc123XYZ789",
      "direction": "outgoing",
      "message_id": "a1b2c3d4-e5f6-7890@rp.arkhq.io",
      "to": "user@example.com",
      "from": "hello@yourdomain.com",
      "subject": "Welcome to our service",
      "timestamp": 1704672000.123456,
      "spam_status": "NotChecked",
      "tag": "onboarding",
      "metadata": {
        "user_id": "usr_123456",
        "campaign_id": "camp_789012"
      }
    },
    "original_message": {
      "id": 12345,
      "token": "abc123XYZ789",
      "direction": "outgoing",
      "message_id": "a1b2c3d4-e5f6-7890@rp.arkhq.io",
      "to": "user@example.com",
      "from": "hello@yourdomain.com",
      "subject": "Welcome to our service",
      "timestamp": 1704672000.123456,
      "spam_status": "NotChecked",
      "tag": "onboarding",
      "metadata": {
        "user_id": "usr_123456",
        "campaign_id": "camp_789012"
      }
    },
    "bounce": {
      "id": 12345,
      "token": "abc123XYZ789",
      "direction": "outgoing",
      "message_id": "a1b2c3d4-e5f6-7890@rp.arkhq.io",
      "to": "user@example.com",
      "from": "hello@yourdomain.com",
      "subject": "Welcome to our service",
      "timestamp": 1704672000.123456,
      "spam_status": "NotChecked",
      "tag": "onboarding",
      "metadata": {
        "user_id": "usr_123456",
        "campaign_id": "camp_789012"
      }
    },
    "status": "Sent",
    "details": "Message for user@example.com accepted by 1.2.3.4:25 (mx.example.com)",
    "output": "250 2.0.0 OK",
    "sent_with_ssl": true,
    "time": 1.51,
    "timestamp": 1704672000.123456,
    "url": "https://yourdomain.com/welcome",
    "token": "abc123def456",
    "ip_address": "203.0.113.45",
    "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
    "server": {
      "uuid": "a1b2c3d4-e5f6-7890",
      "name": "Production",
      "permalink": "production",
      "organization": "acme-corp"
    },
    "domain": "yourdomain.com",
    "uuid": "a1b2c3d4-e5f6-7890",
    "dns_checked_at": 1704672000.123456,
    "spf_status": "Missing",
    "spf_error": "No SPF record exists for this domain",
    "dkim_status": "OK",
    "mx_status": "OK",
    "return_path_status": "Missing",
    "return_path_error": "There is no return path record at rp.yourdomain.com",
    "volume": 950,
    "limit": 1000
  }
}

Response

Webhook received successfully

Changes