Skip to content
runlot
ReferenceAPIDNS zone

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 DNS zones this org runs on the runlot nameservers. rrsets is omitted here and is returned only when you fetch a single zone. Requires viewer or higher.

operationId listZones

Status codeDescriptionResponse body
200ListZoneList
403——
404——
503dns_not_configured — this deployment does not use runlot DNS. no_core — the service is temporarily unavailable.Error

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

Idempotent — an existing zone comes back unchanged. A new zone is created with an SOA record and an apex NS rrset. That NS rrset is managed by runlot and cannot be edited; without it the domain would not resolve at all.

Creating the zone does not by itself make any name resolve through runlot. Change the NS records at your registrar to the values in nameservers for delegation to take effect — the delegation field reflects that state. Requires admin or higher. Recorded in the audit log 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
503dns_not_configured — this deployment does not use runlot DNS. no_core — the service is temporarily unavailable.Error

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

Requires viewer or higher.

operationId getZone

Status codeDescriptionResponse body
200DNS zone and RRsetZoneDetail
403——
404——
503dns_not_configured — this deployment does not use runlot DNS. no_core — the service is temporarily unavailable.Error

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

Deletes all records and the zone itself. If delegation still points at the runlot nameservers, the domain will stop resolving — change the NS records at your registrar before deleting. Requires admin or higher. Recorded in the audit log as dns.zone.delete.

operationId deleteZone

Status codeDescriptionResponse body
204Deleted—
403——
404——
503dns_not_configured — this deployment does not use runlot DNS. no_core — the service is temporarily unavailable.Error

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

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

Values are validated when you save: 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 managed by runlot (project linking, certificate issuance, or a zone's NS) returns 409 managed_rrset.

Requires member or higher. Recorded in the audit log 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
503dns_not_configured — this deployment does not use runlot DNS. no_core — the service is temporarily unavailable.Error

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

Requires member or higher. A record that Runlot manages for you returns 409 managed_rrset — to remove one, disconnect the project from its Domains screen rather than deleting the record here. Audit event dns.rrset.delete.

operationId deleteRRset

Status codeDescriptionResponse body
204deleted—
403——
404——
409A row managed by the app (managed_rrset)Error
503DNS is not enabled for this deployment (dns_not_configured), or the service is temporarily unavailable (no_core).Error

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

Moves the zone from off to signing. Signing is performed by the nameserver, and key material is never stored by Runlot. Turning DNSSEC off also clears the recorded DS. Leaving an old key's DS registered in the parent zone stops the domain from validating. Requires admin or higher.

operationId setZoneDNSSEC

Request body: application/json · object

Status codeDescriptionResponse body
200The zone that changedZone
403——
404——
503DNS is not enabled for this deployment (dns_not_configured), or the service is temporarily unavailable (no_core).Error

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

Runlot does not query the parent zone. Send this value once the DS record exists in the parent zone; the zone then moves from signing to ds_pending. An empty list means "not yet" and 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
503DNS is not enabled for this deployment (dns_not_configured), or the service is temporarily unavailable (no_core).Error

On this page