MethodPathSummaryAuth
GET/v1/dns/platform-configRead the installation-wide DNS configuration (节点管理 > DNS配置, platform administrator)Session
PUT/v1/dns/platform-configSave the installation-wide DNS configuration and synchronise every tenant copySession
POST/v1/dns/platform-config/connection-test连接测试 - verify DNS credentials and the CNAME domains they host (read-only)Session
POST/v1/dns/platform-config/{kind}Start 记录修复 (repair) or 清除CDN无关解析 (cleanup) as background jobsSession
GET/v1/dns/platform-zonesList the CNAME domains (CNAME域名)Session
POST/v1/dns/platform-zonesAdd a CNAME domain (copied into every tenant; the first is the default allocation zone)Session
PATCH/v1/dns/platform-zones/{id}Edit a CNAME domain; renaming one with allocated CNAMEs is refused (dns_zone_in_use)Session
DELETE/v1/dns/platform-zones/{id}Delete a CNAME domain and its tenant copies; refused while sites use it (dns_zone_in_use)Session
GET/v1/dns/providersList DNS provider configurationsSession
POST/v1/dns/providersStore an encrypted DNS provider configurationSession
PATCH/v1/dns/providers/{id}Update provider metadata or replace encrypted credentialsSession
DELETE/v1/dns/providers/{id}Delete an unreferenced DNS provider configurationSession
POST/v1/dns/providers/{id}/verifyVerify a DNS provider credential against its upstream APISession
GET/v1/dns/recordsList structured records in a zoneSession
POST/v1/dns/recordsCreate a validated draft DNS recordSession
PATCH/v1/dns/records/{id}Update a validated draft DNS recordSession
DELETE/v1/dns/records/{id}Delete a draft DNS recordSession
GET/v1/dns/settingsRead the DNS settings for the active tenant scopeSession
PATCH/v1/dns/settingsUpdate the compatibility DNS TTL with compare-and-swap semanticsSession
GET/v1/dns/settings/operations/{operation_id}Read a DNS DNS operation statusSession
POST/v1/dns/settings/{kind}Enqueue record repair or CDN-unrelated record cleanupSession
GET/v1/dns/zonesList DNS zonesSession
POST/v1/dns/zonesCreate a draft DNS zoneSession
DELETE/v1/dns/zones/{id}Delete an unreferenced draft DNS zoneSession

Contract file:api/openapi/v1/control.yaml api/openapi/v1/dns-acme.yaml

Operation details

GET /v1/dns/platform-config

Read the installation-wide DNS configuration (节点管理 > DNS配置, platform administrator)

operationId
getPlatformDNSConfig
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Responses

getPlatformDNSConfig Responses
StatusDescription
200Provider, non-secret identifiers, TTL, IP weight, tenant sync summary and the last DNS write failure.

Fields:provider_type?: string identifiers: object secret_saved: boolean ttl: integer ip_weight: boolean weight_supported: boolean version: integer updated_at?: string(date-time) sync: object last_error: object

401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

PUT /v1/dns/platform-config

Save the installation-wide DNS configuration and synchronise every tenant copy

operationId
savePlatformDNSConfig
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

savePlatformDNSConfig Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYes—

Request body

application/json · Required:Yes

savePlatformDNSConfig Request body
NameTypeRequiredDescription
provider_typestring: aliyun / huawei / dns_la / dnspod_cn / dns_com / cloudflare / namecom / custom_httpYes—
credentialsobjectNoEvery credential field of the provider; omitted keeps the stored credentials of the same provider.
ttlintegerYesCloudflare requires at least 60; name.com at least 300.
ip_weightbooleanYes—

Responses

savePlatformDNSConfig Responses
StatusDescription
200Saved configuration.

Fields:provider_type?: string identifiers: object secret_saved: boolean ttl: integer ip_weight: boolean weight_supported: boolean version: integer updated_at?: string(date-time) sync: object last_error: object

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
409The requested state conflicts with an existing resource or idempotency fact.
503A required dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/dns/platform-config/connection-test

