Update DNS record

Replace a DNS record using the same validation rules as record creation. Get id from GET /api/v2/dns-zones data[].id and recordId from GET /api/v2/dns-zones/{id}/records records[].id. Use this PUT route, not PATCH, to change value, name, type, ttl, or priority; send those request-body fields flat at…

Read full description Hide full description

Replace a DNS record using the same validation rules as record creation. Get id from GET /api/v2/dns-zones data[].id and recordId from GET /api/v2/dns-zones/{id}/records records[].id. Use this PUT route, not PATCH, to change value, name, type, ttl, or priority; send those request-body fields flat at the top level and do not wrap them in data. Use ALIAS, not CNAME, when the zone root should point at another hostname. TXT values include SPF policies; create SPF policies as TXT records with a value starting v=spf1. NS records here delegate a subdomain only: in zone xyz.se, name: "acme" delegates acme.xyz.se. Changing authoritative nameservers for the domain uses POST /api/v2/domains/{id}/nameservers. The record being edited is excluded from duplicate checks. Optional proxied can be sent with A, AAAA, and CNAME records to change CDN proxying in the same update; callers do not need to call CDN proxy-rule endpoints. Sending proxied also requires write:cdn and is blocked when CDN is not enabled for the zone.

Domains & DNS DNS

Authentication

Required API scopes: write:dnswrite:cdn

Use Authorization: Bearer <token> for API keys. Dashboard sessions may also use hostup_session.

Context

Path Parameters

id string required Example: zone_01hxa3b4c5d6e7f8g9h0j1k2m3

Public DNS zone ID. Get it from GET /api/v2/dns-zones `data[].id`. Do not invent this value; use the exact ID returned by the referenced API response.

recordId string required Example: drr_01hxa3b4c5d6e7f8g9h0j1k2m3

Public DNS record ID. Get it from GET /api/v2/dns-zones/{id} `records[].id`. Do not invent this value; use the exact ID returned by the referenced API response.

Headers

Accept Example
Content-Type Example

Body

required
application/json
type string · enum · Example: A
A
AAAA
CNAME
ALIAS
MX
TXT
SRV
CAA
NS
TLSA
name string · Example: www

Record owner name relative to this DNS zone. Use `@` or an empty string for the zone root; use labels such as `www` or `_dmarc`, not the full FQDN `www.example.com`. Responses may return normalized FQDN names.

value string · Example: 192.0.2.1

Record target or content. Send TXT values, including SPF/DKIM/DMARC policy values, without surrounding quotes; the server applies DNS-safe quoting and splits long TXT-like values into DNS protocol strings of at most 255 characters.

ttl integer · Example: 3600

TTL in seconds. Send as a JSON number; integer-like strings are tolerated for tool adapters.

priority integer · Example: 10

MX or SRV priority. Send as a JSON number; integer-like strings are tolerated for tool adapters.

weight integer · Example: 0
port integer · Example: 443
proxied boolean · Example: true

Optional CDN proxy state for A, AAAA, and CNAME records. Omit it when only replacing DNS content; send true or false when the edit should also change proxying.

Responses

200 Updated DNS record.
id string · Example: drr_01hxa3b4c5d6e7f8g9h0j1k2m3
type string · enum · Example: TXT
A
AAAA
CNAME
ALIAS
MX
TXT
SRV
CAA
NS
TLSA
name string · Example: _dmarc.example.com
value string · Example: v=DMARC1; p=none; rua=mailto:[email protected]
ttl integer · Example: 3600
priority integernull · Example: 10

Present only for MX and SRV records. `null` means the upstream DNS provider omitted priority for a priority-capable record.

weight integernull · Example: 5

Present only for SRV records. `null` means the upstream DNS provider omitted weight for an SRV record.

port integernull · Example: 5060

Present only for SRV records. `null` means the upstream DNS provider omitted port for an SRV record.

proxied boolean · Example: false

Present only on A, AAAA, and CNAME records when the CDN proxy state is known. Omitted for record types that cannot be proxied.

proxyReason string · Example: Mail server records cannot be proxied because MX records depend on them.

Present only when this proxy-capable record has a customer-facing reason that prevents changing the proxy state.

actions object

Compact action gates for state that belongs to this DNS record. Present only when a server-side action gate is relevant to the record.

actions.canChangeProxy object required
actions.canChangeProxy.allowed boolean required · Example: true
actions.canChangeProxy.reason stringnull required · Example: null
actions.canChangeProxy.code stringnull · Example: pending_order

Machine-readable reason code when an action is blocked.

warnings array<object>

Present on DNS write responses when the request succeeded but the resulting same-name record set deserves review, for example multiple A records, remaining AAAA records, or multiple MX records.

warnings[].code string · enum required · Example: same_name_address_records
same_name_address_records
same_name_ipv6_records
same_name_mx_records
warnings[].severity string · enum required · Example: warning
warning
warnings[].message string required · Example: There are now multiple A records for example.com. This is valid for some setups, but if...
warnings[].records array<object> required

Existing records that triggered the warning. The newly created or updated record is the main response object.

warnings[].records[].id string required · Example: drr_01hxa3b4c5d6e7f8g9h0j1k2m4
warnings[].records[].type string required · Example: A
warnings[].records[].name string required · Example: example.com
warnings[].records[].value string required · Example: 198.51.100.25
warnings[].records[].priority integernull · Example: 10
400 Invalid request. The response body is an RFC 7807 Problem Details document.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
401 Unauthorized. Authentication is required.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
403 Forbidden. The caller lacks a required scope or does not own the resource.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
404 Not found. The resource does not exist or is not owned by the caller.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
409 The record cannot change proxy state right now.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
429 Rate limited. Retry after the limit resets. 429 responses include `Retry-After` seconds plus `X-RateLimit-*` headers.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
500 Internal error. Retry later or contact support if the issue persists.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
PUT https://cloud.hostup.se/api/v2/dns-zones/{id}/records/{recordId}
For AI assistants
View as Markdown
cURL
curl -X PUT "https://cloud.hostup.se/api/v2/dns-zones/zone_01hxa3b4c5d6e7f8g9h0j1k2m3/records/drr_01hxa3b4c5d6e7f8g9h0j1k2m3" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "A",
    "name": "@",
    "value": "192.0.2.1",
    "ttl": 3600
  }'
Response
{
  "id": "drr_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "type": "A",
  "name": "www.example.com",
  "value": "192.0.2.1",
  "ttl": 3600,
  "proxied": true,
  "actions": {
    "canChangeProxy": {
      "allowed": true,
      "reason": null
    }
  }
}
Request Body A
{
  "type": "A",
  "name": "@",
  "value": "192.0.2.1",
  "ttl": 3600
}