Skip to content
Coritan Docs

Host DNS zones for your organization

Host your organization's own domains on Coritan's nameservers, edit their records, publish DNSSEC and balance traffic across regions.

View as Markdown

The DNS tab holds the zones your organization owns on Coritan's authoritative nameservers. They are the domains you add, such as your storefront's domain, your mail domain or the base domain of your game proxy, and the names your customers claim under a platform domain from your storefront.

  • Every member can see the zones and their records. Creating, changing and deleting them needs the owner or admin role.
  • You need a domain you control at a registrar, so you can point its nameservers at Coritan.
  1. In the dashboard, open the organization, then DNS.
  2. Select New zone.
  3. Enter the Domain, such as example.com, then select Create zone. The zone opens.
  4. The zone starts with NS records at @ that name Coritan's nameservers. At your registrar, set the domain's nameservers to those names.

Coritan signs every new zone with DNSSEC. When DNSSEC reads Signed, the zone page shows the DS record to give your registrar. Until you add it there, resolvers treat the zone as unsigned. Set up DNSSEC explains the DS record.

  1. In the DNS tab, select the zone, or Records in its row.
  2. Select Add record, or select a record to edit it.
  3. Fill in the record:
    • Name: @ for the domain itself, or a label under it, such as www.
    • Type: the record type. DNS record types describes each one.
    • Content: what the record answers with, such as 203.0.113.10 for an A record.
    • TTL: how long resolvers may cache the answer, from 1 minute to 1 day.
    • Priority for MX and SRV records, and Weight and Port for SRV records.
    • Comment: a note for your team.
  4. For an A or AAAA record, tick Proxy through Coritan to send its traffic through Coritan's edge for TLS and the web application firewall. The origin address then stays hidden.
  5. Select Add record, or Save record when editing.

You cannot change the name or type of an existing record. Delete it and add a new one instead.

To delete a record, select Delete record in its row, type the record type to confirm, then select Delete record in the dialog. Resolvers drop it as their caches expire.

To delete a zone, select Delete zone in its row on the DNS tab, type the domain to confirm, then select Delete zone in the dialog. This deletes every record in the zone, and the domain stops resolving through Coritan.

"Domain already registered"
The domain already has a zone on Coritan, in your organization or somewhere else.
"This domain is reserved by the platform"
Coritan keeps this domain for itself. Choose another.
"Zone limit reached"
Your organization holds as many zones as it may. Delete one you no longer use, or contact support.
"proxied is only valid for A/AAAA records"
Only A and AAAA records can go through the proxy. Untick Proxy through Coritan.
The domain does not resolve
Check that the domain's nameservers at your registrar match the NS records at @. Resolvers pick up a nameserver change only as their caches expire.

Reads take any member's access token; changes take the owner or admin role. The paths below are under /api/v1/orgs/acme/dns.

Create a zone, then add a record to it:

Shell
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/dns/zones" \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com"}'

curl -X POST "https://api.coritan.com/api/v1/orgs/acme/dns/zones/{zone_id}/records" \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "www", "record_type": "A", "content": "203.0.113.10", "ttl": 300}'

A record takes name, record_type, content, ttl (60 to 86400 seconds, 300 by default), priority, weight, port, proxied and comment. record_type is one of A, AAAA, CNAME, MX, TXT, SRV, NS, CAA, PTR, SVCB, HTTPS and DS.

Zones and records:

Operation What it does
GET /zones Lists your zones, with page and per_page (25 by default, at most 100).
GET /zones/{zone_id} Reads a zone, with its status, dnssec_enabled, serial, soa_email and record_count.
PATCH /zones/{zone_id} Changes soa_email, the zone's contact address.
DELETE /zones/{zone_id} Deletes the zone and every record in it.
GET /zones/{zone_id}/dnssec The zone's DNSSEC keys and its ds_records.
GET /zones/{zone_id}/stats Query counts over the last hours (24 by default, at most 720).
GET /zones/{zone_id}/export The zone as a zone file, in zone_file.
POST /zones/{zone_id}/import Adds the records in zone_file to the zone, and answers with how many it imported and the lines it could not read.
GET /zones/{zone_id}/records Lists the records. record_type and name filter them; page and per_page (100 by default, at most 1,000) page through them.
GET /zones/{zone_id}/records/{record_id} Reads a record.
PUT /zones/{zone_id}/records/{record_id} Changes a record's content, ttl, priority, weight, port, proxied or comment.
DELETE /zones/{zone_id}/records/{record_id} Deletes a record.

Load balancing is API only for organization zones. It works as Load balancing describes for websites:

Operation What it does
GET /lb-regions The regions a load balancer can steer by.
GET and POST /zones/{zone_id}/pools List and create origin pools.
GET, PATCH and DELETE /zones/{zone_id}/pools/{pool_id} Read, change and delete a pool.
POST /zones/{zone_id}/pools/{pool_id}/members Adds an origin (address, address_type, weight, priority and health check settings) to a pool.
PATCH and DELETE /zones/{zone_id}/pools/{pool_id}/members/{member_id} Change and remove an origin.
POST /zones/{zone_id}/pools/{pool_id}/members/{member_id}/health-check Checks an origin's health now.
GET and POST /zones/{zone_id}/load-balancers List and create load balancers.
GET, PATCH and DELETE /zones/{zone_id}/load-balancers/{lb_id} Read, change and delete a load balancer.
POST /zones/{zone_id}/load-balancers/{lb_id}/preview Shows which origins a query from from_location or from_ip would get. Any member can call it.

The older /zones/{zone_id}/lb-pools paths take the same requests as /pools.

API operations on this page

MethodPathWhat it does
GET/api/v1/orgs/{org_slug}/dns/zonesList zones
POST/api/v1/orgs/{org_slug}/dns/zonesCreate zone
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}Get zone
PATCH/api/v1/orgs/{org_slug}/dns/zones/{zone_id}Update zone
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}Delete zone
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/dnssecGet DNSSEC info
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/exportExport zone
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/importImport zone
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-poolsList LB pools
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-poolsCreate LB pool
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}Get LB pool
PATCH/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}Update LB pool
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}Delete LB pool
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/membersCreate LB member
PATCH/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members/{member_id}Update LB member
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members/{member_id}Delete LB member
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members/{member_id}/health-checkHealth check LB member
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancersOrg list lbs
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancersOrg create LB
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}Org get LB
PATCH/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}Org update LB
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}Org delete LB
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}/previewOrg preview LB
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/poolsOrg list pools
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/poolsOrg create pool
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}Org get pool
PATCH/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}Org update pool
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}Org delete pool
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/membersOrg create pool member
PATCH/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members/{member_id}Org update pool member
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members/{member_id}Org delete pool member
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members/{member_id}/health-checkOrg pool member health
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/recordsList records
POST/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/recordsCreate record
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records/{record_id}Get record
PUT/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records/{record_id}Update record
DELETE/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records/{record_id}Delete record
GET/api/v1/orgs/{org_slug}/dns/zones/{zone_id}/statsGet zone stats
GET/api/v1/orgs/{org_slug}/dns/lb-regionsOrg list LB regions