---
title: "One domain with its full DNS plan and live check"
method: GET
path: "/email/domains/{domainId}"
tags: ["Email"]
---

# One domain with its full DNS plan and live check

`GET /email/domains/{domainId}`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/email/domains/{domainId}`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Path parameters

- `domainId` string, uuid, required

## Response `200`

The domain

- object
  - `id` string, uuid, required
  - `organizationId` string, uuid, required
  - `domain` string, required
  - `ownership` object, required
    - `verified` boolean, required
    - `record` object, nullable, required: null once verified
      - `type` 'TXT', required
      - `name` string, required
      - `value` string, required
    - `claimExpiresAt` string, nullable, required: ISO-8601 timestamp
  - `mailboxes` object, required
    - `status` 'off' | 'pending' | 'active' | 'error', required
    - `dkimSelector` string, nullable, required
    - `mailboxCount` integer, required
  - `sending` object, required
    - `status` 'off' | 'pending' | 'active' | 'error', required: pending turns active only once BOTH the Postal verification TXT and the DKIM TXT verify
    - `verifiedAt` string, nullable, required: ISO-8601 timestamp
    - `missing` object[]: single-domain responses: the records a pending sending domain still waits for (empty when not pending). Absent from the domain list, which does not check DNS, and when the sending service could not be reached
      - `record` 'verification' | 'dkim', required: verification = Postal's verification TXT at the apex; dkim = the DKIM TXT Postal signs with
      - `type` 'TXT', required
      - `name` string, required: relative to the domain apex, as in dns[]
  - `dns` object[], required: every record to publish for the enabled capabilities, freshest known check
    - `type` 'A' | 'AAAA' | 'CNAME' | 'TXT' | 'MX' | 'SRV', required
    - `name` string, required: relative to the domain apex; "@" for the apex itself
    - `value` string, required
    - `priority` integer, nullable, required: MX preference / SRV priority, when applicable
    - `status` 'match' | 'missing' | 'mismatch' | 'unchecked', required: result of the last live DNS check. SPF and DMARC are checked as policies, not exact values: any single SPF record that includes _spf.hostingsurge.com (and does not pass +all) and any single valid DMARC record (p=none, quarantine or reject) is a match
    - `observed` string[], required: values seen at the public resolvers for this name (at most 5; for SPF/DMARC only those records)
    - `issue` 'spf_multiple' | 'spf_include_missing' | 'spf_pass_all' | 'dmarc_multiple' | 'dmarc_invalid': why an SPF/DMARC record that is present does not count: several SPF records (merge them into one), no include:_spf.hostingsurge.com, a pass-everything +all, several DMARC records, or a DMARC record without a valid p= policy
  - `checkedAt` string, nullable, required: ISO-8601 timestamp
  - `createdAt` string, required: ISO-8601 timestamp
  - `updatedAt` string, required: ISO-8601 timestamp

## Other responses

- `400`: Invalid request (code invalid_request)
- `401`: Missing or invalid session/token (code unauthorized)
- `403`: Authenticated but not permitted (code forbidden)
- `404`: Not found or not visible to the caller (code not_found)
- `409`: Conflicting state (code conflict)
- `429`: Too many requests (code rate_limited); see Retry-After
- `501`: Not available on this server (code not_configured)
- `503`: Mail server or sending service unavailable (code provider_unavailable)

---

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