连接测试 - verify DNS credentials and the CNAME domains they host (read-only)

operationId
testPlatformDNSConnection
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Verifies the entered credentials (or, without credentials, the saved ones of provider_type) with the same provider check as a save, then lists the account's domains once per CNAME domain. Nothing is saved and no DNS record is written. Custom HTTP and plugin providers have no domain list (status unchecked).

Request body

application/json · Required:Yes

testPlatformDNSConnection Request body
NameTypeRequiredDescription
provider_typestringYes—
credentialsobjectNo—

Responses

testPlatformDNSConnection Responses
StatusDescription
200The provider accepted the credentials.

Fields:provider_type: string zones: array<object>

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
409dns_not_configured (no saved credentials to test).
422provider_credentials_rejected or provider_credentials_invalid.
429provider_verification_rate_limited.
503provider_verification_unavailable or credential_encryption_unavailable.
504provider_verification_timeout.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 429 Rate limited: wait, then retry with lower concurrency.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/dns/platform-config/{kind}

Start 记录修复 (repair) or 清除CDN无关解析 (cleanup) as background jobs

operationId
startPlatformDNSOperation
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

repair queues one dns.repair.v1 job per tenant with settled CNAME owners (one item per owner); cleanup lists the CNAME domains at the provider and queues one dns.cleanup.v1 job with one item per A/AAAA/CNAME record that is neither the zone apex nor an allocated CNAME hostname. Item ids are the result lines shown under 系统管理 > 后台任务.

Parameters

startPlatformDNSOperation Parameters
NameInTypeRequiredDescription
kindpathstring: repair / cleanupYes—
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

Responses

startPlatformDNSOperation Responses
StatusDescription
202Background jobs accepted (or replayed).

Fields:operations: array<DNSOperation> replayed: boolean

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
409dns_not_configured, dns_no_tenant or an idempotency conflict.
502dns_provider_unavailable (the provider records could not be listed).

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

GET /v1/dns/platform-zones

List the CNAME domains (CNAME域名)

operationId
listPlatformDNSZones
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

listPlatformDNSZones Parameters
NameInTypeRequiredDescription
pagequeryintegerNo—
limitqueryintegerNo—
searchquerystringNo—

Responses

listPlatformDNSZones Responses
StatusDescription
200One page of CNAME domains.

Fields:items: array<PlatformDNSZone> total: integer

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

POST /v1/dns/platform-zones

Add a CNAME domain (copied into every tenant; the first is the default allocation zone)

operationId
createPlatformDNSZone
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

createPlatformDNSZone Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

createPlatformDNSZone Request body
NameTypeRequiredDescription
namestringYes—
remarkstringYes—
random_allocationbooleanNo参与随机分配. New sites without a CNAME domain draw one of the marked domains (any DNS provider); with none marked they use the default CNAME domain. Allocated CNAMEs do not move. Omitted on update keeps the current value; omitted on create is false.

Responses

createPlatformDNSZone Responses
StatusDescription
201Created CNAME domain.

