Operation details
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| Status | Description |
|---|
200 | Provider, 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 |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The 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
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| Name | In | Type | Required | Description |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
savePlatformDNSConfig Request body| Name | Type | Required | Description |
|---|
provider_type | string: aliyun / huawei / dns_la / dnspod_cn / dns_com / cloudflare / namecom / custom_http | Yes | — |
|---|
credentials | object | No | Every credential field of the provider; omitted keeps the stored credentials of the same provider. |
|---|
ttl | integer | Yes | Cloudflare requires at least 60; name.com at least 300. |
|---|
ip_weight | boolean | Yes | — |
|---|
Responses
savePlatformDNSConfig Responses| Status | Description |
|---|
200 | Saved 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 |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
409 | The requested state conflicts with an existing resource or idempotency fact. |
|---|
503 | A 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
连接测试 - 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| Name | Type | Required | Description |
|---|
provider_type | string | Yes | — |
|---|
credentials | object | No | — |
|---|
Responses
testPlatformDNSConnection Responses| Status | Description |
|---|
200 | The provider accepted the credentials. Fields:provider_type: string zones: array<object> |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
409 | dns_not_configured (no saved credentials to test). |
|---|
422 | provider_credentials_rejected or provider_credentials_invalid. |
|---|
429 | provider_verification_rate_limited. |
|---|
503 | provider_verification_unavailable or credential_encryption_unavailable. |
|---|
504 | provider_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
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| Name | In | Type | Required | Description |
|---|
kind | path | string: repair / cleanup | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
Responses
startPlatformDNSOperation Responses| Status | Description |
|---|
202 | Background jobs accepted (or replayed). Fields:operations: array<DNSOperation> replayed: boolean |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
409 | dns_not_configured, dns_no_tenant or an idempotency conflict. |
|---|
502 | dns_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
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| Name | In | Type | Required | Description |
|---|
page | query | integer | No | — |
|---|
limit | query | integer | No | — |
|---|
search | query | string | No | — |
|---|
Responses
listPlatformDNSZones Responses| Status | Description |
|---|
200 | One page of CNAME domains. Fields:items: array<PlatformDNSZone> total: integer |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The 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
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| Name | In | Type | Required | Description |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
createPlatformDNSZone Request body| Name | Type | Required | Description |
|---|
name | string | Yes | — |
|---|
remark | string | Yes | — |
|---|
random_allocation | boolean | No | 参与随机分配. 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| Status | Description |
|---|
201 | Created 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) |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
409 | The 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
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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
updatePlatformDNSZone Request body| Name | Type | Required | Description |
|---|
name | string | Yes | — |
|---|
remark | string | Yes | — |
|---|
random_allocation | boolean | No | 参与随机分配. 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| Status | Description |
|---|
200 | Updated 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) |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
404 | The requested resource was not found. |
|---|
409 | The 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 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | — |
|---|
Responses
deletePlatformDNSZone Responses| Status | Description |
|---|
204 | Deleted. |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
404 | The requested resource was not found. |
|---|
409 | The 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| Name | In | Type | Required | Description |
|---|
limit | query | integer | No | — |
|---|
cursor | query | string | No | Opaque cursor bound to the authenticated scope and page limit. |
|---|
Responses
listDNSProviders Responses| Status | Description |
|---|
200 | Provider metadata without credentials or credential-derived fingerprints. Fields:items: array<Provider> next_cursor?: string |
|---|
401 | Authentication is required. |
|---|
403 | The 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| Name | In | Type | Required | Description |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
createDNSProvider Request body| Name | Type | Required | Description |
|---|
target_scope_id | string(uuid) | No | — |
|---|
name | string | Yes | — |
|---|
remark | string | No | 备注; trimmed |
|---|
Responses
createDNSProvider Responses| Status | Description |
|---|
201 | Stored 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) |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
409 | Duplicate, referenced, stale, or conflicting idempotent request. |
|---|
503 | Deployment 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
updateDNSProvider Request body| Name | Type | Required | Description |
|---|
expected_version | integer(int64) | Yes | — |
|---|
name | string | Yes | — |
|---|
remark | string | No | 备注; omitted keeps the stored remark |
|---|
status | string: unverified / disabled | Yes | unverified 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. |
|---|
credentials | object | No | To 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| Status | Description |
|---|
200 | Updated 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) |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, referenced, stale, or conflicting idempotent request. |
|---|
503 | Deployment 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | Quoted positive resource version. |
|---|
Responses
deleteDNSProvider Responses| Status | Description |
|---|
204 | Provider deleted. |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | Tenant-scoped DNS provider UUID. |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | — |
|---|
Responses
verifyDNSProvider Responses| Status | Description |
|---|
200 | The 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) |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
404 | The requested resource was not found. |
|---|
409 | The requested state conflicts with an existing resource or idempotency fact. |
|---|
422 | Stable deterministic denial: provider_verification_unsupported, provider_credentials_invalid, provider_token_inactive, or provider_credentials_rejected. |
|---|
429 | The provider rate limited verification. Retry-After is returned only when the upstream value was valid. |
|---|
502 | The provider returned an oversized, malformed, or otherwise unexpected response. |
|---|
503 | A required dependency is unavailable. |
|---|
504 | Provider verification exceeded the bounded request timeout. |
|---|
500 | The 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| Name | In | Type | Required | Description |
|---|
zone_id | query | string(uuid) | Yes | — |
|---|
Responses
listDNSRecords Responses| Status | Description |
|---|
200 | Draft records visible in the authenticated scope. Fields:items: array<Record> |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The 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| Name | In | Type | Required | Description |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
createDNSRecord Request body| Name | Type | Required | Description |
|---|
target_scope_id | string(uuid) | No | — |
|---|
zone_id | string(uuid) | Yes | — |
|---|
name | string | Yes | — |
|---|
type | string: A / AAAA / CNAME / TXT | Yes | — |
|---|
content | string | Yes | — |
|---|
ttl | integer | Yes | — |
|---|
Responses
createDNSRecord Responses| Status | Description |
|---|
201 | Draft 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) |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
updateDNSRecord Request body| Name | Type | Required | Description |
|---|
expected_version | integer(int64) | Yes | — |
|---|
name | string | Yes | — |
|---|
type | string: A / AAAA / CNAME / TXT | Yes | — |
|---|
content | string | Yes | — |
|---|
ttl | integer | Yes | — |
|---|
Responses
updateDNSRecord Responses| Status | Description |
|---|
200 | Updated 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) |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | Quoted positive resource version. |
|---|
Responses
deleteDNSRecord Responses| Status | Description |
|---|
204 | Record deleted. |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, 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| Status | Description |
|---|
200 | Scope-level DNS TTL. Provider secrets are never returned. Fields:scope_id: string(uuid) ttl: integer version: integer(int64) updated_at?: string(date-time) |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
503 | A 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| Name | In | Type | Required | Description |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
updateDNSSettings Request body| Name | Type | Required | Description |
|---|
ttl | integer | Yes | — |
|---|
Responses
updateDNSSettings Responses| Status | Description |
|---|
200 | Updated scope-level DNS TTL. Fields:scope_id: string(uuid) ttl: integer version: integer(int64) updated_at?: string(date-time) |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
409 | The requested state conflicts with an existing resource or idempotency fact. |
|---|
503 | A 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| Name | In | Type | Required | Description |
|---|
operation_id | path | string(uuid) | Yes | — |
|---|
Responses
getDNSOperation Responses| Status | Description |
|---|
200 | Current 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) |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
404 | The requested resource was not found. |
|---|
503 | A 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| Name | In | Type | Required | Description |
|---|
kind | path | string: repair / cleanup | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
Responses
enqueueDNSOperation Responses| Status | Description |
|---|
202 | Durable background job accepted; no provider mutation is reported until a worker completes it. Fields:operation: DNSOperation replayed: boolean |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
409 | The requested state conflicts with an existing resource or idempotency fact. |
|---|
503 | A 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| Status | Description |
|---|
200 | Zones visible in the authenticated scope. Fields:items: array<Zone> |
|---|
401 | Authentication is required. |
|---|
403 | The 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| Name | In | Type | Required | Description |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
Request body
application/json · Required:Yes
createDNSZone Request body| Name | Type | Required | Description |
|---|
target_scope_id | string(uuid) | No | — |
|---|
provider_id | string(uuid) | Yes | — |
|---|
name | string | Yes | — |
|---|
Responses
createDNSZone Responses| Status | Description |
|---|
201 | Draft 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) |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, 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| Name | In | Type | Required | Description |
|---|
id | path | string(uuid) | Yes | — |
|---|
Idempotency-Key | header | string | Yes | — |
|---|
If-Match | header | string | Yes | Quoted positive resource version. |
|---|
Responses
deleteDNSZone Responses| Status | Description |
|---|
204 | Zone deleted. |
|---|
400 | Invalid request or structurally invalid DNS/certificate data. |
|---|
401 | Authentication is required. |
|---|
403 | The active role lacks the required permission. |
|---|
404 | Resource absent or hidden by tenant isolation. |
|---|
409 | Duplicate, 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