# 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.

Source: https://www.coritan.com/docs/organizations/dns/

In the dashboard:

- /dashboard/organizations/…/dns: https://www.coritan.com/dashboard/organizations

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.

## Before you begin

- 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.

## Add a zone

1. In the [dashboard](https://www.coritan.com/dashboard/organizations), 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](/docs/websites/dns/dnssec/) explains the DS record.

## Add or edit a 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](/docs/websites/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.

## Delete a record or a zone

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.

## Troubleshooting

"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](https://www.coritan.com/dashboard/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.

## Related

- [How DNS hosting works](/docs/websites/dns/)
- [Import and export a zone file](/docs/websites/dns/import-and-export-a-zone-file/)
- [Load balancing](/docs/websites/load-balancing/)

## With the API

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:

```bash
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](/docs/websites/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

- `GET /api/v1/orgs/{org_slug}/dns/zones`: List zones (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones)
- `POST /api/v1/orgs/{org_slug}/dns/zones`: Create zone (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}`: Get zone (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id)
- `PATCH /api/v1/orgs/{org_slug}/dns/zones/{zone_id}`: Update zone (https://www.coritan.com/docs/api/reference/organizations/dns/#op-patch-api-v1-orgs-org-slug-dns-zones-zone-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}`: Delete zone (https://www.coritan.com/docs/api/reference/organizations/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/dnssec`: Get DNSSEC info (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-dnssec)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/export`: Export zone (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-export)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/import`: Import zone (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-import)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools`: List LB pools (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools`: Create LB pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}`: Get LB pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id)
- `PATCH /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}`: Update LB pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-patch-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}`: Delete LB pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members`: Create LB member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id-members)
- `PATCH /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members/{member_id}`: Update LB member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-patch-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id-members-member-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members/{member_id}`: Delete LB member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id-members-member-id)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/lb-pools/{pool_id}/members/{member_id}/health-check`: Health check LB member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-lb-pools-pool-id-members-member-id-h)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers`: Org list lbs (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-load-balancers)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers`: Org create LB (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-load-balancers)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}`: Org get LB (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-load-balancers-lb-id)
- `PATCH /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}`: Org update LB (https://www.coritan.com/docs/api/reference/organizations/dns/#op-patch-api-v1-orgs-org-slug-dns-zones-zone-id-load-balancers-lb-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}`: Org delete LB (https://www.coritan.com/docs/api/reference/organizations/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id-load-balancers-lb-id)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/load-balancers/{lb_id}/preview`: Org preview LB (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-load-balancers-lb-id-preview)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools`: Org list pools (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-pools)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools`: Org create pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-pools)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}`: Org get pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id)
- `PATCH /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}`: Org update pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-patch-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}`: Org delete pool (https://www.coritan.com/docs/api/reference/organizations/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members`: Org create pool member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id-members)
- `PATCH /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members/{member_id}`: Org update pool member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-patch-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id-members-member-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members/{member_id}`: Org delete pool member (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id-members-member-id)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/pools/{pool_id}/members/{member_id}/health-check`: Org pool member health (https://www.coritan.com/docs/api/reference/organizations/organizations-members/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-pools-pool-id-members-member-id-heal)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records`: List records (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-records)
- `POST /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records`: Create record (https://www.coritan.com/docs/api/reference/organizations/dns/#op-post-api-v1-orgs-org-slug-dns-zones-zone-id-records)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records/{record_id}`: Get record (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-records-record-id)
- `PUT /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records/{record_id}`: Update record (https://www.coritan.com/docs/api/reference/organizations/dns/#op-put-api-v1-orgs-org-slug-dns-zones-zone-id-records-record-id)
- `DELETE /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/records/{record_id}`: Delete record (https://www.coritan.com/docs/api/reference/organizations/dns/#op-delete-api-v1-orgs-org-slug-dns-zones-zone-id-records-record-id)
- `GET /api/v1/orgs/{org_slug}/dns/zones/{zone_id}/stats`: Get zone stats (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-zones-zone-id-stats)
- `GET /api/v1/orgs/{org_slug}/dns/lb-regions`: Org list LB regions (https://www.coritan.com/docs/api/reference/organizations/dns/#op-get-api-v1-orgs-org-slug-dns-lb-regions)
