DNS zone
Covers 8 API operations in the dns category.
| Method | Path | Description |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/dns/zones | List of DNS zones (runlot dns zones) |
| POST | /v1/orgs/{orgSlug}/dns/zones | Creates 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}/dnssec | Turns zone signing on or off |
| PUT | /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec/ds | Store 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 code | Description | Response body |
|---|---|---|
| 200 | List | ZoneList |
| 403 | — | — |
| 404 | — | — |
| 503 | dns_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 code | Description | Response body |
|---|---|---|
| 200 | The zone that was created or already existed | ZoneDetail |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | A DNS zone already in use by another org (zone_taken) | Error |
| 503 | dns_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 code | Description | Response body |
|---|---|---|
| 200 | DNS zone and RRset | ZoneDetail |
| 403 | — | — |
| 404 | — | — |
| 503 | dns_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 code | Description | Response body |
|---|---|---|
| 204 | Deleted | — |
| 403 | — | — |
| 404 | — | — |
| 503 | dns_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 code | Description | Response body |
|---|---|---|
| 200 | Stored rrset | RRset |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | Either a record the project manages (managed_rrset) or one covered by the CNAME coexistence ban (cname_conflict) | Error |
| 503 | dns_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 code | Description | Response body |
|---|---|---|
| 204 | deleted | — |
| 403 | — | — |
| 404 | — | — |
| 409 | A row managed by the app (managed_rrset) | Error |
| 503 | DNS 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 code | Description | Response body |
|---|---|---|
| 200 | The zone that changed | Zone |
| 403 | — | — |
| 404 | — | — |
| 503 | DNS 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 code | Description | Response body |
|---|---|---|
| 200 | The zone that changed | Zone |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | The zone's DNSSEC is off (dnssec_off) | Error |
| 503 | DNS is not enabled for this deployment (dns_not_configured), or the service is temporarily unavailable (no_core). | Error |