Fields:id: string(uuid) display_id: integer name: string remark: string in_use: boolean random_allocation: boolean version: integer created_at: string(date-time) updated_at: string(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
409The requested state conflicts with an existing resource or idempotency fact.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

PATCH /v1/dns/platform-zones/{id}

Edit a CNAME domain; renaming one with allocated CNAMEs is refused (dns_zone_in_use)

operationId
updatePlatformDNSZone
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

updatePlatformDNSZone Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYes—

Request body

application/json · Required:Yes

updatePlatformDNSZone Request body
NameTypeRequiredDescription
namestringYes—
remarkstringYes—
random_allocationbooleanNo参与随机分配. New sites without a CNAME domain draw one of the marked domains (any DNS provider); with none marked they use the default CNAME domain. Allocated CNAMEs do not move. Omitted on update keeps the current value; omitted on create is false.

Responses

updatePlatformDNSZone Responses
StatusDescription
200Updated CNAME domain.

Fields:id: string(uuid) display_id: integer name: string remark: string in_use: boolean random_allocation: boolean version: integer created_at: string(date-time) updated_at: string(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
409The requested state conflicts with an existing resource or idempotency fact.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

DELETE /v1/dns/platform-zones/{id}

Delete a CNAME domain and its tenant copies; refused while sites use it (dns_zone_in_use)

operationId
deletePlatformDNSZone
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

deletePlatformDNSZone Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYes—

Responses

deletePlatformDNSZone Responses
StatusDescription
204Deleted.
400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
409The requested state conflicts with an existing resource or idempotency fact.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

GET /v1/dns/providers

List DNS provider configurations

operationId
listDNSProviders
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

A tenant scope lists only the accounts it entered (managed_by=tenant); the platform DNS copy is not returned. The platform scope lists every tenant's accounts, platform copies included.

Parameters

listDNSProviders Parameters
NameInTypeRequiredDescription
limitqueryintegerNo—
cursorquerystringNoOpaque cursor bound to the authenticated scope and page limit.

Responses

listDNSProviders Responses
StatusDescription
200Provider metadata without credentials or credential-derived fingerprints.

Fields:items: array<Provider> next_cursor?: string

401Authentication is required.
403The active role lacks the required permission.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

POST /v1/dns/providers

Store an encrypted DNS provider configuration

operationId
createDNSProvider
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

createDNSProvider Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

createDNSProvider Request body
NameTypeRequiredDescription
target_scope_idstring(uuid)No—
namestringYes—
remarkstringNo备注; trimmed

Responses

createDNSProvider Responses
StatusDescription
201Stored as unverified; no provider request has been made.

Fields:id: string(uuid) scope_id: string(uuid) name: string remark?: string provider_type: string: aliyun / cloudflare / huawei / dnspod_cn / dns_com / dns_la / namecom / custom_http / dnsdun credentials_configured: boolean status: string: unverified / verified / disabled managed_by?: string: tenant / platform version: integer(int64) created_at: string(date-time) updated_at: string(date-time)

400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
409Duplicate, referenced, stale, or conflicting idempotent request.
503Deployment credential encryption is not configured.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

PATCH /v1/dns/providers/{id}

Update provider metadata or replace encrypted credentials

operationId
updateDNSProvider
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

updateDNSProvider Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

updateDNSProvider Request body
NameTypeRequiredDescription
expected_versioninteger(int64)Yes—
namestringYes—
remarkstringNo备注; omitted keeps the stored remark
statusstring: unverified / disabledYesunverified means enabled: without new credentials a verified provider stays verified (renaming or a remark change keeps the verification); with new credentials it becomes unverified; disabled disables it.
credentialsobjectNoTo pass verification, replacement credentials must match the existing provider type. Cloudflare requires only api_token; Aliyun requires only access_key_id and access_key_secret; Huawei Cloud requires only access_key, secret_key, region, and project_id; DNSPod CN requires only dp_id and dp_key; DNS.COM requires only api_key and api_secret; DNS.LA requires only api_id and api_secret; Name.com requires only username and api_token; custom_http requires only endpoint and secret.

Responses

updateDNSProvider Responses
StatusDescription
200Updated provider metadata.

Fields:id: string(uuid) scope_id: string(uuid) name: string remark?: string provider_type: string: aliyun / cloudflare / huawei / dnspod_cn / dns_com / dns_la / namecom / custom_http / dnsdun credentials_configured: boolean status: string: unverified / verified / disabled managed_by?: string: tenant / platform version: integer(int64) created_at: string(date-time) updated_at: string(date-time)

400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.
503Deployment credential encryption is not configured.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

DELETE /v1/dns/providers/{id}

Delete an unreferenced DNS provider configuration

operationId
deleteDNSProvider
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

deleteDNSProvider Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYesQuoted positive resource version.

Responses

deleteDNSProvider Responses
StatusDescription
204Provider deleted.
400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

POST /v1/dns/providers/{id}/verify

Verify a DNS provider credential against its upstream API

operationId
verifyDNSProvider
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Requires dns.manage in the active scope, an empty request body, a quoted If-Match revision, and an Idempotency-Key. The first implemented adapter verifies a Cloudflare API Token with GET /user/tokens/verify. A verified result proves token activity only; it does not prove zone-specific permissions, mutate DNS records, or start ACME issuance. Deterministic denials are audited and idempotently replayed. Rate limits, timeouts, upstream failures, and invalid upstream responses leave the provider unchanged and the key retryable.

Parameters

verifyDNSProvider Parameters
NameInTypeRequiredDescription
idpathstring(uuid)YesTenant-scoped DNS provider UUID.
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYes—

Responses

verifyDNSProvider Responses
StatusDescription
200The token is active and the provider is now verified, or an identical completed request was replayed.

Fields:id: string(uuid) scope_id: string(uuid) name: string provider_type: string: aliyun / cloudflare / huawei / dnspod_cn / dns_com / dns_la / namecom / custom_http / dnsdun credentials_configured: boolean status: string: unverified / verified / disabled managed_by?: string: tenant / platform version: integer(int64) created_at: string(date-time) updated_at: string(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
409The requested state conflicts with an existing resource or idempotency fact.
422Stable deterministic denial: provider_verification_unsupported, provider_credentials_invalid, provider_token_inactive, or provider_credentials_rejected.
429The provider rate limited verification. Retry-After is returned only when the upstream value was valid.
502The provider returned an oversized, malformed, or otherwise unexpected response.
503A required dependency is unavailable.
504Provider verification exceeded the bounded request timeout.
500The request could not be completed because of an internal failure.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 429 Rate limited: wait, then retry with lower concurrency.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list

GET /v1/dns/records

List structured records in a zone

operationId
listDNSRecords
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

listDNSRecords Parameters
NameInTypeRequiredDescription
zone_idquerystring(uuid)Yes—

Responses

listDNSRecords Responses
StatusDescription
200Draft records visible in the authenticated scope.

Fields:items: array<Record>

400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

POST /v1/dns/records

Create a validated draft DNS record

operationId
createDNSRecord
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

createDNSRecord Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

createDNSRecord Request body
NameTypeRequiredDescription
target_scope_idstring(uuid)No—
zone_idstring(uuid)Yes—
namestringYes—
typestring: A / AAAA / CNAME / TXTYes—
contentstringYes—
ttlintegerYes—

Responses

createDNSRecord Responses
StatusDescription
201Draft created; the provider has not been called.

Fields:id: string(uuid) scope_id: string(uuid) zone_id: string(uuid) name: string type: string: A / AAAA / CNAME / TXT content: string ttl: integer status: string: draft / failed version: integer(int64) created_at: string(date-time) updated_at: string(date-time)

400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

PATCH /v1/dns/records/{id}

Update a validated draft DNS record

operationId
updateDNSRecord
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

updateDNSRecord Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

updateDNSRecord Request body
NameTypeRequiredDescription
expected_versioninteger(int64)Yes—
namestringYes—
typestring: A / AAAA / CNAME / TXTYes—
contentstringYes—
ttlintegerYes—

Responses

updateDNSRecord Responses
StatusDescription
200Updated draft record.

Fields:id: string(uuid) scope_id: string(uuid) zone_id: string(uuid) name: string type: string: A / AAAA / CNAME / TXT content: string ttl: integer status: string: draft / failed version: integer(int64) created_at: string(date-time) updated_at: string(date-time)

400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

DELETE /v1/dns/records/{id}

Delete a draft DNS record

operationId
deleteDNSRecord
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

deleteDNSRecord Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYesQuoted positive resource version.

Responses

deleteDNSRecord Responses
StatusDescription
204Record deleted.
400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

GET /v1/dns/settings

Read the DNS settings for the active tenant scope

operationId
getDNSSettings
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:dns.read

Responses

getDNSSettings Responses
StatusDescription
200Scope-level DNS TTL. Provider secrets are never returned.

Fields:scope_id: string(uuid) ttl: integer version: integer(int64) updated_at?: string(date-time)

401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
503A required dependency is unavailable.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

PATCH /v1/dns/settings

Update the compatibility DNS TTL with compare-and-swap semantics

operationId
updateDNSSettings
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:dns.manage

Parameters

updateDNSSettings Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYes—

Request body

application/json · Required:Yes

updateDNSSettings Request body
NameTypeRequiredDescription
ttlintegerYes—

Responses

updateDNSSettings Responses
StatusDescription
200Updated scope-level DNS TTL.

Fields:scope_id: string(uuid) ttl: integer version: integer(int64) updated_at?: string(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
409The requested state conflicts with an existing resource or idempotency fact.
503A required dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/dns/settings/operations/{operation_id}

Read a DNS DNS operation status

operationId
getDNSOperation
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:dns.read

Parameters

getDNSOperation Parameters
NameInTypeRequiredDescription
operation_idpathstring(uuid)Yes—

Responses

getDNSOperation Responses
StatusDescription
200Current durable operation state.

Fields:id: string(uuid) kind: string: dns.repair.v1 / dns.cleanup.v1 subject: string state: string: queued / running / succeeded / partial_failed / failed / cancelled attempt: integer max_attempts: integer progress: object last_error_code?: string created_at: string(date-time) started_at?: string(date-time) updated_at: string(date-time) completed_at?: string(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
503A required dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/dns/settings/{kind}

Enqueue record repair or CDN-unrelated record cleanup

operationId
enqueueDNSOperation
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:dns.manage

Parameters

enqueueDNSOperation Parameters
NameInTypeRequiredDescription
kindpathstring: repair / cleanupYes—
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

Responses

enqueueDNSOperation Responses
StatusDescription
202Durable background job accepted; no provider mutation is reported until a worker completes it.

Fields:operation: DNSOperation replayed: boolean

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
409The requested state conflicts with an existing resource or idempotency fact.
503A required dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/dns/zones

List DNS zones

operationId
listDNSZones
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Responses

listDNSZones Responses
StatusDescription
200Zones visible in the authenticated scope.

Fields:items: array<Zone>

401Authentication is required.
403The active role lacks the required permission.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.

↑ Back to list

POST /v1/dns/zones

Create a draft DNS zone

operationId
createDNSZone
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

createDNSZone Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes—

Request body

application/json · Required:Yes

createDNSZone Request body
NameTypeRequiredDescription
target_scope_idstring(uuid)No—
provider_idstring(uuid)Yes—
namestringYes—

Responses

createDNSZone Responses
StatusDescription
201Draft created; the provider has not been called.

Fields:id: string(uuid) scope_id: string(uuid) provider_id: string(uuid) name: string status: string: draft / failed version: integer(int64) created_at: string(date-time) updated_at: string(date-time)

400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list

DELETE /v1/dns/zones/{id}

Delete an unreferenced draft DNS zone

operationId
deleteDNSZone
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Parameters

deleteDNSZone Parameters
NameInTypeRequiredDescription
idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYesQuoted positive resource version.

Responses

deleteDNSZone Responses
StatusDescription
204Zone deleted.
400Invalid request or structurally invalid DNS/certificate data.
401Authentication is required.
403The active role lacks the required permission.
404Resource absent or hidden by tenant isolation.
409Duplicate, referenced, stale, or conflicting idempotent request.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.

↑ Back to list