Authoritative DNS on ns1.gyrodns.net (Istanbul) + ns2.gyrodns.net (Germany): zones, records (A/AAAA/CNAME/MX/TXT/SRV/CAA/ALIAS/NS/PTR), BIND import/export, one-click DNSSEC, health-checked failover records.
Asks both authoritative name servers (ns1/ns2.gyrodns.net) directly. ready is true when both publish value. Poll every few seconds after adding (usually < 1 minute).
Parameters
Field
in
Type
Description
namerequired
query
string
_acme-challenge.<domain>
value
query
string
Challenge value (key authorization digest)
Responses
200
Status — data: AcmeChallenge
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 ...)
Adds value to the TXT record set at name (TTL 60); other values stay, so the apex and the wildcard of one certificate can be validated together (max 10 values per name). The service and the zone are found from the name (longest Gyro DNS zone of yours that covers it; hosting/cPanel zones are not supported). Idempotent.
Asks both authoritative name servers (ns1/ns2.gyrodns.net) directly. ready is true when both publish value. Poll every few seconds after adding (usually < 1 minute).
Parameters
Field
in
Type
Description
idrequired
path
integer
Gyro DNS service id
namerequired
query
string
_acme-challenge.<domain>
value
query
string
Challenge value (key authorization digest)
Responses
200
Status — data: AcmeChallenge
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 ...)
Adds value to the TXT record set at name (TTL 60); other values stay, so the apex and the wildcard of one certificate can be validated together (max 10 values per name). The service and the zone are found from the name (longest Gyro DNS zone of yours that covers it; hosting/cPanel zones are not supported). Idempotent.
# resource 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 }
}
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"])
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}`);
A key for certificate automation that can only add/remove _acme-challenge TXT records (scope dns_acme), optionally only in zones and only from ips. It cannot read zones, change other records or reach any other endpoint. The token is returned once. Max 10 per service.
Parameters
Field
in
Type
Description
idrequired
path
integer
Gyro DNS service id
Request body
Field
Type
Description
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)
Responses
201
Created (token shown once) — data: AcmeKey
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 ...)
# resource 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 }
}
# resource 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 }
}
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"])
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}`);
Zones of this DNS service (items, state active|pending with the TXT verification token), read-only zones copied from your cPanel hosting (cpanel), plan limits and our name servers.
Parameters
Field
in
Type
Description
idrequired
path
integer
Service id
Responses
200
Tool data / result — data: object
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 ...)
# resource 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 }
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"])
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}`);
Claims a domain. It is published on ns1/ns2.gyrodns.net after ownership is verified: delegation to our name servers (immediate when already delegated) or the TXT record _gyrodns-dogrulama.<zone> = txt_value at your current DNS. Optional bind (zone file) is imported on activation (SOA and apex NS are ignored).
Parameters
Field
in
Type
Description
idrequired
path
integer
Service id
Request body
Field
Type
Description
namerequired
string
Zone name (IDN allowed)
bind
string
Optional BIND zone file (max 2 MB)
confirm
boolean
Responses
202
Tool data / result — data: object
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 ...)
# resource 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 }
# resource 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 }
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"])
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}`);
# resource 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 }
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"])
# resource 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 }
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"])
Import a BIND zone fileScope: services_writetyped_post_dns__id__zones__zone__importOpenAPI for this operation
merge replaces record sets present in the file and keeps the others; replace also deletes record sets not in the file. SOA and apex NS are ignored; unsupported types are listed in skipped. Needs "confirm": true.
Parameters
Field
in
Type
Description
idrequired
path
integer
Service id
zonerequired
path
string
Zone name
Request body
Field
Type
Description
bindrequired
string
mode
string (merge, replace)
confirm
boolean
Responses
202
Tool data / result — data: object
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 ...)
# resource 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 }
# resource 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 }
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"])
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}`);
# resource 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 }
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"])
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}`);
# resource 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 }
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"])
# resource 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 }
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"])
Create a health-checked recordScope: services_writetyped_post_dns__id__health_checksOpenAPI for this operation
Points name (A/AAAA) to primary; when the check fails from the majority of locations the record switches to backup, and back after 3 good passes. Uses one health-check add-on unit.
Parameters
Field
in
Type
Description
idrequired
path
integer
Service id
Request body
Field
Type
Description
zonerequired
string
namerequired
string
typerequired
string (A, AAAA)
primaryrequired
string
backuprequired
string
checkrequired
string (http, https, tcp, ping)
port
integer
path
string
ttl
integer
30-300 s
confirm
boolean
Responses
202
Tool data / result — data: object
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 ...)