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

# List Sending Domains

> Return every custom sending domain owned by the caller, newest first.

**CLI:**

```bash theme={null}
puffle email domain
puffle email domain --skip-sync <skip-sync>
```

## Overview

Return every custom sending domain owned by the caller, newest first. By default each domain's status is refreshed against the live verification state so the DB converges without waiting for the background poller. Pass `?skip_sync=true` to return the cached DB state and skip the live lookup. Verification-service errors during sync are non-fatal; affected rows fall back to the cached status.

<Note>
  This operation shares the URL path `/api/email/domains` with other verbs. See [the sibling page](/api-reference/senders/create-email-domain) for related operations on the same resource.
</Note>


## OpenAPI

````yaml get /api/email/domains
openapi: 3.0.3
info:
  title: Puffle API
  version: 1.0.0
  description: >-
    HTTP API for the Puffle GTM platform - Feed and Lead Finder search
    preparation, campaign-backed Outbound execution, Puffle Agent runs, sender
    management, and Unibox reply workflows. Designed for operation by both
    humans and autonomous AI agents. Agents should start at the [Agent
    Playbook](/guides/agent-playbook) which prescribes a workspace-context check
    (`GET /api/context`) and core user journeys with exact call ordering.
  contact:
    name: Puffle Support
    url: https://puffle.ai
servers:
  - url: https://app.puffle.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Campaigns
    description: >-
      Campaign-backed Outbound execution. These endpoints manage draft,
      launching, active, paused, and completed Outbound runs with sequence
      nodes, contacts, and sender accounts.
  - name: Accounts
    description: Signed-in user account, settings, and workspace context endpoints.
  - name: Billing
    description: Billing customer portal and account billing endpoints.
  - name: Senders
    description: >-
      Connected sender accounts, email inboxes, sending domains, DNS
      verification, warmup, and sender capacity.
  - name: Socials
    description: >-
      Read connected LinkedIn and X accounts, review current and archived posts,
      and reconcile publication status. Creating, editing, scheduling,
      publishing, OAuth connection, analytics, and mentions remain
      dashboard-managed workflows and are not part of the public Bearer-token
      API.
paths:
  /api/email/domains:
    get:
      tags:
        - Senders
      summary: List Sending Domains
      description: >-
        Return every custom sending domain owned by the caller, newest first. By
        default each domain's status is refreshed against the live verification
        state so the DB converges without waiting for the background poller.
        Pass `?skip_sync=true` to return the cached DB state and skip the live
        lookup. Verification-service errors during sync are non-fatal; affected
        rows fall back to the cached status.
      operationId: listEmailDomains
      parameters:
        - name: skip_sync
          in: query
          required: false
          schema:
            description: >-
              If `true`, skip the per-domain live status refresh and return the
              cached DB status instead. Use during active polling where a
              separate caller is already driving status updates.
            type: string
            enum:
              - 'true'
              - 'false'
      responses:
        '200':
          description: >-
            Array of domains. Empty array is a valid response for users who have
            not added any sending domains.
          content:
            application/json:
              schema:
                type: object
                properties:
                  domains:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                        user_id:
                          type: string
                          format: uuid
                        domain:
                          type: string
                          description: Apex or subdomain being registered, e.g. `acme.com`.
                        agentmail_domain_id:
                          description: >-
                            Backing provider identifier for the domain. Exposed
                            for legacy clients.
                          type: string
                          nullable: true
                        status:
                          type: string
                          enum:
                            - pending
                            - verifying
                            - verified
                            - failed
                          description: >-
                            Lifecycle status. `pending` — awaiting DNS records;
                            `verifying` — actively checking DNS; `verified` —
                            all records resolve and the domain can be used to
                            create inboxes; `failed` — the DNS records were
                            rejected or did not resolve (re-trigger via
                            `/verify`).
                        dns_records:
                          description: >-
                            Provider-issued DNS records (DKIM/SPF/DMARC/CNAME).
                            Refreshed on every verify call so the UI always
                            shows live expected values.
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                                description: DNS record type, e.g. `TXT`, `CNAME`, `MX`.
                              name:
                                type: string
                                description: Hostname the record sits at.
                              value:
                                type: string
                                description: Record value.
                              priority:
                                description: MX priority — present only for MX records.
                                type: number
                                nullable: true
                            required:
                              - type
                              - name
                              - value
                            additionalProperties: {}
                            description: >-
                              DNS record required to verify ownership/sending
                              rights. The DNS auto-sync step writes these
                              automatically when the zone is managed by Puffle;
                              otherwise the user must add them manually at their
                              DNS provider.
                          nullable: true
                        verified_at:
                          type: string
                          format: date-time
                          nullable: true
                        created_at:
                          type: string
                          format: date-time
                        updated_at:
                          type: string
                          format: date-time
                          nullable: true
                      required:
                        - id
                        - user_id
                        - domain
                        - agentmail_domain_id
                        - status
                        - dns_records
                        - verified_at
                        - created_at
                        - updated_at
                      additionalProperties: false
                      description: >-
                        A custom sending domain. Domains are provisioned with
                        backing mail infrastructure, optionally auto-synced to
                        managed DNS, and then polled via the
                        `domain-verify-poller` background task until DNS
                        propagation is confirmed.
                required:
                  - domains
                additionalProperties: false
        '401':
          description: Missing or invalid Bearer token.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                  - error
                additionalProperties: false
        '500':
          description: Database read failed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                  - error
                additionalProperties: false
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: pk_live_...

````