# description
The JSON body MailKite POSTs to a domain's tracking webhook (setTrackingWebhook) when an engagement event occurs for outbound mail. Verify the x-mailkite-signature header over the raw body (same HMAC scheme and account secret as inbound email.received deliveries) before trusting it. One event per recipient. Delivery is best-effort (single attempt).

# properties.id.description
Unique event id (evt_…) — use it as your idempotency key.

# properties.type.description
The event type. email.delivered is reserved for a future release.

# properties.createdAt.description
When the event occurred, Unix epoch milliseconds (UTC).

# properties.createdAtIso.description
The same instant as createdAt, RFC 3339 / ISO 8601 UTC.

# properties.data.properties.messageId.description
The MailKite message id (msg_…, the send() response id). null when the source event can't be correlated back to a stored message — typically provider bounce/complaint notifications, which carry only providerMessageId.

# properties.data.properties.providerMessageId.description
The upstream provider's message id, when the event came from a provider notification.

# properties.data.properties.bounce.properties.diagnostic.description
The DSN / SMTP diagnostic, when the reporting MTA supplied one.

# properties.data.properties.complaint.properties.feedbackType.description
The feedback-loop complaint type (e.g. abuse), when reported.

# properties.data.properties.open.description
Present on email.opened. `machine: true` marks proxy/prefetch/scanner hits (Apple MPP, Gmail image proxy, security scanners) — exclude them from human open counts.

# properties.data.properties.click.description
Present on email.clicked. Same machine flagging as opens — security scanners follow every link.