---
title: "Gyro DNS (yönetilen DNS) — API başvurusu"
description: "ns1.gyrodns.net (İstanbul) + ns2.gyrodns.net (Almanya) yetkili DNS: zone'lar, kayıtlar, BIND içe/dışa aktarma, tek tık DNSSEC, sağlık kontrollü failov"
url: https://www.gyrohosting.com/developers/tr/api/managed-dns.html
language: tr
openapi: https://www.gyrohosting.com/developers/openapi.json
api_version: 2.30.0
---

# Gyro DNS (yönetilen DNS)

ns1.gyrodns.net (İstanbul) + ns2.gyrodns.net (Almanya) yetkili DNS: zone'lar, kayıtlar, BIND içe/dışa aktarma, tek tık DNSSEC, sağlık kontrollü failover kayıtları.

Base URL: `https://www.gyrohosting.com/api/v1/client` · OpenAPI: https://www.gyrohosting.com/developers/openapi.json


## GET /cloud/dns/acme-challenge

**Doğrulama kaydı yayında mı?** · operationId `acmeChallengeStatus` · scope `dns_acme` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/acmeChallengeStatus.json

İki yetkili ad sunucusuna (ns1/ns2.gyrodns.net) doğrudan sorar. İkisi de `value` değerini yayınlıyorsa `ready` true. Ekledikten sonra birkaç saniyede bir sorun (genelde < 1 dk).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `name` (zorunlu) | query | string | _acme-challenge.<domain> |
| `value` | query | string | Challenge value (key authorization digest) |

### Yanıtlar

- **200**: Status
- **401**: Missing, invalid or revoked key
- **403**: zone_not_allowed / action_not_allowed
- **404**: Not found — also returned for objects owned by someone else
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns acme-challenge status
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/acme-challenge

**ACME doğrulama TXT değeri ekle** · operationId `acmeChallengeAdd` · scope `dns_acme` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/acmeChallengeAdd.json

`value` değerini `name` adındaki TXT kümesine ekler (TTL 60); diğer değerler kalır, böylece bir sertifikanın kök ve joker adları birlikte doğrulanır (ad başına en çok 10 değer). Hizmet ve zone addan bulunur (adı kapsayan en uzun Gyro DNS zone'unuz; hosting/cPanel zone'ları desteklenmez). Tekrarlanabilir.


### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `name` (zorunlu) | string | _acme-challenge.<domain> (for *.example.com: _acme-challenge.example.com) |
| `value` (zorunlu) | string | Challenge value (base64url, 16-128 characters) |

### Yanıtlar

- **202**: Added
- **401**: Missing, invalid or revoked key
- **403**: zone_not_allowed
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "_acme-challenge.example.com", "value": "string"}'
```
```bash
gyro dns acme-challenge add --help    # tüm seçenekler
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge", headers=h, json={"name": "_acme-challenge.example.com", "value": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "_acme-challenge.example.com", "value": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/acme-challenge

**ACME doğrulama TXT değerini sil** · operationId `acmeChallengeRemove` · scope `dns_acme` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/acmeChallengeRemove.json

Yalnız `value` değerini siler (sorgu ya da JSON gövde); küme boşalınca kayıt silinir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `name` (zorunlu) | query | string | _acme-challenge.<domain> |
| `value` | query | string | Challenge value (key authorization digest) |

### Yanıtlar

- **202**: Removed
- **401**: Missing, invalid or revoked key
- **403**: zone_not_allowed
- **404**: Not found — also returned for objects owned by someone else
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns acme-challenge remove
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/acme-challenge", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/acme-challenge

**Doğrulama kaydı yayında mı?** · operationId `acmeChallengeStatusS` · scope `dns_acme` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/acmeChallengeStatusS.json

İki yetkili ad sunucusuna (ns1/ns2.gyrodns.net) doğrudan sorar. İkisi de `value` değerini yayınlıyorsa `ready` true. Ekledikten sonra birkaç saniyede bir sorun (genelde < 1 dk).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Gyro DNS service id |
| `name` (zorunlu) | query | string | _acme-challenge.<domain> |
| `value` | query | string | Challenge value (key authorization digest) |

### Yanıtlar

- **200**: Status
- **401**: Missing, invalid or revoked key
- **403**: zone_not_allowed / action_not_allowed
- **404**: Not found — also returned for objects owned by someone else
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns acme-challenge status-in-service 12345
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/acme-challenge

