Skip to main content
GET
/
api
/
email
/
domains
List email sending domains
curl --request GET \
  --url https://app.puffle.ai/api/email/domains \
  --header 'Authorization: Bearer <token>'
{
  "domains": [
    {
      "id": "dddd1111-1111-1111-1111-111111111111",
      "user_id": "11111111-1111-1111-1111-111111111111",
      "domain": "acme.com",
      "agentmail_domain_id": "acme.com",
      "status": "verified",
      "dns_records": [
        {
          "type": "CNAME",
          "name": "agm._domainkey.acme.com",
          "value": "agm._domainkey.agentmail.to"
        }
      ],
      "verified_at": "2026-04-01T09:00:00Z",
      "created_at": "2026-04-01T08:30:00Z",
      "updated_at": "2026-04-01T09:00:00Z"
    }
  ]
}

Overview

Return every custom sending domain owned by the caller, newest first. By default each domain’s status is refreshed against AgentMail (so the DB converges on the live value without waiting for the background poller) — pass ?skip_sync=true to return the cached DB state and skip the live lookup. AgentMail errors during sync are non-fatal; affected rows fall back to the cached status.
This operation shares the URL path /api/email/domains with other verbs. See the sibling page for related operations on the same resource.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

skip_sync
enum<string>

If true, skip the per-domain AgentMail status refresh and return the cached DB status instead. Use during active polling (where a separate caller is already driving status updates) to avoid redundant AgentMail calls.

Available options:
true,
false

Response

Array of domains. Empty array is a valid response for users who have not added any sending domains.

domains
object[]
required