Zones

A zone is a domain hosted on the Quathos Monitor authoritative nameservers. You create it, prove you own the domain, point your registrar at the assigned nameservers, and the zone becomes active once delegation is detected.

Lifecycle

  • pending: recorded in your organization and waiting. Records you add are stored, not served yet.
  • active: ownership is proven and every observed public NS points to Quathos Monitor. The zone is published on the nameservers with its records and is live.
  • Delegation is re-checked every 5 minutes. If it is lost, the zone goes back to pending and the organization owner is notified by e-mail.

The zone object

FieldTypeDescription
id integerUnique identifier of the zone.
org_id integerOrganization that owns the zone.
name stringApex domain, normalized to lowercase without trailing dot (e.g. example.com).
status enuminitializing · pending · active · moved · deleted. New zones start as pending.
nameservers string[] | nullNameservers assigned to the zone (ns1.monitor.quathos.com, ns2.monitor.quathos.com).
dnssec_enabled booleanWhether the zone is signed with DNSSEC.
checked_at datetime | nullLast time delegation was checked (UTC).
created_at datetimeCreation timestamp (UTC).

Create a zone

POST /orgs/{org_id}/zones

Records the zone in your organization and returns it in pending with the assigned nameservers. Nothing is published on the nameservers yet: that happens at activation.

Body parameters

ParameterTypeDescription
name requiredstringApex domain, 3–253 characters. Normalized to lowercase; must be a valid hostname.

Example

cURL
curl -X POST "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones" \
  -H "Authorization: Bearer $QUATHOS_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "example.com" }'
response · 201 Created
{
  "id": 42,
  "org_id": 7,
  "name": "example.com",
  "status": "pending",
  "nameservers": ["ns1.monitor.quathos.com", "ns2.monitor.quathos.com"],
  "dnssec_enabled": false,
  "checked_at": null,
  "created_at": "2026-07-22T14:03:22.418093"
}

Requirements

The same domain can be added once per organization (409 zone_exists_in_org), and not at all while another organization has it active (409 zone_active_elsewhere). The zone limit of your plan answers 422.

List & retrieve

GET /orgs/{org_id}/zones

Lists the organization's zones, ordered by name.

GET /orgs/{org_id}/zones/{zone_id}

Returns a single zone, or 404 zone_not_found if it doesn't exist in your organization.

Setup instructions

GET /orgs/{org_id}/zones/{zone_id}/setup

Activation helper: the nameservers to configure at your registrar (assigned_ns), the ones the public DNS currently reports (current_ns), whether delegation already points to Quathos Monitor (delegated), the TXT record that proves ownership (ownership_record, with ownership_verified) and a human-readable checklist (instructions).

cURL
curl "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones/42/setup" \
  -H "Authorization: Bearer $QUATHOS_KEY"
response · 200 OK
{
  "zone_id": 42,
  "name": "example.com",
  "status": "pending",
  "assigned_ns": ["ns1.monitor.quathos.com", "ns2.monitor.quathos.com"],
  "zone_ns": ["ns1.monitor.quathos.com", "ns2.monitor.quathos.com"],
  "current_ns": ["ns1.oldprovider.net", "ns2.oldprovider.net"],
  "delegated": false,
  "ownership_token": "kP3vQ8...",
  "ownership_verified": false,
  "ownership_record": {
    "name": "_quathos-challenge.example.com",
    "type": "TXT",
    "value": "kP3vQ8..."
  },
  "instructions": ["…"]
}

Verify ownership

POST /orgs/{org_id}/zones/{zone_id}/verify-ownership

Reads the TXT record at _quathos-challenge.<domain> on the domain's current DNS and, when it carries the zone's ownership_token, marks ownership as proven. Publish it at the provider that serves the domain today, before switching nameservers. Once proven, it stays proven. Needs zone:write; up to 12 calls per minute per organization.

cURL
curl -X POST "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones/42/verify-ownership" \
  -H "Authorization: Bearer $QUATHOS_KEY"
response · 200 OK
{
  "zone_id": 42,
  "name": "example.com",
  "ownership_verified": true
}

Why a TXT, and not just delegation

The nameservers are shared by every customer. Pointing a domain at them proves nothing about who controls it, so without the TXT proof a delegated zone stays pending and is never published.

Import records

POST /orgs/{org_id}/zones/{zone_id}/import

Bring existing records into the zone. Provide either a BIND zone file or ask for a quick scan of common names at your current provider. Records that fail validation, exceed the plan limit or already exist are skipped, not imported. Up to 10 calls per minute per organization.

Body parameters

ParameterTypeDescription
bind_file stringContents of a BIND zone file to parse and import, up to 1 MB.
quick_scan booleanAlternatively, probe common names (apex, www, mail…) at the current provider and import what is found.

One of the two is required

Send bind_file or "quick_scan": true. Omitting both answers 422 zone_import_input_required; an unparseable file, 422 zone_file_invalid.

A quick scan is never complete

The DNS gives no way to list a zone from the outside, so the scan probes likely names instead of enumerating them. Records under custom names (DKIM selectors tied to an account id, for instance) can be missed. The response carries a warnings array describing what may be absent; show it to the user before they repoint their nameservers. A BIND file exported from the current provider is the only complete path.

Example

cURL · BIND file
curl -X POST "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones/42/import" \
  -H "Authorization: Bearer $QUATHOS_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "bind_file": "$ORIGIN example.com.\nwww 3600 IN A 203.0.113.10\n..." }'
cURL · quick scan
curl -X POST "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones/42/import" \
  -H "Authorization: Bearer $QUATHOS_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "quick_scan": true }'
response · 200 OK
{
  "imported": 12,
  "skipped": 3,
  "warnings": ["…"]
}

Check delegation

POST /orgs/{org_id}/zones/{zone_id}/check-delegation

Re-checks the public NS of the domain on demand and updates the zone status: pending → active when every observed nameserver is ours and ownership is proven (the zone is published at that moment), active → pending if delegation was lost. Returns the updated zone object with a fresh checked_at. Needs only zone:read; up to 12 calls per minute per organization.

cURL
curl -X POST "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones/42/check-delegation" \
  -H "Authorization: Bearer $QUATHOS_KEY"

Delete a zone

DELETE /orgs/{org_id}/zones/{zone_id}

Removes the zone from the authoritative nameservers and deletes it, records included. Returns 204 No Content.

cURL
curl -X DELETE "https://api.monitor.quathos.com/v1/orgs/$ORG_ID/zones/42" \
  -H "Authorization: Bearer $QUATHOS_KEY"

Irreversible

Deleting a zone that is still delegated to Quathos Monitor takes the domain offline. Move the delegation away first, then delete.