> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aefer.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# The email domain object

> A domain your account sends summary emails from.

An email domain belongs to your account, not to a workspace, so only your account key can add,
read or delete one. Up to 10 per account.

## How a domain is verified

1. Add the domain with [`POST /email_domains`](https://docs.aefer.ai/api-reference/email-domains/add-an-email-domain).
   Use a subdomain you keep for email, such as `mail.acme.com`, rather than `acme.com`: the
   records then never touch your main domain's mail.
2. Add the four records from `dns_records` at your DNS provider. The three CNAMEs point each
   `host` at its `value`: names \_æfer serves, so they stay the same if \_æfer changes email
   provider. The TXT record proves your account controls the domain; its value is unique to this
   registration.
3. Call [`POST /email_domains/{id}/verify`](https://docs.aefer.ai/api-reference/email-domains/verify-an-email-domain),
   or wait: a `pending` domain is checked every hour for its first 7 days. Once all four records
   resolve, it is `verified`. DNS changes can take a few hours to be visible. A domain still
   `pending` after 7 days is removed; add it again to get new records.

A verified domain is checked once a day. If a record stops resolving on two checks in a row, it
turns `failing` until all four resolve again.

If another account added the same domain and hasn't verified it, yours is answered with the TXT
record only. Add it and verify: once the TXT record proves your account controls the domain, the
other account's registration is removed and yours gets the three CNAMEs. A domain another account
has verified can't be added (`409 domain_taken`). A taken-over domain gets a fresh 7 days to verify its new CNAMEs.

A `failing` domain is never removed or taken over: its account keeps the name until it deletes it.

## Attributes

**id** `string`

Email domain ID, beginning with `edm_`. Treat it as an opaque string.

**object** `string`

Always `email_domain`.

**domain** `string`

The domain summary emails are sent from, lowercase.

**status** `string`

Whether the domain's records resolve.

* `pending`: not all four records resolve yet. Checked every hour for 7 days, and whenever you verify it; removed if still pending after 7 days.
* `verified`: all four records resolve. Checked once a day.
* `failing`: was verified, but a record stopped resolving on two checks in a row. It is verified again once all four resolve.

Available options: `pending`, `verified`, `failing`.

**dns\_records** `object[]`

The four records to add at your DNS provider: three CNAMEs, and a TXT record that proves your account controls the domain.

**properties**

**type** `string`

The record type.

* `CNAME`: points `host` at a name \_æfer serves, for sending and signing.
* `TXT`: proves your account controls the domain.

**host** `string`

The record's name, under your domain.

**value** `string`

What the record points at, or for the TXT record its exact text.

**valid** `boolean`

Whether the record checked out on the last check. Keep every record in place once the domain is verified, the TXT record included.

**verified\_at** `string | null`

When the domain last became `verified`, in ISO 8601. Null until then.

**last\_checked\_at** `string | null`

When the records were last checked, in ISO 8601. Null before the first check.

**expires\_at** `string | null`

When a `pending` domain is removed if it isn't verified by then, in ISO 8601: 7 days after it was
added. Null once the domain is verified.

**created\_at** `string`

When the domain was added, in ISO 8601.

```json The email domain object theme={null}
{
  "id": "edm_01m7a4k2r9s8x7c2dvq3m5n6p4",
  "object": "email_domain",
  "domain": "mail.acme.com",
  "status": "pending",
  "dns_records": [
    {
      "type": "CNAME",
      "host": "aefer.mail.acme.com",
      "value": "rp.sg1.dkim.aefer.ai",
      "valid": false
    },
    {
      "type": "CNAME",
      "host": "s1._domainkey.mail.acme.com",
      "value": "s1.sg1.dkim.aefer.ai",
      "valid": false
    },
    {
      "type": "CNAME",
      "host": "s2._domainkey.mail.acme.com",
      "value": "s2.sg1.dkim.aefer.ai",
      "valid": false
    },
    {
      "type": "TXT",
      "host": "_aefer.mail.acme.com",
      "value": "aefer-verification=2kVh9wQx7LmN3pR8sT4uY6zA",
      "valid": false
    }
  ],
  "verified_at": null,
  "last_checked_at": null,
  "expires_at": "2026-11-27T10:02:11Z",
  "created_at": "2026-11-20T10:02:11Z"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.