runlot
ReferenceAPI

DNS zone

Covers 8 API operations in the dns category.

MethodPathDescription
GET/v1/orgs/{orgSlug}/dns/zonesList of DNS zones (runlot dns zones)
POST/v1/orgs/{orgSlug}/dns/zonesCreates a DNS zone (runlot dns create)
GET/v1/orgs/{orgSlug}/dns/zones/{zone}A single DNS zone and all its records
DELETE/v1/orgs/{orgSlug}/dns/zones/{zone}Deletes a DNS zone (runlot dns delete)
PUT/v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type}Create or update a record (runlot dns set)
DELETE/v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type}Delete a record (runlot dns rm)
POST/v1/orgs/{orgSlug}/dns/zones/{zone}/dnssecTurns zone signing on or off
PUT/v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec/dsStore the DS to register with the parent zone

GET /v1/orgs/{orgSlug}/dns/zones

The list of DNS zones this org operates on the Runlot nameservers (docs/domains.md §4). rrsets is not included, and is provided only in the single-item lookup. Available to viewer and above.

operationId listZones

Status codeDescriptionResponse body
200ListZoneList
403
404
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

POST /v1/orgs/{orgSlug}/dns/zones

Is idempotent — an existing zone comes back unchanged. A zone is born with an SOA (the generator builds it from serial) and an apex NS rrset, and that NS is locked in the editor because managed_by = system: if a user deletes it, the domain never resolves at all (§7).

Creating the zone alone does not yet make any name receive our answers. You must change the NS at the registrar to nameservers for delegation to take effect (the delegation badge reflects that state). Requires admin or higher. Audited as dns.zone.create.

operationId createZone

Request body: application/json · object

Status codeDescriptionResponse body
200The zone that was created or already existedZoneDetail
400
403
404
409A DNS zone already in use by another org (zone_taken)Error
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

GET /v1/orgs/{orgSlug}/dns/zones/{zone}

Requires viewer or higher.

operationId getZone

Status codeDescriptionResponse body
200DNS zone and RRsetZoneDetail
403
404
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

DELETE /v1/orgs/{orgSlug}/dns/zones/{zone}

Deletes all records and the DNS zone file together. If delegation still points to Runlot nameservers, the domain will not connect properly. You must change the NS at the registrar before deleting. Admin or above. Audit dns.zone.delete.

operationId deleteZone

Status codeDescriptionResponse body
204deleted
403
404
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

PUT /v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type}

Replaces one whole rrset (name + type) — this does not add a single value; records becomes the entire new content of that rrset.

Validation happens at save time (§4.3): a CNAME cannot sit at the apex and cannot coexist with another type on the same name, and A/AAAA, MX, SRV, and CAA are checked for shape. A TXT record over 255 bytes is split into chunks in the zone file. A record with managed_by set (project linking, ACME, or NS of a DNS zone) returns 409 managed_rrset.

Requires member or higher. Audited as dns.rrset.set.

operationId putRRset

Request body: application/json · object

Status codeDescriptionResponse body
200Stored rrsetRRset
400
403
404
409Either a record the project manages (managed_rrset) or one covered by the CNAME coexistence ban (cname_conflict)Error
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

DELETE /v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type}

A managed record returns 409 managed_rrset. To disconnect a project, disconnect it from the project's Domains screen instead of deleting the record (§7). Requires member or higher. Audit event dns.rrset.delete.

operationId deleteRRset

Status codeDescriptionResponse body
204deleted
403
404
409A row managed by the app (managed_rrset)Error
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

POST /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec

off → signing. Signing is performed by the nameserver (Knot), and key material is never stored in the CP (§4.5). Disabling the feature also deletes the recorded DS. Registering an old key's DS in the parent zone prevents the domain from validating correctly. Available to admin and above.

operationId setZoneDNSSEC

Request body: application/json · object

Status codeDescriptionResponse body
200The zone that changedZone
403
404
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

PUT /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec/ds

The CP does not query the parent zone. This value is the fact, reported by the operator (or D3's registrar sync), that the nameserver has created the DS record, and the state moves from signing → ds_pending. An empty list means "not yet", so it does not advance the state. Requires admin or higher.

operationId setZoneDS

Request body: application/json · object

Status codeDescriptionResponse body
200The zone that changedZone
400
403
404
409The zone's DNSSEC is off (dnssec_off)Error
503The deployment has its own DNS turned off (dns_not_configured), or cp-public was started without a cp-core address (no_core).Error

On this page