---
title: "Email Sent"
method: POST
path: "MessageSent"
tags: ["Email Events"]
---

# Email Sent

`POST MessageSent` (webhook)

Triggered when an email is successfully delivered to the recipient's mail server.

This event indicates the email was accepted by the receiving server, but does not
guarantee inbox placement (the recipient's server may still filter it to spam).

## 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)
