---
title: "Get domains"
method: GET
path: "/v1/domains"
tags: ["Domains"]
---

# Get domains

`GET /v1/domains`

Unified domain read. Omit `domainId` to LIST the brand’s sending domains under `{ data, pagination }` — ALL lifecycle states by default (so callers mid-verification can read `pending` rows + their DNS `records`); pass `?sendableOnly=true` for only verified, send-ready domains (the set valid for `POST /v1/sends` and automation `sendEmail` nodes). Pass `?domainId=` to fetch ONE domain — returns `{ data: [row] }` (no `pagination`), `404 DOMAIN_NOT_FOUND` on an unknown / cross-brand id.

## Query parameters

- `domainId` string
- `sendableOnly` 'true' | 'false'
- `limit` integer
- `cursor` string

## Response `200`

A page of domains (list mode), or `{ data: [row] }` (detail mode).

- DomainsListResponse
  - `data` object[], required
    - `domainId` string, required
    - `domainUrl` string, uri, required
    - `name` string, required
    - `region` string, required
    - `status` 'not_started' | 'pending' | 'verified' | 'failed' | 'temporary_failure' | 'partially_verified' | 'partially_failed', required
    - `sendingEnabled` boolean, required
    - `sendable` boolean, required
    - `records` object[], required
      - `record` string, required
      - `name` string, required
      - `type` string, required
      - `ttl` string, required
      - `status` string, required
      - `value` string, required
      - `priority` number
    - `openTracking` boolean
    - `clickTracking` boolean
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `verifiedAt` string, date-time
  - `pagination` object
    - `limit` integer, required
    - `cursor` string, nullable, required
    - `hasMore` boolean, required

## Other responses

- `400` — The request body or query string was invalid (unknown key, wrong type, or missing required field). Strict schemas reject unknown keys — including `brandId`, which is always resolved from the API key.
- `401` — The API key was missing, invalid, or revoked.
- `403` — The caller does not have the required `domains` permission.
- `404` — Domain not found in the API-key brand. Cross-brand ids intentionally surface as 404 (never 403) so the API does not leak cross-brand existence.
- `429` — The request hit the rolling rate limit window.
- `500` — Unexpected internal error.

---

[API](https://skmtc.net/brew/apis/brew-public-api-v1.md) · [All operations](https://skmtc.net/brew/apis/brew-public-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/brew/brew-public-api-v1/revisions/db96cfedc6c5/schema)
