---
title: "Domain Verified"
method: POST
path: "webhooks_events_domainVerified"
---

# Domain Verified

`POST webhooks_events_domainVerified` (webhook)

## Headers

- `svix-id` string, required: ID of webhook message.
- `svix-signature` string, required: Signature of webhook message.
- `svix-timestamp` string, date-time, required: Timestamp of webhook message.

## Payload

- EventsDomainVerifiedEvent
  - `type` 'event', required
  - `event_type` 'domain.verified', required
  - `event_id` string, required: ID of the event. It is the same on every retry and redelivery of the event and on every webhook or WebSocket subscription that receives it, so use it to deduplicate. The format varies by event type; treat it as an opaque string.
  - `domain` DomainsDomain, required
    - `pod_id` string: ID of pod.
    - `domain_id` string, required: The ID of the domain.
    - `domain` string, required: The name of the domain (e.g., `example.com`).
    - `status` 'NOT_STARTED' | 'PENDING' | 'INVALID' | 'FAILED' | 'VERIFYING' | 'VERIFIED', required
    - `reason` string: Why the domain is not (yet) VERIFIED, when known. `dns_records_missing` / `dns_records_invalid` point at the DNS records. The `ses_*` values mean the records look right and sending-infrastructure validation has not converged: `ses_dkim_pending` / `ses_mail_from_pending` (still checking), `ses_dkim_temporary_failure` / `ses_mail_from_temporary_failure` (a transient error the infrastructure keeps retrying on its own — usually resolves without changes), `ses_dkim_failed` / `ses_mail_from_failed` (a terminal verdict; re-verify after fixing), `ses_dkim_not_started` / `ses_mail_from_not_started` (the attribute was never configured on the identity — re-verify to push it), `ses_not_verified_for_sending`, and `tracking_certificate_failed` (the certificate for the open tracking `link.` subdomain was refused; fix CAA or DNS, then turn tracking off and back on). Absent when VERIFIED.
    - `feedback_enabled` boolean, required: Bounce and complaint notifications are sent to your inboxes.
    - `inbound_enabled` boolean: Receive email for this domain. Defaults to `true`. Set `false` for a send-only domain: the apex MX record is not required and is omitted from `records`, so the domain's existing email provider keeps receiving its mail. Inboxes on a send-only domain can still send.
    - `subdomains_enabled` boolean, required: Allow inboxes on any subdomain of this domain. Adds a required wildcard MX record (`*.<domain>`) to `records`.
    - `tracking_enabled` boolean, required: Serve open tracking pixels from this domain. Adds a `link.<domain>` CNAME record to `records`. Open tracking reports its readiness in `tracking_status` and never changes the domain's `status`. Sends with `track_opens` are accepted once `tracking_status` is `VERIFIED`.
    - `tracking_status` 'NOT_STARTED' | 'PENDING' | 'INVALID' | 'FAILED' | 'VERIFYING' | 'VERIFIED'
    - `tracking_reason` string: Why open tracking is not (yet) VERIFIED, when known. `dns_records_missing` / `dns_records_invalid` point at the `link.<domain>` CNAME. `caa_blocked` means the domain's CAA records leave Amazon out: add the `CAA` record listed in `records`, and AgentMail retries the certificate on its own within a few minutes. `certificate_failed` means the certificate was refused; fix the DNS, then turn tracking off and back on. Absent when `tracking_status` is VERIFIED.
    - `records` DomainsVerificationRecord[], required: A list of DNS records for the domain. Includes the apex MX record unless `inbound_enabled` is false, and a wildcard MX record (`*.<domain>`) when `subdomains_enabled` is true. When `tracking_enabled` is true it also lists the `link.<domain>` CNAME and, if the domain's CAA records restrict issuance, a `CAA` record. Those two are for open tracking only: they feed `tracking_status` and do not affect `status`.
      - `type` 'TXT' | 'CNAME' | 'MX' | 'CAA', required
      - `name` string, required: The name or host of the record.
      - `value` string, required: The value of the record.
      - `status` 'MISSING' | 'INVALID' | 'VALID', required
      - `priority` integer: The priority of the MX record.
      - `reason` string: Why the record is INVALID, when known. `duplicate_records` means the expected value is present but extra records coexist at the same name; `value_mismatch` means a record exists but does not match the expected value.
    - `client_id` string: Client ID of domain.
    - `updated_at` string, date-time, required: Time at which the domain was last updated.
    - `created_at` string, date-time, required: Time at which the domain was created.

## Acknowledgement `200`

Webhook received successfully

---

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