Skip to content

DNS Zones

DNS zones are hosted on the b'nerd platform using PowerDNS. Each zone belongs to an organization and contains the DNS records for one or more domain names.

Endpoints

Method Path Description
GET /dns/zones?organization_id=<uuid> List zones
POST /dns/zones Create a zone
GET /dns/zones/{id} Show a zone
DELETE /dns/zones/{id} Delete a zone

organization_id is required for list operations.

List zones

GET /dns/zones?organization_id=<uuid>
Authorization: Bearer <token>

Returns an array of zone objects for your organization.

Create a zone

POST /dns/zones
Authorization: Bearer <token>
Content-Type: application/json

{
  "zone": {
    "name": "example.com",
    "organization_id": "<uuid>"
  }
}

Returns 201 Created. The zone is immediately active in PowerDNS; you can add records right away, but DNS propagation depends on when you update your registrar's NS records to point to the b'nerd nameservers.

Show a zone

GET /dns/zones/{id}
Authorization: Bearer <token>

Returns the zone object including its current records (via the PowerDNS-compatible proxy for read operations).

Delete a zone

DELETE /dns/zones/{id}
Authorization: Bearer <token>

Returns 204 No Content. Deletes the zone and all its records from PowerDNS. This is irreversible — ensure you have exported or migrated all records before deleting.

PowerDNS-compatible proxy

For automation tools that expect a PowerDNS HTTP API (e.g. external-dns), the platform exposes a compatibility proxy:

GET  /dns/external/api/v1/servers/localhost/zones
POST /dns/external/api/v1/servers/localhost/zones
GET  /dns/external/api/v1/servers/localhost/zones/{zone_id}
PATCH /dns/external/api/v1/servers/localhost/zones/{zone_id}
DELETE /dns/external/api/v1/servers/localhost/zones/{zone_id}

These endpoints use static_token authentication (no JWT). Configure external-dns with:

# external-dns deployment env
- name: EXTERNAL_DNS_PROVIDER
  value: pdns
- name: PDNS_API_SERVER_ENDPOINT
  value: https://api.bnerd.cloud/dns/external
- name: PDNS_API_KEY
  value: <your-static-token>

See Domain Verification for verifying ownership of domains you bring to the platform.