API reference Markdown

Domains

A sending domain is the domain part of one or more mailboxes. The endpoint shows each domain as the Domains view of Settings, Accounts does: DNS health, capacity and mailboxes with errors. It also returns the tracking domain of the workspace.

Method Path Action
GET /api/v1/domains List sending domains

The API does not buy domains or change DNS records.

List domains#

The list is not paginated. next_cursor is always null.

curl "https://app.anymail.watch/api/v1/domains" \
  -H "Authorization: Bearer $ANYMAIL_TOKEN"
const res = await fetch("https://app.anymail.watch/api/v1/domains", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.ANYMAIL_TOKEN}`,
  },
});
console.log(res.status, await res.text());
import os
import requests

response = requests.request(
    "GET",
    "https://app.anymail.watch/api/v1/domains",
    headers={
        "Authorization": f"Bearer {os.environ['ANYMAIL_TOKEN']}",
    },
)
print(response.status_code, response.text)

Response 200

{
  "data": [
    {
      "domain": "example.com",
      "mailboxes": [
        { "id": "b2c3d4e5-0000-4000-8000-000000000001", "email": "sales@example.com" },
        { "id": "b2c3d4e5-0000-4000-8000-000000000002", "email": "ada@example.com" }
      ],
      "daily_limit": 100,
      "sent_today": 37,
      "mailboxes_with_errors": 0,
      "checked_at": "2026-10-27T03:00:00.000+00:00",
      "spf": "ok",
      "dkim": "ok",
      "dmarc": "missing",
      "has_problem": true
    }
  ],
  "tracking_domain": {
    "domain": "track.example.com",
    "verified": true,
    "verified_at": "2026-10-01T09:00:00.000+00:00",
    "error": null
  },
  "next_cursor": null
}
Field Notes
daily_limit The sum of the daily limits of the mailboxes on this domain.
sent_today Messages sent today from these mailboxes, each in its own time zone.
mailboxes_with_errors Mailboxes whose last IMAP read failed.
spf, dkim, dmarc ok, missing, conflicting or unknown, from the latest hourly check. unknown means the check did not run or the resolver did not answer. It does not mean the record is missing.
checked_at The time of that check. null when the domain was never checked.
has_problem true when a record needs a change: missing or conflicting. unknown does not count.
tracking_domain The custom domain for open and click tracking, or null when the workspace has none. Opens and clicks are measured only when verified is true.

Before you start a campaign, pick mailboxes on domains with has_problem: false. A missing DMARC record is the most common reason for mail in spam.

Errors: 401, 403, 429 and 500 only.