**ACME doğrulama TXT değeri ekle** · operationId `acmeChallengeAddS` · scope `dns_acme` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/acmeChallengeAddS.json

`value` değerini `name` adındaki TXT kümesine ekler (TTL 60); diğer değerler kalır, böylece bir sertifikanın kök ve joker adları birlikte doğrulanır (ad başına en çok 10 değer). Hizmet ve zone addan bulunur (adı kapsayan en uzun Gyro DNS zone'unuz; hosting/cPanel zone'ları desteklenmez). Tekrarlanabilir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Gyro DNS service id |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `name` (zorunlu) | string | _acme-challenge.<domain> (for *.example.com: _acme-challenge.example.com) |
| `value` (zorunlu) | string | Challenge value (base64url, 16-128 characters) |

### Yanıtlar

- **202**: Added
- **401**: Missing, invalid or revoked key
- **403**: zone_not_allowed
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "_acme-challenge.example.com", "value": "string"}'
```
```bash
gyro dns acme-challenge add-in-service 12345 --help    # tüm seçenekler
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge", headers=h, json={"name": "_acme-challenge.example.com", "value": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "_acme-challenge.example.com", "value": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/{id}/acme-challenge

**ACME doğrulama TXT değerini sil** · operationId `acmeChallengeRemoveS` · scope `dns_acme` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/acmeChallengeRemoveS.json

Yalnız `value` değerini siler (sorgu ya da JSON gövde); küme boşalınca kayıt silinir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Gyro DNS service id |
| `name` (zorunlu) | query | string | _acme-challenge.<domain> |
| `value` | query | string | Challenge value (key authorization digest) |

### Yanıtlar

- **202**: Removed
- **401**: Missing, invalid or revoked key
- **403**: zone_not_allowed
- **404**: Not found — also returned for objects owned by someone else
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns acme-challenge remove-in-service 12345
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-challenge", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/acme-keys

**ACME anahtarlarını listele** · operationId `listAcmeKeys` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/listAcmeKeys.json




### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Gyro DNS service id |

### Yanıtlar

- **200**: Keys
- **401**: Missing, invalid or revoked key
- **404**: Not found — also returned for objects owned by someone else

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns acme-key list 12345
```
```hcl
# kaynak gyro_dns_acme_key: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_acme_key
# ACME key for Let's Encrypt DNS-01 (wildcard certificates). It can only add/remove _acme-challenge TXT records.
resource "gyro_dns_acme_key" "k8s" {
  service_id = 12345 # Gyro DNS service
  name       = "k8s-prod"
  zones      = ["example.com"]
}

# e.g. hand it to cert-manager
resource "kubernetes_secret" "gyro_acme" {
  metadata {
    name      = "gyro-acme"
    namespace = "cert-manager"
  }
  data = { token = gyro_dns_acme_key.k8s.token }
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/acme-keys

**ACME anahtarı oluştur** · operationId `createAcmeKey` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/createAcmeKey.json

Sertifika otomasyonu için yalnız `_acme-challenge` TXT kaydı ekleyip silebilen anahtar (kapsam `dns_acme`); isteğe bağlı yalnız `zones` içinde ve yalnız `ips` adreslerinden. Zone okuyamaz, başka kayıt değiştiremez, başka uca erişemez. Anahtar bir kez döner. Hizmet başına en çok 10.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Gyro DNS service id |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `name` | string | Label (e.g. web-01) |
| `zones` | array<string> | Allowed zones (empty = all zones of the service) |
| `ips` | array<string> | Allowed client IPs (empty = any) |

### Yanıtlar

- **201**: Created (token shown once)
- **401**: Missing, invalid or revoked key
- **403**: subkey_forbidden
- **404**: Not found — also returned for objects owned by someone else
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "zones": ["string"], "ips": ["string"]}'
```
```bash
gyro dns acme-key create 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_acme_key: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_acme_key
# ACME key for Let's Encrypt DNS-01 (wildcard certificates). It can only add/remove _acme-challenge TXT records.
resource "gyro_dns_acme_key" "k8s" {
  service_id = 12345 # Gyro DNS service
  name       = "k8s-prod"
  zones      = ["example.com"]
}

