---
title: "What a DNS preset would add to a bought name, what is already there and what it would replace (nothing is changed)"
method: GET
path: "/domain-registrations/domains/{domainId}/dns/presets/{preset}"
tags: ["Domains"]
---

# What a DNS preset would add to a bought name, what is already there and what it would replace (nothing is changed)

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

## Request

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

## Path parameters

- `domainId` string, uuid, required
- `preset` 'google_workspace' | 'microsoft_365' | 'hostingsurge_mail', required

## Query parameters

- `mxHost` string: microsoft_365: the MX value from the Microsoft 365 admin center

## Response `200`

The preview

- object
  - `preset` '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)
  - `domainId` string, uuid, required
  - `domain` string, required
  - `version` string, required: apply with this version
  - `add` object[], required: records the preset adds
    - `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
  - `alreadyThere` object[], required: records of the preset that are already there (left as they are)
    - `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
  - `conflicts` object[], required: records the preset would replace: applying needs replace: true
    - `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
  - `skipped` object[], required: records the preset has that are not set here (SRV: Dynadot's API has no documented format for them)
    - `type` string, required
    - `name` string, required
    - `value` string, required
    - `reason` 'unsupported_type', 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)
