Add a DNSSEC record

Add one manual DS or KEY DNSSEC record to a domain through the registrar path. Do not use this as the first choice for domains delegated to HostUp-managed nameservers (primary.ns.hostup.se, secondary.ns.hostup.se, or accepted managed aliases) when automatic DNSSEC is enabled: in that case the platform periodically…

Read full description Hide full description

Add one manual DS or KEY DNSSEC record to a domain through the registrar path. Do not use this as the first choice for domains delegated to HostUp-managed nameservers (primary.ns.hostup.se, secondary.ns.hostup.se, or accepted managed aliases) when automatic DNSSEC is enabled: in that case the platform periodically verifies the hosted DNSSEC material and publishes the DS record automatically. Read GET /api/v2/domains/{id}/dnssec-auto for automation state and GET /api/v2/domains/{id}/nameservers for current delegation and dnssecAutoWillBeBlocked. Use this endpoint when the domain needs manual registrar data, for example an external DNS provider gives you a DS/KEY record, and GET /api/v2/domains/{id}/dnssec reports actions.canAdd.allowed: true. The request body uses one schema so API tools see both type values. Public v2 camelCase field names are required: DS uses keyTag and digestType, while KEY uses publicKey. The create response may not include a persisted record ID; re-read GET /api/v2/domains/{id}/dnssec before deleting records.

Domains & DNS DNS

Authentication

Required API scope: write:domains

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

Context

Path Parameters

id string required Example: dom_01hxa3b4c5d6e7f8g9h0j1k2m3

Public domain ID. Get it from GET /api/v2/domains `data[].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 required · Example: DS

`DS` requires `keyTag`, `algorithm`, `digestType`, and `digest`. `KEY` requires `flag`, `protocol`, `algorithm`, and `publicKey`.

DS
KEY
keyTag string · Example: 2371

Required when `type` is `DS`.

algorithm string required · Example: 13

DNSSEC algorithm number supplied by the DNS provider.

digestType string · Example: 2

Required when `type` is `DS`.

digest string · Example: 5A1D7C1B9E7F4E6A8C2B0D5F9A3E6C7D8B1A2C3D4E5F60718293A4B5C6D7E8F9

Required when `type` is `DS`.

flag string · Example: 257

Required when `type` is `KEY`.

protocol string · Example: 3

Required when `type` is `KEY`.

publicKey string · Example: p8K3pYwQ5xvM7nR2sT4uV6wX8yZaBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789

Required when `type` is `KEY`.

Responses

201 DNSSEC record accepted by the registrar path.
recordType string · enum required · Example: DS
DS
KEY
ds object | null required
ds.id string | null required · Example: dsr_01hxa3b4c5d6e7f8g9h0j1k2m3
ds.keyTag string | null required · Example: 2371
ds.algorithm string | null required · Example: 13
ds.digestType string | null required · Example: 2
ds.digest string | null required · Example: 5A1D7C1B9E7F4E6A8C2B0D5F9A3E6C7D8B1A2C3D4E5F60718293A4B5C6D7E8F9
key object | null required
key.id string | null required · Example: dsr_01hxa3b4c5d6e7f8g9h0j1k2m3
key.flag string | null required · Example: 257
key.protocol string | null required · Example: 3
key.algorithm string | null required · Example: 13
key.publicKey string | null required · Example: p8K3pYwQ5xvM7nR2sT4uV6wX8yZaBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
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
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
POST https://cloud.hostup.se/api/v2/domains/{id}/dnssec
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/domains/dom_01hxa3b4c5d6e7f8g9h0j1k2m3/dnssec" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "DS",
    "keyTag": "2371",
    "algorithm": "13",
    "digestType": "2",
    "digest": "5A1D7C1B9E7F4E6A8C2B0D5F9A3E6C7D8B1A2C3D4E5F60718293A4B5C6D7E8F9"
  }'
Response
{
  "recordType": "DS",
  "ds": {
    "id": null,
    "keyTag": "2371",
    "algorithm": "13",
    "digestType": "2",
    "digest": "5A1D7C1B9E7F4E6A8C2B0D5F9A3E6C7D8B1A2C3D4E5F60718293A4B5C6D7E8F9"
  },
  "key": null
}
Request Body Add DS record
{
  "type": "DS",
  "keyTag": "2371",
  "algorithm": "13",
  "digestType": "2",
  "digest": "5A1D7C1B9E7F4E6A8C2B0D5F9A3E6C7D8B1A2C3D4E5F60718293A4B5C6D7E8F9"
}