---
title: "Get a sending domain"
method: GET
path: "/domains/{id}"
tags: ["Domains"]
---

# Get a sending domain

`GET /domains/{id}`

## Request

- Base URL: `https://api.eusend.dev`
- URL: `https://api.eusend.dev/domains/{id}`
- Auth: HTTP bearer

Includes the DKIM public key, the DNS records to publish, and whether a verification chain is polling right now.

## Path parameters

- `id` string, uuid, required

## Response `200`

The domain.

- Domain
  - `id` string, uuid, required
  - `name` string, required
  - `dkimPublicKey` string
  - `dkimSelector` string
  - `status` 'pending' | 'verified' | 'failed', required
  - `createdAt` string, date-time, required
  - `verifiedAt` string, date-time, nullable
  - `returnPathAligned` boolean
  - `verification` object, required: Whether a DNS polling chain is running for this domain right now.
    - `running` boolean, required
    - `startedAt` string, date-time, nullable, required
  - `diagnostic` object, nullable: What the last unmatched DNS check found, when it found a mistake rather than an absence — the record published under the domain twice because the control panel appends it, a key cut off at the 255-character limit for one DNS string, a DKIM key we did not issue on the same selector. Null is the ordinary “not published yet”, and it clears once the record is right. New codes may be added, so treat an unknown one as generic.
    - `code` 'doubled_domain' | 'truncated_key' | 'foreign_key' | 'quoted_value' | 'multiple_records' | 'cname_at_selector', required
    - `foundAt` string: The name the record actually resolved at (`doubled_domain`).
    - `publishedChars` integer
    - `expectedChars` integer
    - `target` string: Where the CNAME points (`cname_at_selector`).
    - `provider` object: The DNS host serving the zone, recognised from its nameservers. Absent when none of them is one we know.
      - `id` string, required
      - `label` string, required
      - `guide` string, nullable, required: Path to the setup guide for this panel on eusend.dev, or null where there is none.
  - `records` DnsRecord[], required
    - `id` string, required: Stable key: `dkim`, `dmarc`, `returnPathSpf`, `returnPathMx`.
    - `type` 'TXT' | 'MX', required
    - `name` string, required
    - `value` string, required
    - `priority` integer: MX records only.
    - `purpose` 'authentication' | 'policy' | 'alignment', required: `authentication` blocks sending when missing; `policy` is recommended; `alignment` is optional and enables Return-Path SPF alignment when both alignment records are published.
    - `description` string, required

## Other responses

- `401`: Missing, malformed, or revoked API key (`UNAUTHORIZED`).
- `403`: The key exists but may not reach this resource — a `sending_access` key outside the send paths, a test-mode key writing live state, or an account on hold (`FORBIDDEN`, `ACCOUNT_RESTRICTED`).
- `404`: No such resource on this organization (`NOT_FOUND`).
- `429`: Rate limit exceeded (`RATE_LIMITED`).
- `500`: Unexpected server error (`INTERNAL_ERROR`). Carries `request_id`.

---

[API](https://skmtc.dev/eusend/apis/eusend-api.md) · [All operations](https://skmtc.dev/eusend/apis/eusend-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eusend/apis/eusend-api/revisions/bec561f55488?raw)