# e.g. hand it to cert-manager
resource "kubernetes_secret" "gyro_acme" {
  metadata {
    name      = "gyro-acme"
    namespace = "cert-manager"
  }
  data = { token = gyro_dns_acme_key.k8s.token }
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys", headers=h, json={"name": "string", "zones": ["string"], "ips": ["string"]}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "zones": ["string"], "ips": ["string"]}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/{id}/acme-keys/{kid}

**ACME anahtarını sil** · operationId `deleteAcmeKey` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/deleteAcmeKey.json

Anahtarı hemen iptal eder.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Gyro DNS service id |
| `kid` (zorunlu) | path | integer | ACME key id |

### Yanıtlar

- **200**: Deleted
- **401**: Missing, invalid or revoked key
- **404**: Not found — also returned for objects owned by someone else

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns acme-key delete 12345
```
```hcl
# kaynak gyro_dns_acme_key: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_acme_key
# ACME key for Let's Encrypt DNS-01 (wildcard certificates). It can only add/remove _acme-challenge TXT records.
resource "gyro_dns_acme_key" "k8s" {
  service_id = 12345 # Gyro DNS service
  name       = "k8s-prod"
  zones      = ["example.com"]
}

# e.g. hand it to cert-manager
resource "kubernetes_secret" "gyro_acme" {
  metadata {
    name      = "gyro-acme"
    namespace = "cert-manager"
  }
  data = { token = gyro_dns_acme_key.k8s.token }
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/acme-keys/1", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/zones

**DNS zone'larını listele** · operationId `typed_get_dns__id__zones` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_get_dns__id__zones.json

Bu DNS hizmetinin zone'ları (`items`, durum active|pending ve TXT doğrulama değeri), cPanel hosting'inizden kopyalanan salt okunur zone'lar (`cpanel`), paket sınırları ve ad sunucularımız.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |

### Yanıtlar

- **200**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns zone list 12345
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/zones

**Zone ekle** · operationId `typed_post_dns__id__zones` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_post_dns__id__zones.json

Alan adını talep eder. Sahiplik doğrulanınca ns1/ns2.gyrodns.net'te yayınlanır: ad sunucularımıza devir (zaten devredilmişse hemen) ya da mevcut DNS'inizde `_gyrodns-dogrulama.<zone>` = `txt_value` TXT kaydı. İsteğe bağlı `bind` (zone dosyası) etkinleşince içe aktarılır (SOA ve kök NS yok sayılır).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `name` (zorunlu) | string | Zone name (IDN allowed) |
| `bind` | string | Optional BIND zone file (max 2 MB) |
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "bind": "string", "confirm": true}'
```
```bash
gyro dns zone create 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones", headers=h, json={"name": "string", "bind": "string", "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "bind": "string", "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/zones/{zone}

**Zone'u kayıtlarıyla getir** · operationId `typed_get_dns__id__zones__zone` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_get_dns__id__zones__zone.json

Zone durumu, seri, DNSSEC (+DS) ve tüm kayıt kümeleri. Bekleyen zone'larda doğrulama bilgisi döner.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### Yanıtlar

- **200**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns zone get 12345
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/{id}/zones/{zone}

**Zone'u sil** · operationId `typed_delete_dns__id__zones__zone` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_delete_dns__id__zones__zone.json

Zone'u ve sağlık kontrollerini ad sunucularımızdan hemen kaldırır. `"confirm": true` gerekir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
```
```bash
gyro dns zone delete 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/zones/{zone}/verify

**Sahipliği şimdi doğrula** · operationId `typed_post_dns__id__zones__zone__verify` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_post_dns__id__zones__zone__verify.json

Devri / TXT'yi şimdi kontrol eder (sistem 14 gün boyunca kendiliğinden de kontrol eder).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/verify' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
```
```bash
gyro dns zone verify 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/verify", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/verify", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/zones/{zone}/import

**BIND zone dosyası içe aktar** · operationId `typed_post_dns__id__zones__zone__import` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_post_dns__id__zones__zone__import.json

`merge` dosyadaki kayıt kümelerini değiştirir, diğerlerini korur; `replace` dosyada olmayanları da siler. SOA ve kök NS yok sayılır; desteklenmeyen tipler `skipped` içinde. `"confirm": true` gerekir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `bind` (zorunlu) | string |  |
| `mode` | string (merge, replace) |  |
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/import' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"bind": "string", "mode": "merge", "confirm": true}'
```
```bash
gyro dns zone import 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/import", headers=h, json={"bind": "string", "mode": "merge", "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/import", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"bind": "string", "mode": "merge", "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/zones/{zone}/export

**Zone dosyasını dışa aktar** · operationId `typed_get_dns__id__zones__zone__export` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_get_dns__id__zones__zone__export.json

Zone'u BIND biçiminde döner (`bind`).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### Yanıtlar

- **200**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/export' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns zone export 12345
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/export", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/export", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/zones/{zone}/records

**Kayıt kümelerini listele** · operationId `typed_get_dns__id__zones__zone__records` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_get_dns__id__zones__zone__records.json

Tüm kayıt kümeleri (`rrsets`). `source=cpanel` cPanel hosting zone'unuzu okur (salt okunur).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |
| `source` | query | string | gyrodns (default) / cpanel |

### Yanıtlar

- **200**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns rrset list 12345
```
```hcl
# kaynak gyro_dns_record: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_record
resource "gyro_dns_record" "www" {
  service_id = gyro_dns_zone.example.service_id
  zone       = gyro_dns_zone.example.name
  name       = "www"
  type       = "A"
  ttl        = 300
  records    = [gyro_server.web.ipv4]
}

resource "gyro_dns_record" "mx" {
  service_id = gyro_dns_zone.example.service_id
  zone       = gyro_dns_zone.example.name
  name       = "@"
  type       = "MX"
  records    = ["10 mx1.example.com.", "20 mx2.example.com."]
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## PUT /cloud/dns/{id}/zones/{zone}/records

**Kayıt kümesi oluştur ya da değiştir** · operationId `typed_put_dns__id__zones__zone__records` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_put_dns__id__zones__zone__records.json

Bir kayıt kümesini (ad + tip) yazar. CNAME ve ALIAS tek değer alır; kökte CNAME olmaz (ALIAS kullanın); kök NS ve SOA bizde.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `name` (zorunlu) | string | Record name relative to the zone (@ = apex, * = wildcard) or FQDN with trailing dot |
| `type` (zorunlu) | string (A, AAAA, CNAME, MX, TXT, SRV, CAA, ALIAS, NS, PTR) |  |
| `ttl` | integer | 60-86400 s |
| `records` (zorunlu) | array<string> | Values in zone file syntax, one per item (TXT quotes optional) |
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "type": "A", "ttl": 1, "records": ["string"], "confirm": true}'
```
```bash
gyro dns rrset set 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_record: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_record
resource "gyro_dns_record" "www" {
  service_id = gyro_dns_zone.example.service_id
  zone       = gyro_dns_zone.example.name
  name       = "www"
  type       = "A"
  ttl        = 300
  records    = [gyro_server.web.ipv4]
}

resource "gyro_dns_record" "mx" {
  service_id = gyro_dns_zone.example.service_id
  zone       = gyro_dns_zone.example.name
  name       = "@"
  type       = "MX"
  records    = ["10 mx1.example.com.", "20 mx2.example.com."]
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records", headers=h, json={"name": "string", "type": "A", "ttl": 1, "records": ["string"], "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "type": "A", "ttl": 1, "records": ["string"], "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/{id}/zones/{zone}/records

**Kayıt kümesini sil** · operationId `typed_delete_dns__id__zones__zone__records` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_delete_dns__id__zones__zone__records.json

`name` ve `type` (sorgu) ile verilen kayıt kümesini siler. `"confirm": true` gerekir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |
| `name` | query | string | Record name |
| `type` | query | string | Record type |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
```
```bash
gyro dns rrset delete 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_record: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_record
resource "gyro_dns_record" "www" {
  service_id = gyro_dns_zone.example.service_id
  zone       = gyro_dns_zone.example.name
  name       = "www"
  type       = "A"
  ttl        = 300
  records    = [gyro_server.web.ipv4]
}

resource "gyro_dns_record" "mx" {
  service_id = gyro_dns_zone.example.service_id
  zone       = gyro_dns_zone.example.name
  name       = "@"
  type       = "MX"
  records    = ["10 mx1.example.com.", "20 mx2.example.com."]
}
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/records", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/zones/{zone}/dnssec

**DNSSEC durumu ve DS kayıtları** · operationId `typed_get_dns__id__zones__zone__dnssec` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_get_dns__id__zones__zone__dnssec.json

`dnssec` ve `ds` (kayıt firmasına girilecek).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### Yanıtlar

- **200**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns dnssec status 12345
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/zones/{zone}/dnssec

**DNSSEC aç** · operationId `typed_post_dns__id__zones__zone__dnssec` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_post_dns__id__zones__zone__dnssec.json

Zone'u imzalar (ECDSA P-256), DS kayıtlarını döner. DS kayıt firmasına girilene kadar etkisizdir. ALIAS ile kullanılamaz.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
```
```bash
gyro dns dnssec enable 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/{id}/zones/{zone}/dnssec

**DNSSEC kapat** · operationId `typed_delete_dns__id__zones__zone__dnssec` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_delete_dns__id__zones__zone__dnssec.json

Önce kayıt firmasındaki DS'yi silip TTL kadar bekleyin, yoksa doğrulayan çözümleyiciler hata verir. `"confirm": true` gerekir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `zone` (zorunlu) | path | string | Zone name |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
```
```bash
gyro dns dnssec disable 12345 --help    # tüm seçenekler
```
```hcl
# kaynak gyro_dns_zone: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/dns_zone
resource "gyro_dns_zone" "example" {
  service_id = 789 # Gyro DNS service
  name       = "example.com"
  dnssec     = true
}

# Point the domain to the name servers (or create the TXT record) to activate the zone
output "nameservers" { value = gyro_dns_zone.example.nameservers }
output "verify_txt" { value = "${gyro_dns_zone.example.verification_txt_name} = ${gyro_dns_zone.example.verification_txt_value}" }
output "ds" { value = gyro_dns_zone.example.ds_records }
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/zones/1/dnssec", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## GET /cloud/dns/{id}/health-checks

**Sağlık kontrollü kayıtları listele** · operationId `typed_get_dns__id__health_checks` · scope `services_read` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_get_dns__id__health_checks.json

Ana/yedek IP, etkin olan ve son durum (3 lokasyon çoğunluğu).


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |

### Yanıtlar

- **200**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks' \
  -H "Authorization: Bearer $GYRO_TOKEN"
```
```bash
gyro dns health list 12345
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## POST /cloud/dns/{id}/health-checks

**Sağlık kontrollü kayıt oluştur** · operationId `typed_post_dns__id__health_checks` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_post_dns__id__health_checks.json

`name` kaydını `primary`'ye yönlendirir; kontrol çoğunluk lokasyondan düşerse `backup`'a geçer, 3 başarılı turdan sonra geri döner. Bir sağlık kontrolü ek hizmet birimi kullanır.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `zone` (zorunlu) | string |  |
| `name` (zorunlu) | string |  |
| `type` (zorunlu) | string (A, AAAA) |  |
| `primary` (zorunlu) | string |  |
| `backup` (zorunlu) | string |  |
| `check` (zorunlu) | string (http, https, tcp, ping) |  |
| `port` | integer |  |
| `path` | string |  |
| `ttl` | integer | 30-300 s |
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"zone": "string", "name": "string", "type": "A", "primary": "string", "backup": "string", "check": "http", "port": 1, "path": "string", "ttl": 1, "confirm": true}'
```
```bash
gyro dns health create 12345 --help    # tüm seçenekler
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks", headers=h, json={"zone": "string", "name": "string", "type": "A", "primary": "string", "backup": "string", "check": "http", "port": 1, "path": "string", "ttl": 1, "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"zone": "string", "name": "string", "type": "A", "primary": "string", "backup": "string", "check": "http", "port": 1, "path": "string", "ttl": 1, "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```


## DELETE /cloud/dns/{id}/health-checks/{hid}

**Sağlık kontrolünü sil** · operationId `typed_delete_dns__id__health_checks__hid` · scope `services_write` · OpenAPI fragment: https://www.gyrohosting.com/developers/spec/ops/typed_delete_dns__id__health_checks__hid.json

Kontrol durur; kayıt mevcut değerinde kalır. `"confirm": true` gerekir.


### Parametreler

| Alan | in | Tür | Açıklama |
|---|---|---|---|
| `id` (zorunlu) | path | integer | Service id |
| `hid` (zorunlu) | path | string | Health check id |

### İstek gövdesi

| Alan | Tür | Açıklama |
|---|---|---|
| `confirm` | boolean |  |

### Yanıtlar

- **202**: Tool data / result
- **404**: Not found — also returned for objects owned by someone else
- **409**: State conflict (`server_locked`, `not_actionable`, `ssh_key_exists`, `server_limit`, `idempotency_in_flight`)
- **422**: Validation or business rule failure (`confirm_required`, `invalid_image`, `tool_action_failed` ...)

### Örnekler

```bash
curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
```
```bash
gyro dns health delete 12345 --help    # tüm seçenekler
```
```python
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
```
```js
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/12345/health-checks/1", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
```
