---
title: "The DNS records of a bought name at the registrar: the team's own ones, the project's web records (managed, read-only), and the version to base a change on. A name on other nameservers or not in our registrar account says so (editable false)"
method: GET
path: "/domain-registrations/domains/{domainId}/dns"
tags: ["Domains"]
---

# The DNS records of a bought name at the registrar: the team's own ones, the project's web records (managed, read-only), and the version to base a change on. A name on other nameservers or not in our registrar account says so (editable false)

`GET /domain-registrations/domains/{domainId}/dns`

## Request

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

## Path parameters

- `domainId` string, uuid, required

## Response `200`

The records

- object
  - `domainId` string, uuid, required
  - `domain` string, required
  - `projectId` string, uuid, nullable, required
  - `projectName` string, nullable, required
  - `kind` 'dynadot_dns' | 'parking' | 'external' | 'unreadable' | 'not_in_account', required: dynadot_dns: Dynadot's DNS serves the name (the records below); parking: Dynadot's parking page (adding a record switches it to Dynadot's DNS); external: other nameservers serve it (manage its DNS there); unreadable: Dynadot's answer could not be read completely (nothing is changed unseen); not_in_account: the name is not in our registrar account (manage its DNS where it is registered)
  - `editable` boolean, required: records can be changed here (Dynadot's DNS or its parking page, read completely)
  - `message` string, nullable, required: why they cannot, in plain words
  - `nameservers` string[], required: external: the nameservers that serve the name, when Dynadot lists them
  - `version` string, nullable, required: the zone as read; send it with a change
  - `ttl` integer, nullable, required: Dynadot keeps one TTL (seconds) for all of a name's records; null when its answer does not say
  - `records` object[], required
    - `id` string, required: stable while the record is unchanged; pass it to remove the record
    - `type` string, required: A, AAAA, CNAME, MX, TXT, or a type Dynadot has of its own (SRV, FORWARD, STEALTH, EMAIL): kept as it is
    - `name` string, required: "@" for the name itself, else the labels below it (www, blog, _dmarc, …)
    - `value` string, required
    - `priority` integer, nullable, required: MX only: lower is tried first
    - `extra` string, nullable, required: Dynadot's second value of its own types (a forward's 301/302, …); null otherwise
    - `managed` 'project' | 'ownership' | 'null', nullable, required: null: the team's own record. project: a web record (@ or www) that points the name at its project and follows it (moving the name changes it); ownership: the _hostingsurge TXT that proves the name is yours. Managed records cannot be changed here
  - `limits` object, required: at most this many records for the name itself (main) and below it (sub)
    - `main` integer, required
    - `sub` integer, required
  - `types` string[], required: the types that can be added
  - `presets` object[], required
    - `id` 'google_workspace' | 'microsoft_365' | 'hostingsurge_mail', required: google_workspace: Google's MX record; microsoft_365: the MX value from the Microsoft 365 admin center, Autodiscover and SPF; hostingsurge_mail: the records the team's Hostingsurge Mail needs for the name (add the name under Email first)
    - `available` boolean, required
    - `needsMxHost` boolean, required

## Other responses

- `400`: Invalid request (code invalid_request); details.reason says what to fix
- `401`: Missing or invalid session/token (code unauthorized)
- `403`: Authenticated but not permitted (code forbidden); operator writes may need a fresh session (details.reauthenticate)
- `404`: Not found or not visible to the caller (code not_found)
- `409`: Conflicting state (code conflict): details.reason taken, premium, owned, pending_order, price_changed, dns_changed (reload the records), dns_busy, dns_not_here, conflicting_records (details.records), …
- `429`: Too many searches or DNS requests (code rate_limited); see Retry-After
- `501`: Not set up on this server (code not_configured), e.g. no registrar key yet
- `503`: The registrar did not answer (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)
