Türkçe

Gyro Public API v2.5.0

Manage Gyro cloud servers, SSH keys and billing programmatically.

The Gyro Public API lets you automate everything you do in the Gyro client area: order and manage cloud servers, keep SSH keys, read invoices and your account balance. It is the API behind the official Terraform provider (gyro-hosting/gyro) and gyroctl.

  • Base URL https://www.gyrohosting.com/api/v1/client
  • Authentication Authorization: Bearer wck_... (create keys in Client area → account menu (top right) → API Credentials)
  • Format JSON in, JSON out. Successful answers are {"data": ..., "meta": ...}; errors are {"error": {"code", "message", "details"}}.

v2: every product line through the generic service bridge (/cloud/services), webhooks, sub-account keys, reseller (bayi) end-customers, and the complete core client API (domains, DNS, tickets, orders, invoices, account) under the same key.

Download the OpenAPI 3.1 description · JSON

Getting started

1. In the client area open the account menu (top right) → API Credentials and create a key. Tick the scopes you need (start with cloud_read) and, if you call from fixed machines, add their IP addresses. The key (wck_…) is shown once — store it in a secret manager.

2. Call the API with the key as a bearer token:

curl -s https://www.gyrohosting.com/api/v1/client/cloud/servers \
  -H "Authorization: Bearer $GYRO_TOKEN"

3. Prefer infrastructure as code? Use the Terraform provider (see Terraform).

Authentication and scopes

Every request carries Authorization: Bearer wck_… (or X-Api-Key). Keys belong to your account and can only see your own objects; anything else answers 404, exactly like an id that does not exist.

ScopeAllows
Module:Addons/GyroAPI/cloud_readAll GET endpoints under /cloud
…/cloud_writePower, rebuild, snapshots, rDNS, rename, SSH keys
…/cloud_orderSpends money: create servers (paid from balance)
…/cloud_deleteCancel / delete servers
Invoices/GetInvoices, Invoices/GetInvoice, Balance/GetBalanceBilling reads

Give CI pipelines the smallest set they need and an IP allow list. Revoke a key in the client area at any time.

Responses and errors

Success: {"data": …, "meta": {…}}. Error: {"error": {"code": "server_not_found", "message": "…", "details": {…}}}. Branch on code, not on the message (messages follow your account language).

HTTPTypical codes
400idempotency_key_required, bad_request
401missing_token, invalid_token, key_revoked
402insufficient_balance
403insufficient_scope, ip_not_allowed, orders_disabled
404server_not_found, ssh_key_not_found, snapshot_not_found, endpoint_not_found
409server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight
422confirm_required, invalid_image, invalid_hostname, product_not_orderable, tool_action_failed
429rate_limited (see Retry-After)

Money safety: dry run, confirm, idempotency

Creating a server places an order and pays it from your account balance — never from a stored card.

  1. Ask for a quote: "dry_run": true. Nothing is created.
  2. Order with "confirm": true and an Idempotency-Key header (a UUID per logical order).
  3. Network error? Retry with the same key and body: you get the first answer back (Idempotency-Replayed: true), never a second server.

Destructive actions (rebuild, reset, snapshot restore, delete) also need confirm. One-time root passwords are only returned on requests without an Idempotency-Key, because replayable answers are stored.

Asynchronous work and polling

Provisioning, power and image operations run in the background. Poll GET /cloud/servers/{id}: the server is ready when status is active and live.power_state is running; while live.locked is true, writes return 409 server_locked. Live state is cached for 15 seconds — poll every 5–10 seconds, not faster.

Pagination and rate limits

Lists take page and limit (max 100) and return meta.total and meta.next_page (0 = last page). Each key may make 60 requests per minute by default; every answer carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Hammering far past the limit locks the key temporarily. Heavy server actions are also limited per server per day.

Every product through one bridge

All product lines — cloud and VDS servers, dedicated servers, corporate mail, monitors, storage, licenses — are reachable through /cloud/services. Anything you can click on a service in the client area is a tool (or a module method) and works here too:

# what can I do with service 123?
curl -s https://www.gyrohosting.com/api/v1/client/cloud/services/123/tools -H "Authorization: Bearer $GYRO_TOKEN"
# list mailboxes, then create one
curl -s .../cloud/services/123/tools/mailboxes -H "Authorization: Bearer $GYRO_TOKEN"
curl -s -X POST .../cloud/services/123/tools/mailboxes/create -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" -d '{"email":"[email protected]","password":"S3cure-pass!","quota":2048}'

The discovery answer flags every action with read, confirm (send "confirm": true) and secret (one-time values, withheld when you send an Idempotency-Key). Domains, DNS, tickets, orders and invoices use the core endpoints listed below with the same key.

Resellers (bayi)

Reseller accounts get /cloud/reseller/*: create end-customers (with your own external_ref), order servers for them from your balance at your discount (end_customer_id), assign existing services, mint end-customer keys that only see that customer's services and cannot reach billing, read a usage report per customer, and switch on white label (no operator brand in names, messages or webhook headers).

curl -s -X POST .../cloud/reseller/customers -H "Authorization: Bearer $RESELLER_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"Acme Ltd","external_ref":"acme-001","allow_order":true}'
curl -s -X POST .../cloud/reseller/customers/7/keys -H "Authorization: Bearer $RESELLER_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"acme-ci","scopes":["cloud_read","cloud_write","services_read","services_write"],"rate_limit":60}'

Webhooks

Create a webhook with POST /cloud/webhooks; the 64-hex secret is shown once. Verify every delivery:

import hmac, hashlib, time
def valid(secret, ts, body, signature):
    if abs(time.time() - int(ts)) > 300: return False
    mac = hmac.new(secret.encode(), (ts + "." + body).encode(), hashlib.sha256).hexdigest()
    return hmac.compare_digest("sha256=" + mac, signature)

Headers: X-Gyro-Event, X-Gyro-Delivery, X-Gyro-Timestamp, X-Gyro-Signature. Answer 2xx within 4 seconds.

Terraform

terraform {
  required_providers {
    gyro = { source = "gyro-hosting/gyro", version = "~> 0.3" }
  }
}
provider "gyro" {}            # reads GYRO_TOKEN

resource "gyro_ssh_key" "me" {
  name       = "laptop"
  public_key = file("~/.ssh/id_ed25519.pub")
}

resource "gyro_server" "web" {
  plan          = "standart-2-4"   # list plans with 'gyro plan list' or data.gyro_products
  region        = "eu-de-1"        # list regions with data.gyro_locations
  image         = "debian-12"
  hostname      = "web-1.example.com"
  ssh_key_ids   = [tonumber(gyro_ssh_key.me.id)]
  confirm_order = true             # creating a server spends account balance
}

Provider 0.3 or later. server_type/location from older versions still work but are deprecated; upgrading does not replace existing servers.

Data sources: gyro_products, gyro_locations, gyro_images. terraform destroy cancels the server at once: billing stops and the machine is wiped (set delete_immediately = false to file a cancellation request instead).

Servers

Cloud servers you own. Creating one places an order paid from your account balance.

GET/cloud/servers

List cloud serversScope: cloud_read

Parameters

FieldinTypeDescription
statusquerystring (active, waiting, inprocess, suspended, cancelled)
pagequeryinteger
limitqueryinteger

Responses

200Servers (without live state) — data: array<Server>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers", {
  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/servers

Create (order) a cloud serverScope: cloud_order

Places an order and pays it from your account balance (never from a stored card). Safety rules:

  • send "dry_run": true first to get a price quote; nothing is created;
  • a real order needs "confirm": true and an Idempotency-Key header — retrying with the same key and body returns the first answer (Idempotency-Replayed: true) instead of a second order;
  • the operator may cap the number of servers per account (409 server_limit).

Provisioning is asynchronous (typically under a minute): poll GET /cloud/servers/{id} until status is active and live.power_state is running.

Parameters

FieldinTypeDescription
Idempotency-Key requiredheaderstringUnique per logical request (e.g. a UUID). Replays within 24 hours return the stored answer.

Request body

FieldTypeDescription
product_idintegerFrom GET /cloud/products (or give plan + region)
planstringPlan name from GET /cloud/products
regionstringRegion from GET /cloud/locations
server_typestringDeprecated alias of plan
locationstringDeprecated alias of region
cyclestring (monthly, quarterly, semiannually, annually)
imagestring
ssh_keysarray<integer>Ids from /cloud/ssh-keys (one key at creation in v1)
hostnamestring
user_datastringcloud-init user data
dry_runboolean
confirmbooleanMust be true to place a paid order
end_customer_idintegerReseller main key: assign the new server to this end-customer

Responses

200Dry-run quote (nothing created) — data: object
202Order placed and paid; the server is being provisioned — data: CreateServerResult
400Malformed request (e.g. missing Idempotency-Key)
401Missing, invalid or revoked key
402Account balance does not cover the order (insufficient_balance)
403Key lacks the scope, IP not allowed, or feature disabled
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"product_id": 723, "cycle": "monthly", "image": "debian-12", "ssh_keys": [12], "hostname": "web-1.example.com", "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/servers", headers=h, json={"product_id": 723, "cycle": "monthly", "image": "debian-12", "ssh_keys": [12], "hostname": "web-1.example.com", "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"product_id": 723, "cycle": "monthly", "image": "debian-12", "ssh_keys": [12], "hostname": "web-1.example.com", "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/cloud/servers/{id}

Get a server with its live stateScope: cloud_read

live is read from the platform (cached for 15 seconds) and is null while the server is not active.

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200Server — data: ServerDetail
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466", {
  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}`);

PATCH/cloud/servers/{id}

Rename a server or switch auto-renewScope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Request body

FieldTypeDescription
hostnamestringFully qualified host name (max 63 characters)
auto_renewboolean

Responses

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

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hostname": "web-1.example.com", "auto_renew": true}'
import os, uuid, requests

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

DELETE/cloud/servers/{id}

Delete (cancel) a serverScope: cloud_delete

Requires confirm=true (query or body). Two modes:

  • default: files a cancellation request (status: cancellation_requested). The server keeps running and billing continues until the request is processed by the panel's automation (daily, business hours);
  • immediate=true: cancels now (status: cancelling, becomes cancelled within about a minute) - billing stops, the server is powered off at once and destroyed with its data after the grace period (3 days). Same effect as an approved "cancel now" request in the panel. The operator can disable this.

Calling it again is safe.

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)
confirm requiredqueryboolean
immediatequerybooleantrue = cancel now instead of filing a request

Responses

202Cancellation requested (default) or cancelled (immediate) — data: object
404Not found — also returned for objects owned by someone else
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466", {
  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}`);

Server actions

Power, rebuild, password and rescue operations. Asynchronous; poll the server until live.locked is false.

POST/cloud/servers/{id}/actions/{action}

Run a server actionScope: cloud_write

Heavy actions (rebuild, reset, rescue, snapshot restore, password reset) are limited per server per day. A one-time root_password is returned only when the request has no Idempotency-Key (idempotent answers are stored for replay, secrets never are; you then get root_password_withheld: true).

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)
action requiredpathstring (poweron, shutdown, reboot, poweroff, reset, rebuild, reset_password, enable_rescue, disable_rescue)shutdown = graceful (ACPI), poweroff = hard power cut, reset = hard reset (needs confirm), rebuild = reinstall from image (needs confirm, wipes the disk), reset_password / enable_rescue return a one-time root_password.

Request body

FieldTypeDescription
imagestringrebuild only: image slug from /cloud/images
confirmbooleanrequired for reset and rebuild

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/actions/reboot' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"image": "ubuntu-24.04", "confirm": true}'
import os, uuid, requests

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

POST/cloud/servers/{id}/console

Open a one-time VNC console ticketScope: cloud_write

Returns a websocket URL and password valid for about a minute. Never send an Idempotency-Key here (400).

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

201Ticket — data: object
400Malformed request (e.g. missing Idempotency-Key)
404Not found — also returned for objects owned by someone else
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/console' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/console", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/console", {
  method: "POST",
  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/bulk

Run one action on up to 50 serversScope: cloud_write

Request body

FieldTypeDescription
action requiredstring (poweron, shutdown, reboot, poweroff, reset, rebuild, disable_rescue)
server_ids requiredarray<integer>
imagestring
confirmboolean

Responses

207Per-target results — data: BulkResult
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/bulk' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action": "poweron", "server_ids": [1], "image": "string", "confirm": true}'
import os, uuid, requests

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

Snapshots and backups

Point-in-time images of a server disk. Snapshot space is an add-on quota in GB.

GET/cloud/servers/{id}/snapshots

List snapshots and the snapshot quotaScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200Snapshots — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots", {
  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/servers/{id}/snapshots

Take a snapshotScope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

202Snapshot is being created (poll the list until status is available) — data: object
404Not found — also returned for objects owned by someone else
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots", {
  method: "POST",
  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/servers/{id}/snapshots/{sid}/restore

Restore a snapshot onto the server (overwrites the disk)Scope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)
sid requiredpathinteger

Request body

FieldTypeDescription
confirm requiredboolean = true

Responses

202Accepted
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots/123/restore' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots/123/restore", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots/123/restore", {
  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/servers/{id}/snapshots/{sid}

Delete a snapshotScope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)
sid requiredpathinteger

Responses

202Accepted
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots/123' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots/123", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/snapshots/123", {
  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/servers/{id}/backups

List automatic backupsScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200Backups (enabled=false when the backup add-on is not active) — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/backups' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/backups", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/backups", {
  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/servers/{id}/backups

Take a manual backup (backup add-on required)Scope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

202Accepted
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/backups' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

Networking

Reverse DNS and the inbound firewall of a server.

GET/cloud/servers/{id}/rdns

List reverse DNS entriesScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200PTR records of the server's addresses — data: array<RdnsEntry>
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/rdns' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/rdns", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/rdns", {
  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/servers/{id}/rdns

Set (or reset) the PTR record of one addressScope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Request body

FieldTypeDescription
ip requiredstringAn address of this server (IPv6 addresses inside the server's /64 are allowed)
hostnamestringFQDN; empty string resets to the default

Responses

200Updated list — data: array<RdnsEntry>
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/rdns' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip": "string", "hostname": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/rdns", headers=h, json={"ip": "string", "hostname": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/rdns", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"ip": "string", "hostname": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/cloud/servers/{id}/firewall

Inbound firewall rulesScope: cloud_read

Read-only in v1. An empty list means no Gyro firewall is applied (all inbound traffic reaches the server).

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200Rules — data: array<FirewallRule>
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall", {
  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/servers/{id}/firewall/rules

Add an inbound firewall ruleScope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Request body

FieldTypeDescription
protocol requiredstring (tcp, udp, icmp)
portstringN or N-M (empty = all ports)
source_ipsarray<string>CIDRs (default any)

Responses

201All rules after the change — data: array<FirewallRule>
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall/rules' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"protocol": "tcp", "port": "22", "source_ips": ["203.0.113.0/24"]}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall/rules", headers=h, json={"protocol": "tcp", "port": "22", "source_ips": ["203.0.113.0/24"]}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall/rules", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"protocol": "tcp", "port": "22", "source_ips": ["203.0.113.0/24"]}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/cloud/servers/{id}/firewall/rules/{n}

Remove a firewall rule (the last one needs confirm)Scope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)
n requiredpathinteger1-based position from GET /firewall
confirmqueryboolean

Responses

200Remaining rules — data: array<FirewallRule>
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall/rules/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/firewall/rules/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/servers/47466/firewall/rules/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}`);

Monitoring

CPU, disk and network metrics and the provider-side action history.

GET/cloud/servers/{id}/metrics

CPU, disk and network time seriesScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)
periodquerystring (24h, 7d, 30d)

Responses

200Metrics; each line is a list of [unix_time, value] — data: Metrics
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/metrics' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/metrics", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/metrics", {
  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/servers/{id}/activity

Recent platform actions on the serverScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200Actions (newest first, max 50) — data: array<object>
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/activity' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/activity", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/activity", {
  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}`);

SSH keys

Account-level public keys you can install on new servers.

GET/cloud/ssh-keys

List SSH keysScope: cloud_read

Parameters

FieldinTypeDescription
pagequeryinteger
limitqueryinteger

Responses

200SSH keys — data: array<SshKey>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/ssh-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/ssh-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/ssh-keys

Add an SSH keyScope: cloud_write

Accepts ssh-ed25519, ecdsa-sha2-nistp256/384/521, sk-ssh-ed25519 and ssh-rsa (2048 bit or more). At most 50 keys per account; fingerprints are unique per account.

Request body

FieldTypeDescription
name requiredstring
public_key requiredstring

Responses

201Created — data: SshKey
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "laptop", "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFaA... me@laptop"}'
import os, uuid, requests

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

GET/cloud/ssh-keys/{id}

Get an SSH keyScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200SSH key — data: SshKey
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys/47466", {
  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/ssh-keys/{id}

Delete an SSH keyScope: cloud_write

Removes the key from your account. Servers that already have it keep it.

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Deleted — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/ssh-keys/47466", {
  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}`);

Catalog

Orderable products, locations and operating system images.

GET/cloud/products

List orderable cloud server productsScope: cloud_read

Prices are in the product currency, VAT excluded. available=false means temporarily out of stock.

Parameters

FieldinTypeDescription
regionquerystringFilter by region (see GET /cloud/locations). A city name (falkenstein) also works.
planquerystringFilter by plan name
locationquerystringDeprecated alias of region (legacy location code)
server_typequerystringDeprecated alias of plan (legacy type code)
pagequeryinteger
limitqueryinteger

Responses

200Products — data: array<Product>
401Missing, invalid or revoked key
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/products' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/products", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/products", {
  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/locations

List locations with orderable productsScope: cloud_read

Responses

200Locations — data: array<Location>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/locations' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/locations", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/locations", {
  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/images

List operating system imagesScope: cloud_read

Responses

200Images — data: array<Image>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/images' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/images", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/images", {
  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/products

List productsScope: Products/GetProducts

List products.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satistaki-urunler).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.
typequerystringTek bir ürün türü. Bilinmeyen tür reddedilir ve geçerli liste yanıtın ayrıntısında gelir.
categoryqueryintegerKategori numarası. Ana kategoriyle de ek atamalarla da eşleşir.
searchquerystringÜrün başlığında arar.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422type_invalid

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/products' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/products", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/products", {
  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/products/categories

List product categoriesScope: Products/GetProductCategories

List product categories.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satistaki-urunler).

Parameters

FieldinTypeDescription
typequerystringYalnız bu türün kategorileri. Bilinmeyen değer boş liste verir, hata değil.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/products/categories' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/products/categories", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/products/categories", {
  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/products/{id}

Get product (path: {id})Scope: Products/GetProduct

Get product (path: {id}).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satistaki-urunler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/products/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/products/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/products/47466", {
  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}`);

Billing

Invoices and account balance (read-only with the recommended scopes).

GET/invoices

List invoicesScope: Invoices/GetInvoices

Parameters

FieldinTypeDescription
statusquerystringunpaid, paid, cancelled, refund
pagequeryinteger
limitqueryinteger

Responses

200Invoices — data: array<Invoice>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/invoices' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/invoices", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/invoices", {
  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/invoices/{id}

Get an invoiceScope: Invoices/GetInvoice

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Invoice with lines — data: Invoice
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/invoices/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/invoices/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/invoices/47466", {
  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/balance

Account balanceScope: Balance/GetBalance

Responses

200Balance — data: object
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/balance' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/balance", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/balance", {
  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/balance/transactions

Balance ledgerScope: Balance/GetBalanceTransactions

Parameters

FieldinTypeDescription
pagequeryinteger
limitqueryinteger

Responses

200Ledger entries — data: array<object>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/balance/transactions' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/balance/transactions", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/balance/transactions", {
  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/invoices/{id}/pay

Pay an invoice from the account balanceScope: billing_pay

Balance only (never a card). Requires "confirm": true and an Idempotency-Key header.

Parameters

FieldinTypeDescription
id requiredpathinteger
Idempotency-Key requiredheaderstringUnique per logical request (e.g. a UUID). Replays within 24 hours return the stored answer.

Request body

FieldTypeDescription
confirm requiredboolean = true

Responses

200Paid — data: object
400Malformed request (e.g. missing Idempotency-Key)
402Account balance does not cover the order (insufficient_balance)
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/invoices/47466/pay' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"confirm": true}'
import os, uuid, requests

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

GET/cloud/invoices/{id}/pdf

Invoice PDF (base64 in JSON)Scope: billing_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200PDF — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/invoices/47466/pdf' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/invoices/47466/pdf", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/invoices/47466/pdf", {
  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/balance/top-up

Create a balance top-up invoice and get its payment linkScope: billing_pay

Request body

FieldTypeDescription
amount requirednumber

Responses

201Invoice + pay_url — data: object
403Key lacks the scope, IP not allowed, or feature disabled
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/balance/top-up' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount": 1.0}'
import os, uuid, requests

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

POST/invoices/{id}/pay

Pay invoice (path: {id})Scope: Invoices/PayInvoice

Pay invoice (path: {id}). Invoices of the calling account.

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/fatura-odeme-api).

Parameters

FieldinTypeDescription
id requiredpathinteger
Idempotency-Key requiredheaderstring

Request body

FieldTypeDescription
payment requiredobjectpaymentÖdeme kaynağı.
method requiredstringÖdeme yolu: hesap bakiyesi ya da kayıtlı kart.
card_idintegerÇekilecek kartın numarası. Verilmezse hesabın varsayılan kartı çekilir.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422balance_not_allowed, card_expired, card_not_chargeable, insufficient_balance, invoice_not_payable, no_stored_card, payment_method_invalid, subscription_collects

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/invoices/47466/pay' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"payment": {}, "method": "string", "card_id": 1}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/invoices/47466/pay", headers=h, json={"payment": {}, "method": "string", "card_id": 1}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/invoices/47466/pay", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"payment": {}, "method": "string", "card_id": 1}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

POST/invoices/{id}/coupon

Apply invoice coupon (path: {id})Scope: Invoices/ApplyInvoiceCoupon

Apply invoice coupon (path: {id}). Invoices of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/fatura-odeme-api).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
code requiredstringKupon kodu.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422coupon_code_required, coupon_invalid, coupon_not_invoice, coupon_rejected, coupon_scope, coupon_used, invoice_not_payable

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/invoices/47466/coupon' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code": "string"}'
import os, uuid, requests

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

PATCH/balance/settings

Update balance settingsScope: Balance/UpdateBalanceSettings

Update balance settings.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hesap-bakiyesi-api).

Request body

FieldTypeDescription
auto_pay_from_balancebooleanYenilemeler cüzdandan tahsil edilsin mi. Bu değiştiğinde açık yenileme faturaları yeni tercihe göre yeniden ele alınır.
backup_card_idintegerCüzdan yetmediğinde çekilecek kart. Sıfır göndermek kart zincirini tümüyle kaldırır.
alertobjectUyarı bloğu. Açık ve eşik alanlarını taşır; açarken pozitif bir eşik gerekir.
alert_recipientsstringUyarıyı alacak fatura adresi numaraları. Liste yerine geçer; hesabın sahibi burada yer almaz, her zaman alır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422alert_invalid, auto_pay_invalid, card_expired, nothing_to_update

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/balance/settings' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"auto_pay_from_balance": true, "backup_card_id": 1, "alert": {}, "alert_recipients": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/balance/settings", headers=h, json={"auto_pay_from_balance": True, "backup_card_id": 1, "alert": {}, "alert_recipients": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/balance/settings", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"auto_pay_from_balance": true, "backup_card_id": 1, "alert": {}, "alert_recipients": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

Account

Key introspection and the write log of your API keys.

GET/whoami

Describe the calling API keyScope: any

Responses

200Key details — data: object
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/whoami' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/whoami", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/whoami", {
  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/activity

List write calls made with your API keysScope: cloud_read

Every non-GET call to /cloud/... is recorded for 365 days (method, path, scope, HTTP status, IP, key id). Request and response bodies are never stored.

Parameters

FieldinTypeDescription
pagequeryinteger
limitqueryinteger

Responses

200Activity page — data: array<ActivityEntry>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/activity' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/activity", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/activity", {
  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/ping

PingScope: System/Ping

Ping.

Core WISECP client endpoint.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/ping' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/ping", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/ping", {
  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/me

Get meScope: Account/GetMe

Get me.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/anahtarin-hesabi).

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/me' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/me", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/me", {
  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}`);

PATCH/me

Update meScope: Account/UpdateMe

Update me.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/anahtarin-hesabi).

Request body

FieldTypeDescription
namestringAdı. Boşaltılamaz.
surnamestringSoyadı. Boşaltılamaz.
kindstringHesap türü. Bireysele geçmek şirket bilgilerini temizler.
companyobjectŞirket bilgileri. Hesabın kurumsal olmasını gerektirir.
birthdaystringDoğum tarihi.
identitystringKimlik numarası.
landline_phonestringSabit telefon.
languagestringDil kodu. Kurulumda bulunmalıdır.
countrystringÜlke kodu.
currencystringGörüntü para birimi kodu.
timezonestringSaat dilimi. Boş göndermek hesabın kendi seçimini siler.
date_formatstringTarih biçimi. Boş göndermek hesabın kendi seçimini siler.
custom_fieldsobjectEk alanların değerleri. Kutu tipli alanlar dizi alır.
avatarstringProfil görseli. Yalnız kodlanmış içerik kabul edilir; adres reddedilir.
emailstring
phonestring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422avatar_url_not_allowed, birthday_required, company_name_required, company_requires_corporate, custom_field_required, field_not_editable, field_too_long, kind_invalid, language_invalid, name_required, nothing_to_update

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/me' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "surname": "string", "kind": "string", "company": {}, "birthday": "string", "identity": "string", "landline_phone": "string", "language": "string", "country": "string", "currency": "string", "timezone": "string", "date_format": "string", "custom_fields": {}, "avatar": "string", "email": "string", "phone": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/me", headers=h, json={"name": "string", "surname": "string", "kind": "string", "company": {}, "birthday": "string", "identity": "string", "landline_phone": "string", "language": "string", "country": "string", "currency": "string", "timezone": "string", "date_format": "string", "custom_fields": {}, "avatar": "string", "email": "string", "phone": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/me", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "surname": "string", "kind": "string", "company": {}, "birthday": "string", "identity": "string", "landline_phone": "string", "language": "string", "country": "string", "currency": "string", "timezone": "string", "date_format": "string", "custom_fields": {}, "avatar": "string", "email": "string", "phone": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/me/security

Get securityScope: Account/GetSecurity

Get security.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/anahtarin-hesabi).

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/me/security' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/me/security", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/me/security", {
  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/me/notifications

Get notificationsScope: Account/GetNotifications

Get notifications.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/anahtarin-hesabi).

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/me/notifications' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/me/notifications", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/me/notifications", {
  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/me/notifications

Update notificationsScope: Account/UpdateNotifications

Update notifications.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/anahtarin-hesabi).

Request body

FieldTypeDescription
invoicesobjectFatura bildirimleri. E-posta ve kısa mesaj kanallarını taşır; eksik kanal kapalı sayılır.
supportobjectDestek bildirimleri.
productobjectÜrün ve hizmet bildirimleri.
domainobjectAlan adı bildirimleri.
marketingobjectPazarlama bildirimleri.
generalstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/me/notifications' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"invoices": {}, "support": {}, "product": {}, "domain": {}, "marketing": {}, "general": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/me/notifications", headers=h, json={"invoices": {}, "support": {}, "product": {}, "domain": {}, "marketing": {}, "general": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/me/notifications", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"invoices": {}, "support": {}, "product": {}, "domain": {}, "marketing": {}, "general": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/addresses

List addressesScope: Addresses/GetAddresses

List addresses.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/adres-defteri).

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/addresses' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/addresses", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/addresses", {
  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/addresses

Create addressScope: Addresses/CreateAddress

Create address.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/adres-defteri).

Request body

FieldTypeDescription
name requiredstringİlgili kişinin adı.
surname requiredstringSoyadı.
email requiredstringGeçerli bir e-posta.
country requiredstringÜlke kodu. Başvuru ucundan alınır.
state requiredstringİl. Listeden numara, liste boşsa serbest metin.
city requiredstringŞehir. Listeden numara, liste boşsa serbest metin.
address requiredstringAçık adres.
zipcode requiredstringPosta kodu. En çok yirmi karakter.
kindstringKişi türü. Öntanımlı olarak bireysel.
companyobjectŞirket bilgileri. Kurumsal kişide ad zorunludur.
labelstringSerbest etiket.
phonestringKişinin telefonu.
identitystringKimlik numarası.
notificationsobjectKanal matrisi. Tam değiştirmedir; hiç gönderilmezse hepsi açılır.
is_defaultbooleanBunu varsayılan profil yap.
overwrite_invoicesbooleanAçık faturaları bu adrese yeniden yaz.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422company_name_required, contact_rejected, field_too_long, name_required, notifications_invalid
500address_add_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/addresses' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "surname": "string", "email": "string", "country": "string", "state": "string", "city": "string", "address": "string", "zipcode": "string", "kind": "string", "company": {}, "label": "string", "phone": "string", "identity": "string", "notifications": {}, "is_default": true, "overwrite_invoices": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/addresses", headers=h, json={"name": "string", "surname": "string", "email": "string", "country": "string", "state": "string", "city": "string", "address": "string", "zipcode": "string", "kind": "string", "company": {}, "label": "string", "phone": "string", "identity": "string", "notifications": {}, "is_default": True, "overwrite_invoices": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/addresses", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "surname": "string", "email": "string", "country": "string", "state": "string", "city": "string", "address": "string", "zipcode": "string", "kind": "string", "company": {}, "label": "string", "phone": "string", "identity": "string", "notifications": {}, "is_default": true, "overwrite_invoices": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/addresses/{id}

Get address (path: {id})Scope: Addresses/GetAddress

Get address (path: {id}).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/adres-defteri).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/addresses/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/addresses/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/addresses/47466", {
  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/addresses/{id}

Update address (path: {id})Scope: Addresses/UpdateAddress

Update address (path: {id}).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/adres-defteri).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
name requiredstringİlgili kişinin adı.
surname requiredstringSoyadı.
email requiredstringGeçerli bir e-posta.
country requiredstringÜlke kodu. Başvuru ucundan alınır.
state requiredstringİl. Listeden numara, liste boşsa serbest metin.
city requiredstringŞehir. Listeden numara, liste boşsa serbest metin.
address requiredstringAçık adres.
zipcode requiredstringPosta kodu. En çok yirmi karakter.
kindstringKişi türü. Öntanımlı olarak bireysel.
companyobjectŞirket bilgileri. Kurumsal kişide ad zorunludur.
labelstringSerbest etiket.
phonestringKişinin telefonu.
identitystringKimlik numarası.
notificationsobjectKanal matrisi. Tam değiştirmedir; hiç gönderilmezse hepsi açılır.
is_defaultbooleanBunu varsayılan profil yap.
overwrite_invoicesbooleanAçık faturaları bu adrese yeniden yaz.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422company_name_required, contact_rejected, field_too_long, name_required

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/addresses/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "surname": "string", "email": "string", "country": "string", "state": "string", "city": "string", "address": "string", "zipcode": "string", "kind": "string", "company": {}, "label": "string", "phone": "string", "identity": "string", "notifications": {}, "is_default": true, "overwrite_invoices": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/addresses/47466", headers=h, json={"name": "string", "surname": "string", "email": "string", "country": "string", "state": "string", "city": "string", "address": "string", "zipcode": "string", "kind": "string", "company": {}, "label": "string", "phone": "string", "identity": "string", "notifications": {}, "is_default": True, "overwrite_invoices": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/addresses/47466", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "surname": "string", "email": "string", "country": "string", "state": "string", "city": "string", "address": "string", "zipcode": "string", "kind": "string", "company": {}, "label": "string", "phone": "string", "identity": "string", "notifications": {}, "is_default": true, "overwrite_invoices": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/addresses/{id}

Delete address (path: {id})Scope: Addresses/DeleteAddress

Delete address (path: {id}).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/adres-defteri).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/addresses/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/addresses/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/addresses/47466", {
  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}`);

POST/addresses/{id}/default

Set default address (path: {id})Scope: Addresses/SetDefaultAddress

Set default address (path: {id}).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/adres-defteri).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/addresses/47466/default' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

Services (all products)

Generic bridge to every product line (cloud server, VDS, dedicated, mail, monitor, storage, license, ...). Everything a customer can do on a service in the client area is a module tool or method and is reachable here. Start with GET /cloud/services/{id}/tools: it lists the tools, their actions and our safety policy (read, confirm, secret) for that very service.

GET/cloud/services

List services of every product lineScope: services_read

Parameters

FieldinTypeDescription
product_linequerystring (cloud_server, vds, dedicated_server, mail, monitor, storage, license, app)
statusquerystring
customer_idqueryintegerReseller main key only
pagequeryinteger
limitqueryinteger

Responses

200Services — data: array<Service>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services", {
  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/services/{id}

Get a service (renewal, cancellation, access details)Scope: services_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Service — data: Service
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466", {
  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/services/{id}/tools

Discover tools, actions and safety policy of a serviceScope: services_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Tools — data: ServiceTools
404Not found — also returned for objects owned by someone else
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools", {
  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/services/{id}/tools/{tool}

Read a tool (list mailboxes, snapshots, DNS records, ...)Scope: services_read

Parameters

FieldinTypeDescription
id requiredpathinteger
tool requiredpathstring

Responses

200Tool data (module specific) — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools/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/services/47466/tools/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}`);

POST/cloud/services/{id}/tools/{tool}/{action}

Run a tool action (create a mailbox, restore a snapshot, ...)Scope: services_write

Body fields are the tool's own fields (see the tool data and the per-module table in the guide). Actions flagged confirm in the discovery answer need "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathinteger
tool requiredpathstring
action requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools/1/reboot' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "S3cure-pass!", "quota": 2048}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools/1/reboot", headers=h, json={"email": "[email protected]", "password": "S3cure-pass!", "quota": 2048}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/tools/1/reboot", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"email": "[email protected]", "password": "S3cure-pass!", "quota": 2048}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

POST/cloud/services/{id}/methods/{method}

Call a client-callable module method (e.g. license change_ip)Scope: services_write

Parameters

FieldinTypeDescription
id requiredpathinteger
method requiredpathstring

Request body

FieldTypeDescription

Responses

200Result — data: object
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/methods/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip": "203.0.113.10"}'
import os, uuid, requests

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

GET/cloud/services/{id}/label

Get the nickname and tags of a serviceScope: services_read

Customer-defined nickname and colour tags of one of your services (any product line). A service without a label answers "nickname": null and "tags": []. Labels are private to the service owner; after a transfer the old owner's label is not shown.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

200Label — data: ServiceLabel
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404Not found — also returned for objects owned by someone else
429Too many requests (rate_limited); see the Retry-After and X-RateLimit-* headers

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/label' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/label", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/label", {
  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/services/{id}/label

Set the nickname and/or tags of a serviceScope: services_write

Send nickname, tags or both; a field that is not sent stays unchanged. nickname "" or null clears it; tags replaces all tags and [] clears them. A tag is "name" or {"name", "color"}; an unknown or missing colour gets a stable default. Duplicate names (case-insensitive) are merged. Limit: 30 label writes per minute per key (429 rate_limited). Sub-account keys need the label:edit action. Errors: 422 nothing_to_update, invalid_nickname, invalid_tags; 404 service_not_found (also for services of other accounts) or feature_unavailable.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
nicknamestring | null"" or null clears the nickname. No control characters.
tagsarray | nullReplaces all tags; [] or null clears them. Item: a tag name, or {"name", "color"} (CLI: use --data for colours).

Responses

200Saved label — data: ServiceLabel
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)
429Too many requests (rate_limited); see the Retry-After and X-RateLimit-* headers

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/label' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"nickname": "Accounting server", "tags": [{"name": "production", "color": "green"}, "customer-A"]}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/label", headers=h, json={"nickname": "Accounting server", "tags": [{"name": "production", "color": "green"}, "customer-A"]}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/label", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"nickname": "Accounting server", "tags": [{"name": "production", "color": "green"}, "customer-A"]}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

Webhooks

Signed HTTPS callbacks for service, invoice, order and ticket events.

GET/cloud/webhooks

List webhooksScope: webhooks

Responses

200Webhooks — data: array<Webhook>

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/webhooks", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks", {
  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/webhooks

Create a webhook (secret returned once)Scope: webhooks

Deliveries are POST JSON with headers X-Gyro-Event, X-Gyro-Delivery, X-Gyro-Timestamp and X-Gyro-Signature: sha256=HMAC_SHA256(secret, timestamp + "." + body) (white-label resellers: X-Webhook-*). Reject requests whose timestamp is older than 5 minutes. Retries: exponential back-off, 8 attempts; 20 consecutive failures disable the webhook.

Request body

FieldTypeDescription
url requiredstring
eventsarray<WebhookEvent>empty = all
descriptionstring
customer_idintegerReseller main key only

Responses

201Created (includes secret) — data: object
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://hooks.example.com/gyro", "events": ["service.active", "invoice.paid"]}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/webhooks", headers=h, json={"url": "https://hooks.example.com/gyro", "events": ["service.active", "invoice.paid"]}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"url": "https://hooks.example.com/gyro", "events": ["service.active", "invoice.paid"]}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/cloud/webhooks/{id}

Get a webhookScope: webhooks

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Webhook — data: Webhook
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466", {
  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}`);

PATCH/cloud/webhooks/{id}

Update url, events, description or statusScope: webhooks

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
urlstring
eventsarray<WebhookEvent>
descriptionstring
statusstring (active, disabled)

Responses

200Webhook — data: Webhook
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "string", "events": ["service.created"], "description": "string", "status": "active"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466", headers=h, json={"url": "string", "events": ["service.created"], "description": "string", "status": "active"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"url": "string", "events": ["service.created"], "description": "string", "status": "active"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/cloud/webhooks/{id}

Delete a webhookScope: webhooks

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Deleted
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466", {
  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}`);

POST/cloud/webhooks/{id}/test

Send an api.test event nowScope: webhooks

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Result — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466/test' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466/test", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466/test", {
  method: "POST",
  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/webhooks/{id}/deliveries

Last 100 deliveriesScope: webhooks

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Deliveries — data: array<WebhookDelivery>
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466/deliveries' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466/deliveries", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/webhooks/47466/deliveries", {
  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}`);

API keys

Sub-account keys narrowed to services, actions or a reseller end-customer. Only GyroAPI /cloud routes accept them.

GET/cloud/keys

List sub-account keys (never shows tokens)Scope: keys

Responses

200Keys — data: array<ApiKey>
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/keys' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/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/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/keys

Create a sub-account key (token returned once)Scope: keys

Request body

FieldTypeDescription
name requiredstring
scopesarray<string (cloud_read, cloud_write, cloud_order, cloud_delete, services_read, services_write, webhooks)>
servicesarray<integer>Optional service allow list
actionsarray<string>Optional action allow list: server actions (reboot) or tool:action / tool:* / method:name
ipsarray<string>
rate_limitintegerRequests per minute (<= your own limit; 0 = default)

Responses

201Created — data: object
403Key lacks the scope, IP not allowed, or feature disabled
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/keys' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "ci-reboot-only", "scopes": ["cloud_read", "cloud_write"], "services": [47466], "actions": ["reboot", "poweron"], "ips": ["203.0.113.10"], "rate_limit": 30}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/keys", headers=h, json={"name": "ci-reboot-only", "scopes": ["cloud_read", "cloud_write"], "services": [47466], "actions": ["reboot", "poweron"], "ips": ["203.0.113.10"], "rate_limit": 30}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/keys", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "ci-reboot-only", "scopes": ["cloud_read", "cloud_write"], "services": [47466], "actions": ["reboot", "poweron"], "ips": ["203.0.113.10"], "rate_limit": 30}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/cloud/keys/{id}

Delete a sub-account keyScope: keys

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Deleted
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/keys/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/keys/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/keys/47466", {
  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}`);

Reseller

Reseller (bayi) accounts manage their own end-customers, assign services, mint end-customer keys and read usage reports. Services stay on the reseller account and use its discount.

GET/cloud/reseller/settings

Reseller settingsScope: reseller

Responses

200Settings — data: ResellerSettings
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/settings' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/settings", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/settings", {
  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/reseller/settings

Save reseller settings (white label)Scope: reseller

Request body

FieldTypeDescription
white_labelboolean

Responses

200Settings — data: ResellerSettings
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/settings' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"white_label": true}'
import os, uuid, requests

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

GET/cloud/reseller/report

Usage and billing report per end-customerScope: reseller

Parameters

FieldinTypeDescription
fromquerystring
toquerystring

Responses

200Report — data: ResellerReport
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/report' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/report", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/report", {
  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/reseller/assign

Assign a service to an end-customer (customer_id 0 = unassign)Scope: reseller

Request body

FieldTypeDescription
service_id requiredinteger
customer_id requiredinteger

Responses

200Assignment — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/assign' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"service_id": 1, "customer_id": 1}'
import os, uuid, requests

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

GET/cloud/reseller/customers

List end-customersScope: reseller

Parameters

FieldinTypeDescription
external_refquerystring
pagequeryinteger
limitqueryinteger

Responses

200Customers — data: array<EndCustomer>
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers", {
  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/reseller/customers

Create an end-customerScope: reseller

Request body

FieldTypeDescription
namestring
emailstring
external_refstringYour own customer id (unique per reseller)
notestring
statusstring (active, suspended)
allow_orderbooleanMay this customer's keys order servers (paid from YOUR balance)?

Responses

201Created — data: EndCustomer
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Acme Ltd", "external_ref": "acme-001", "allow_order": false}'
import os, uuid, requests

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

GET/cloud/reseller/customers/{id}

Get an end-customerScope: reseller

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Customer — data: EndCustomer
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466", {
  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}`);

PATCH/cloud/reseller/customers/{id}

Update an end-customer (suspend = its keys stop working)Scope: reseller

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
namestring
emailstring
external_refstringYour own customer id (unique per reseller)
notestring
statusstring (active, suspended)
allow_orderbooleanMay this customer's keys order servers (paid from YOUR balance)?

Responses

200Customer — data: EndCustomer
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "email": "string", "external_ref": "string", "note": "string", "status": "active", "allow_order": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466", headers=h, json={"name": "string", "email": "string", "external_ref": "string", "note": "string", "status": "active", "allow_order": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "email": "string", "external_ref": "string", "note": "string", "status": "active", "allow_order": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/cloud/reseller/customers/{id}

Delete an end-customer (revokes keys and webhooks, unassigns services)Scope: reseller

Parameters

FieldinTypeDescription
id requiredpathinteger
confirm requiredqueryboolean

Responses

200Deleted
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466", {
  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/reseller/customers/{id}/keys

List an end-customer's keysScope: reseller

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Keys — data: array<ApiKey>
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466/keys' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466/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/reseller/customers/47466/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/reseller/customers/{id}/keys

Mint a key for an end-customer (token returned once)Scope: reseller

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
name requiredstring
scopesarray<string (cloud_read, cloud_write, cloud_order, cloud_delete, services_read, services_write, webhooks)>
servicesarray<integer>Optional service allow list
actionsarray<string>Optional action allow list: server actions (reboot) or tool:action / tool:* / method:name
ipsarray<string>
rate_limitintegerRequests per minute (<= your own limit; 0 = default)

Responses

201Created — data: object
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466/keys' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "scopes": ["cloud_read"], "services": [1], "actions": ["string"], "ips": ["string"], "rate_limit": 1}'
import os, uuid, requests

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

DELETE/cloud/reseller/customers/{id}/keys/{kid}

Revoke an end-customer keyScope: reseller

Parameters

FieldinTypeDescription
id requiredpathinteger
kid requiredpathinteger

Responses

200Deleted
404Not found — also returned for objects owned by someone else

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466/keys/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/47466/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/reseller/customers/47466/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}`);

Mail

Typed corporate-mail shortcuts (mailboxes, aliases, catch-all, auto-responders, IMAP migrations, DNS, spam, delivery log, quarantine, deleted mail, archive, 2FA). Mailboxes are addressed by local part.

GET/cloud/mail/{id}/mailboxes

GET mailboxes (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool mailboxes. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes", {
  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/mail/{id}/mailboxes

POST mailboxes:create (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool mailboxes, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes", {
  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}`);

PATCH/cloud/mail/{id}/mailboxes/{local}

PATCH mailboxes:edit (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool mailboxes, action edit. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
local requiredpathstringMailbox local part (before @)

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1", {
  method: "PATCH",
  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/mail/{id}/mailboxes/{local}

DELETE mailboxes:delete (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool mailboxes, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
local requiredpathstringMailbox local part (before @)

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/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/mail/{id}/mailboxes/{local}/password

POST mailboxes:password (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool mailboxes, action password. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
local requiredpathstringMailbox local part (before @)

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1/password' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1/password", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/mailboxes/1/password", {
  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}`);

GET/cloud/mail/{id}/aliases

GET aliases (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool aliases. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases", {
  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/mail/{id}/aliases

POST aliases:create (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool aliases, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases", {
  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}`);

PATCH/cloud/mail/{id}/aliases/{aid}

PATCH aliases:edit (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool aliases, action edit. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
aid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases/1", {
  method: "PATCH",
  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/mail/{id}/aliases/{aid}

DELETE aliases:delete (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool aliases, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
aid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/aliases/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}`);

GET/cloud/mail/{id}/catch-all

GET catch-all (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool catch-all. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/catch-all' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/catch-all", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/catch-all", {
  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/mail/{id}/catch-all

PUT catch-all:edit (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool catch-all, action edit. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/catch-all' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/catch-all", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/catch-all", {
  method: "PUT",
  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/mail/{id}/autoresponders

GET autoresponder (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool autoresponder. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders", {
  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/mail/{id}/autoresponders/{local}

PUT autoresponder:edit (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool autoresponder, action edit. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
local requiredpathstringMailbox local part (before @)

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders/1", {
  method: "PUT",
  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/mail/{id}/autoresponders/{local}

DELETE autoresponder:delete (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool autoresponder, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
local requiredpathstringMailbox local part (before @)

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/autoresponders/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}`);

GET/cloud/mail/{id}/migrations

GET sync-jobs (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool sync-jobs. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations", {
  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/mail/{id}/migrations

POST sync-jobs:create (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool sync-jobs, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations", {
  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/mail/{id}/migrations/{jid}/run

POST sync-jobs:run (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool sync-jobs, action run. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
jid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations/1/run' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations/1/run", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations/1/run", {
  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/mail/{id}/migrations/{jid}

DELETE sync-jobs:delete (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool sync-jobs, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
jid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/migrations/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}`);

GET/cloud/mail/{id}/dns

GET dns-setup (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool dns-setup. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/dns' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/dns", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/dns", {
  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/mail/{id}/dns/verify

POST dns-setup:verify (GyroMail)Scope: services_write

Typed shortcut of the generic bridge: tool dns-setup, action verify. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/dns/verify' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/dns/verify", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/dns/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}`);

GET/cloud/mail/{id}/spam-filter

GET spam-filter (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool spam-filter. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/spam-filter' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/spam-filter", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/spam-filter", {
  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/mail/{id}/delivery-log

GET delivery-log (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool delivery-log. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/delivery-log' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/delivery-log", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/delivery-log", {
  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/mail/{id}/quarantine

GET quarantine (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool quarantine. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/quarantine' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/quarantine", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/quarantine", {
  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/mail/{id}/deleted

GET deleted-mail (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool deleted-mail. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/deleted' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/deleted", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/deleted", {
  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/mail/{id}/archive

GET archive (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool archive. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/archive' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/archive", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/archive", {
  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/mail/{id}/two-factor

GET two-factor (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool two-factor. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/two-factor' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/two-factor", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/two-factor", {
  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/mail/{id}/plan

GET plan-size (GyroMail)Scope: services_read

Typed shortcut of the generic bridge: tool plan-size. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/plan' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/plan", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/mail/47466/plan", {
  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}`);

Object storage

Typed S3 storage shortcuts: buckets, access keys (secret shown once), usage, connection details.

GET/cloud/storage/{id}/buckets

GET buckets (GyroDepolama)Scope: services_read

Typed shortcut of the generic bridge: tool buckets. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets", {
  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/storage/{id}/buckets

POST buckets:create (GyroDepolama)Scope: services_write

Typed shortcut of the generic bridge: tool buckets, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets", {
  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/storage/{id}/buckets/{bucket}

DELETE buckets:delete (GyroDepolama)Scope: services_write

Typed shortcut of the generic bridge: tool buckets, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/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}`);

GET/cloud/storage/{id}/keys

GET access-keys (GyroDepolama)Scope: services_read

Typed shortcut of the generic bridge: tool access-keys. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/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/storage/47466/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/storage/{id}/keys

POST access-keys:create (GyroDepolama)Scope: services_write

Typed shortcut of the generic bridge: tool access-keys, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys", {
  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/storage/{id}/keys/{key}/rotate

POST access-keys:rotate (GyroDepolama)Scope: services_write

Typed shortcut of the generic bridge: tool access-keys, action rotate. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
key requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys/1/rotate' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys/1/rotate", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys/1/rotate", {
  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/storage/{id}/keys/{key}

DELETE access-keys:delete (GyroDepolama)Scope: services_write

Typed shortcut of the generic bridge: tool access-keys, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
key requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/keys/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}`);

GET/cloud/storage/{id}/usage

GET usage (GyroDepolama)Scope: services_read

Typed shortcut of the generic bridge: tool usage. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/usage' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/usage", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/usage", {
  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/storage/{id}/buckets/{bucket}/rename

Rename a bucketScope: services_write

Bucket names are private to the service (other customers may use the same name). Data is not moved. S3 access by the old name stops at once; the website moves to <new>-<service code>.web.gyro-s3.com and the old website address redirects (301) for 40 days; share links keep working. Max 5 renames per bucket per day; the old name cannot be reused inside the service for 40 days. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring

Request body

FieldTypeDescription
new_name requiredstring
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/rename' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"new_name": "string", "confirm": true}'
import os, uuid, requests

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

GET/cloud/storage/{id}/buckets/{bucket}/objects

List objects in a bucket folderScope: services_read

One page (200) of a folder: folders (common prefixes) and files (key, size, modified). Pass next from the previous page to continue.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring
prefixquerystringFolder, ends with / (empty = root)
searchquerystringName prefix inside the folder
nextquerystringContinuation token

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/objects' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/objects", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/objects", {
  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/storage/{id}/buckets/{bucket}/objects/upload-url

Presigned upload URLsScope: services_write

Up to 100 files per call, max 5 GiB each. PUT the file body to each url within 15 minutes; data never passes through the API. Larger files: any S3 client (multipart).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring

Request body

FieldTypeDescription
prefixstringTarget folder (ends with /)
items requiredarray<object>
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/objects/upload-url' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prefix": "string", "items": [{"name": "string", "size": 1}], "confirm": true}'
import os, uuid, requests

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

POST/cloud/storage/{id}/buckets/{bucket}/objects/download-url

Presigned download URLScope: services_write

Returns a 15-minute GET URL (Content-Disposition: attachment). Downloads count toward the service's monthly traffic.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring

Request body

FieldTypeDescription
key requiredstringObject key
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/objects/download-url' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key": "string", "confirm": true}'
import os, uuid, requests

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

POST/cloud/storage/{id}/buckets/{bucket}/objects/delete

Delete objectsScope: services_write

Deletes up to 1000 keys in one call. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring

Request body

FieldTypeDescription
keys requiredarray<string>
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/objects/delete' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keys": ["string"], "confirm": true}'
import os, uuid, requests

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

POST/cloud/storage/{id}/buckets/{bucket}/folders

Create a folderScope: services_write

Creates an empty folder marker prefix + name + /.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring

Request body

FieldTypeDescription
prefixstring
name requiredstring
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prefix": "string", "name": "string", "confirm": true}'
import os, uuid, requests

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

DELETE/cloud/storage/{id}/buckets/{bucket}/folders

Delete a folder with its contentsScope: services_write

Deletes every object under prefix (query). Large folders are deleted in batches: repeat while more is true. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring
prefixquerystringFolder, ends with /

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders", {
  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/storage/{id}/buckets/{bucket}/folders/count

Count objects in a folderScope: services_read

Number of objects under prefix (more = over 100000 or time limit).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
bucket requiredpathstring
prefixquerystringFolder, ends with /

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders/count' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders/count", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/buckets/1/folders/count", {
  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/storage/{id}/connect

GET connect (GyroDepolama)Scope: services_read

Typed shortcut of the generic bridge: tool connect. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/connect' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/connect", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/storage/47466/connect", {
  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}`);

Monitoring (uptime)

Typed uptime-monitor shortcuts: monitors, channels, heartbeats, status pages.

GET/cloud/monitors/{id}/monitors

GET monitors (GyroMonitor)Scope: services_read

Typed shortcut of the generic bridge: tool monitors. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors", {
  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/monitors/{id}/monitors

POST monitors:create (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool monitors, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors", {
  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}`);

PATCH/cloud/monitors/{id}/monitors/{mid}

PATCH monitors:edit (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool monitors, action edit. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
mid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1", {
  method: "PATCH",
  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/monitors/{id}/monitors/{mid}

DELETE monitors:delete (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool monitors, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
mid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/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/monitors/{id}/monitors/{mid}/pause

POST monitors:pause (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool monitors, action pause. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
mid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1/pause' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1/pause", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1/pause", {
  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/monitors/{id}/monitors/{mid}/resume

POST monitors:resume (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool monitors, action resume. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
mid requiredpathstring

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1/resume' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1/resume", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/monitors/1/resume", {
  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}`);

GET/cloud/monitors/{id}/channels

GET channels (GyroMonitor)Scope: services_read

Typed shortcut of the generic bridge: tool channels. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels", {
  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/monitors/{id}/channels

POST channels:create (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool channels, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels", {
  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/monitors/{id}/channels/{cid}

DELETE channels:delete (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool channels, action delete. Body fields are the tool's own fields. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
cid requiredpathstringCertificate id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/channels/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}`);

GET/cloud/monitors/{id}/heartbeats

GET heartbeats (GyroMonitor)Scope: services_read

Typed shortcut of the generic bridge: tool heartbeats. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/heartbeats' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/heartbeats", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/heartbeats", {
  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/monitors/{id}/heartbeats

POST heartbeats:create (GyroMonitor)Scope: services_write

Typed shortcut of the generic bridge: tool heartbeats, action create. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/heartbeats' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/heartbeats", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/heartbeats", {
  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}`);

GET/cloud/monitors/{id}/status-pages

GET status-pages (GyroMonitor)Scope: services_read

Typed shortcut of the generic bridge: tool status-pages. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/status-pages' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/status-pages", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/monitors/47466/status-pages", {
  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}`);

Licenses

Software license status and IP change.

GET/cloud/licenses/{id}

GET method license_status (LisansAPP)Scope: services_read

Typed shortcut of the generic bridge: tool license_status. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/licenses/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/licenses/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/licenses/47466", {
  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/licenses/{id}/change-ip

POST method change_ip (LisansAPP)Scope: services_write

Typed shortcut of the generic bridge: tool change_ip. Body fields are the tool's own fields.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/licenses/47466/change-ip' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/licenses/47466/change-ip", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/licenses/47466/change-ip", {
  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}`);

One-click apps

Install a one-click app on a cloud server (the disk is rebuilt).

GET/cloud/apps

List installable appsScope: services_read

Responses

200Apps — data: array<object>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/apps' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/apps", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/apps", {
  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/servers/{id}/app

App install status (credentials shown once when ready)Scope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Responses

200Status — data: object
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/app' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/app", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/app", {
  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/servers/{id}/app

Install an app (rebuilds the disk; confirm required; 3 per server per day)Scope: cloud_write

Parameters

FieldinTypeDescription
id requiredpathintegerServer id (= service id in the client area)

Request body

FieldTypeDescription
app requiredstring
osstring
domainstring
emailstring
confirm requiredboolean = true

Responses

202Started
404Not found — also returned for objects owned by someone else
409State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight)
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)
429install_limit

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/47466/app' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"app": "wordpress", "domain": "blog.example.com", "email": "[email protected]", "confirm": true}'
import os, uuid, requests

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

Plan changes and add-ons

Resize (plan upgrade) and add-on purchase, paid from the account balance (dry_run, confirm, Idempotency-Key, daily limit: default 50 paid operations per account, per-account/reseller override, 429 daily_limit).

GET/cloud/services/{id}/resize-options

Products this service can be upgraded to, with pricesScope: services_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Options — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/resize-options' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/resize-options", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/resize-options", {
  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/services/{id}/resize

Upgrade the plan (paid from balance)Scope: cloud_order

dry_run returns the price; a real change needs "confirm": true + Idempotency-Key. Creates the upgrade invoice and pays it from the balance; if the balance does not cover it the answer is awaiting_payment with a pay_url. Plan changes that would re-create the server are refused (recreate_required).

Parameters

FieldinTypeDescription
id requiredpathinteger
Idempotency-Key requiredheaderstringUnique per logical request (e.g. a UUID). Replays within 24 hours return the stored answer.

Request body

FieldTypeDescription
product_id requiredinteger
price_idinteger
dry_runboolean
confirmboolean

Responses

202Accepted / awaiting_payment (200 for dry_run) — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/resize' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"product_id": 1, "price_id": 1, "dry_run": true, "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/resize", headers=h, json={"product_id": 1, "price_id": 1, "dry_run": True, "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/resize", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"product_id": 1, "price_id": 1, "dry_run": true, "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/cloud/services/{id}/addons/available

Add-ons offered for this service (with options and prices)Scope: services_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Add-ons — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/addons/available' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/addons/available", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/addons/available", {
  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/services/{id}/addons

Buy an add-on (paid from balance)Scope: cloud_order

Parameters

FieldinTypeDescription
id requiredpathinteger
Idempotency-Key requiredheaderstringUnique per logical request (e.g. a UUID). Replays within 24 hours return the stored answer.

Request body

FieldTypeDescription
addon_id requiredinteger
option_id requiredinteger
quantityinteger
dry_runboolean
confirmboolean

Responses

202Accepted / awaiting_payment (200 for dry_run) — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/services/47466/addons' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"addon_id": 1, "option_id": 1, "quantity": 1, "dry_run": true, "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/addons", headers=h, json={"addon_id": 1, "option_id": 1, "quantity": 1, "dry_run": True, "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/services/47466/addons", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"addon_id": 1, "option_id": 1, "quantity": 1, "dry_run": true, "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

Panel users

Sub-users: extra panel logins with limited permissions (accountant, technical staff). Scope users.

GET/cloud/users

List sub-usersScope: users

Responses

200Users — data: array<object>
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/users' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/users", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/users", {
  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/users

Invite a sub-userScope: users

Request body

FieldTypeDescription
email requiredstring
labelstring
permissionsarray<string>e.g. view_services, view_invoices, pay_invoices, view_tickets, open_tickets ...
send_inviteboolean

Responses

201Created — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/users' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "string", "label": "string", "permissions": ["string"], "send_invite": true}'
import os, uuid, requests

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

PATCH/cloud/users/{id}

Update a sub-user (label, status, permissions)Scope: users

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
labelstring
statusstring (active, inactive)
permissionsarray<string>

Responses

200Updated — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/users/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"label": "string", "status": "active", "permissions": ["string"]}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/users/47466", headers=h, json={"label": "string", "status": "active", "permissions": ["string"]}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/users/47466", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"label": "string", "status": "active", "permissions": ["string"]}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/cloud/users/{id}

Remove a sub-userScope: users

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Deleted — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/users/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/users/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/users/47466", {
  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}`);

POST/cloud/users/{id}/resend-invite

Resend the invitation e-mailScope: users

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Sent — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/users/47466/resend-invite' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

Load balancers

Managed L4/L7 load balancer for your cloud servers: services, health checks, targets, free Let's Encrypt certificates, metrics. EU regions.

GET/cloud/load-balancer-types

List load balancer sizes and pricesScope: cloud_read

Orderable sizes (small/medium/large) with limits, regions and EUR prices per cycle (excl. VAT); list_amount is the strike-through list price.

Responses

200Sizes — data: array<object>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancer-types' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancer-types", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancer-types", {
  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/load-balancers

List load balancersScope: cloud_read

Parameters

FieldinTypeDescription
pagequeryinteger
limitqueryinteger
statusquerystring

Responses

200Load balancers — data: array<LoadBalancer>
401Missing, invalid or revoked key

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers", {
  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/load-balancers

Order a load balancerScope: cloud_order

Orders and pays from the account balance (same money rules as servers): "confirm": true, an Idempotency-Key header, dry_run for a quote. Ready in about a minute; then add services and targets.

Parameters

FieldinTypeDescription
Idempotency-Keyheaderstring

Request body

FieldTypeDescription
sizestring (small, medium, large)
product_idinteger
regionstring (eu-de-1, eu-de-2, eu-fi-1)
cyclestring
end_customer_idinteger
dry_runboolean
confirmboolean

Responses

201Ordered — data: object
200Quote (dry_run) — data: object
400Malformed request (e.g. missing Idempotency-Key)
401Missing, invalid or revoked key
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"size": "small", "product_id": 1, "region": "eu-de-1", "cycle": "string", "end_customer_id": 1, "dry_run": true, "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers", headers=h, json={"size": "small", "product_id": 1, "region": "eu-de-1", "cycle": "string", "end_customer_id": 1, "dry_run": True, "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"size": "small", "product_id": 1, "region": "eu-de-1", "cycle": "string", "end_customer_id": 1, "dry_run": true, "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/cloud/load-balancers/{id}

Get a load balancerScope: cloud_read

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Load balancer — data: LoadBalancer
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466", {
  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/load-balancers/{id}

Delete (cancel) a load balancerScope: cloud_delete

confirm=true required. immediate=true cancels now: traffic and billing stop, the load balancer and its certificates are destroyed after the grace period (3 days). Without immediate a cancellation request is filed.

Parameters

FieldinTypeDescription
id requiredpathinteger
confirmqueryboolean
immediatequeryboolean

Responses

202Cancelling — data: object
401Missing, invalid or revoked key
404Not found — also returned for objects owned by someone else
422Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466", {
  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/load-balancers/{id}/services

List services (ports) of a load balancerScope: services_read

Services with health check and HTTP options, plus the certificates of this load balancer and its limits.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services", {
  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/load-balancers/{id}/services

Add a serviceScope: services_write

Adds a listener. HTTPS needs at least one certificate of this load balancer; TLS ends at the load balancer and targets get HTTP. Use TCP 443 for passthrough.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
protocol requiredstring (tcp, http, https)
listen_port requiredintegerPort the load balancer listens on
destination_port requiredintegerPort on the targets
proxyprotocolbooleanSend PROXY protocol header to targets
hc_protocolstring (tcp, http)Health check type
hc_portinteger
hc_intervalinteger3-60 s
hc_timeoutinteger1-30 s, below interval
hc_retriesinteger0-5
hc_pathstringHTTP check path (starts with /)
hc_domainstringHTTP check Host header
hc_status_codesstringComma separated, e.g. 2??,3??
hc_tlsbooleanHTTP check over TLS
stickybooleanSticky sessions (cookie)
cookie_namestring
cookie_lifetimeinteger
idle_timeoutintegerIdle timeout (s)
certificatesstringHTTPS: comma separated certificate ids of this load balancer
redirect_httpbooleanHTTPS: redirect port 80 to HTTPS (port 80 must be free)
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"protocol": "tcp", "listen_port": 1, "destination_port": 1, "proxyprotocol": true, "hc_protocol": "tcp", "hc_port": 1, "hc_interval": 1, "hc_timeout": 1, "hc_retries": 1, "hc_path": "string", "hc_domain": "string", "hc_status_codes": "string", "hc_tls": true, "sticky": true, "cookie_name": "string", "cookie_lifetime": 1, "idle_timeout": 1, "certificates": "string", "redirect_http": true, "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services", headers=h, json={"protocol": "tcp", "listen_port": 1, "destination_port": 1, "proxyprotocol": True, "hc_protocol": "tcp", "hc_port": 1, "hc_interval": 1, "hc_timeout": 1, "hc_retries": 1, "hc_path": "string", "hc_domain": "string", "hc_status_codes": "string", "hc_tls": True, "sticky": True, "cookie_name": "string", "cookie_lifetime": 1, "idle_timeout": 1, "certificates": "string", "redirect_http": True, "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"protocol": "tcp", "listen_port": 1, "destination_port": 1, "proxyprotocol": true, "hc_protocol": "tcp", "hc_port": 1, "hc_interval": 1, "hc_timeout": 1, "hc_retries": 1, "hc_path": "string", "hc_domain": "string", "hc_status_codes": "string", "hc_tls": true, "sticky": true, "cookie_name": "string", "cookie_lifetime": 1, "idle_timeout": 1, "certificates": "string", "redirect_http": true, "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

PATCH/cloud/load-balancers/{id}/services/{port}

Update a serviceScope: services_write

Changes options of the service on {port}. The protocol cannot change (delete and add).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
port requiredpathstringListen port

Request body

FieldTypeDescription
destination_portintegerPort on the targets
proxyprotocolbooleanSend PROXY protocol header to targets
hc_protocolstring (tcp, http)Health check type
hc_portinteger
hc_intervalinteger3-60 s
hc_timeoutinteger1-30 s, below interval
hc_retriesinteger0-5
hc_pathstringHTTP check path (starts with /)
hc_domainstringHTTP check Host header
hc_status_codesstringComma separated, e.g. 2??,3??
hc_tlsbooleanHTTP check over TLS
stickybooleanSticky sessions (cookie)
cookie_namestring
cookie_lifetimeinteger
idle_timeoutintegerIdle timeout (s)
certificatesstringHTTPS: comma separated certificate ids of this load balancer
redirect_httpbooleanHTTPS: redirect port 80 to HTTPS (port 80 must be free)
confirmboolean

Responses

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

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"destination_port": 1, "proxyprotocol": true, "hc_protocol": "tcp", "hc_port": 1, "hc_interval": 1, "hc_timeout": 1, "hc_retries": 1, "hc_path": "string", "hc_domain": "string", "hc_status_codes": "string", "hc_tls": true, "sticky": true, "cookie_name": "string", "cookie_lifetime": 1, "idle_timeout": 1, "certificates": "string", "redirect_http": true, "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services/1", headers=h, json={"destination_port": 1, "proxyprotocol": True, "hc_protocol": "tcp", "hc_port": 1, "hc_interval": 1, "hc_timeout": 1, "hc_retries": 1, "hc_path": "string", "hc_domain": "string", "hc_status_codes": "string", "hc_tls": True, "sticky": True, "cookie_name": "string", "cookie_lifetime": 1, "idle_timeout": 1, "certificates": "string", "redirect_http": True, "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services/1", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"destination_port": 1, "proxyprotocol": true, "hc_protocol": "tcp", "hc_port": 1, "hc_interval": 1, "hc_timeout": 1, "hc_retries": 1, "hc_path": "string", "hc_domain": "string", "hc_status_codes": "string", "hc_tls": true, "sticky": true, "cookie_name": "string", "cookie_lifetime": 1, "idle_timeout": 1, "certificates": "string", "redirect_http": true, "confirm": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/cloud/load-balancers/{id}/services/{port}

Delete a serviceScope: services_write

Stops listening on {port}. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
port requiredpathstringListen port

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/services/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}`);

GET/cloud/load-balancers/{id}/targets

List targets with healthScope: services_read

Targets, per-service health (healthy/unhealthy/unknown), and the cloud servers / dedicated IPs that can be added.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/targets' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/targets", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/targets", {
  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/load-balancers/{id}/targets

Add a targetScope: services_write

type=server (server = your cloud server id, same region), type=all (all your cloud servers, new ones join automatically) or type=ip (your dedicated server IP). use_private_ip needs a private network attached.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
type requiredstring (server, all, ip)
serverintegerCloud server id (type=server)
ipstringDedicated server IP (type=ip)
use_private_ipboolean
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/targets' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type": "server", "server": 1, "ip": "string", "use_private_ip": true, "confirm": true}'
import os, uuid, requests

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

DELETE/cloud/load-balancers/{id}/targets

Remove a targetScope: services_write

Same fields as add, in the query string (?type=server&server=123&confirm=true) or the JSON body. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
typequerystringserver | all | ip
serverquerystringCloud server id
ipquerystringDedicated server IP

Request body

FieldTypeDescription
typestring
serverinteger
ipstring
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/targets' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type": "string", "server": 1, "ip": "string", "confirm": true}'
import os, uuid, requests

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

GET/cloud/load-balancers/{id}/certificates

List certificatesScope: services_read

Uploaded and Let's Encrypt certificates (Let's Encrypt ones renew automatically), a pending Let's Encrypt request and the validation redirect base URL.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates", {
  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/load-balancers/{id}/certificates

Upload a certificateScope: services_write

PEM certificate chain + unencrypted private key. The key is sent to the load balancer only; it is never stored or logged by the panel.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
namestring
certificate requiredstringPEM chain
private_key requiredstringPEM key (unencrypted)
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "certificate": "string", "private_key": "string", "confirm": true}'
import os, uuid, requests

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

POST/cloud/load-balancers/{id}/certificates/letsencrypt

Request a free Let's Encrypt certificateScope: services_write

Up to 10 names whose A record points to this load balancer. Your targets must redirect /.well-known/acme-challenge/<token> to the redirect base shown in GET certificates; answer acme=waiting lists the per-name check, fix the redirect and call verify.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
domains requiredstringComma separated names
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": "string", "confirm": true}'
import os, uuid, requests

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

DELETE/cloud/load-balancers/{id}/certificates/letsencrypt

Cancel a pending Let's Encrypt requestScope: services_write

Drops the pending order. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt", {
  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/load-balancers/{id}/certificates/letsencrypt/verify

Continue a pending Let's Encrypt requestScope: services_write

Re-checks the redirect, lets the CA validate and uploads the certificate (acme=issued).

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt/verify' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt/verify", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/letsencrypt/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}`);

DELETE/cloud/load-balancers/{id}/certificates/{cid}

Delete a certificateScope: services_write

Only certificates not used by a service. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
cid requiredpathstringCertificate id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/certificates/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}`);

GET/cloud/load-balancers/{id}/settings

Algorithm, reverse DNS, private networkScope: services_read

Current algorithm, PTR records, your private networks in the same region (attached or not) and limits.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/settings' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/settings", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/settings", {
  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/load-balancers/{id}/algorithm

Change the balancing algorithmScope: services_write

round_robin or least_connections.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
algorithm requiredstring (round_robin, least_connections)
confirmboolean

Responses

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

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/algorithm' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"algorithm": "round_robin", "confirm": true}'
import os, uuid, requests

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

PUT/cloud/load-balancers/{id}/rdns

Set reverse DNSScope: services_write

PTR for one of the load balancer's IPs; empty ptr restores the default.

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
ip requiredstring
ptrstring
confirmboolean

Responses

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

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/rdns' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip": "string", "ptr": "string", "confirm": true}'
import os, uuid, requests

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

POST/cloud/load-balancers/{id}/network

Attach to a private networkScope: services_write

One of your private networks in the same region (GET settings).

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
network requiredinteger
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/network' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"network": 1, "confirm": true}'
import os, uuid, requests

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

DELETE/cloud/load-balancers/{id}/network/{nid}

Detach from a private networkScope: services_write

Targets that use private IPs must be removed first. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
nid requiredpathstringPrivate network id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/network/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/network/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/network/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}`);

GET/cloud/load-balancers/{id}/metrics

Load balancer metricsScope: services_read

Open connections, new connections/s, requests/s, bandwidth in/out (Mbit/s).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
periodquerystring24h | 7d | 30d

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/metrics' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/metrics", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/load-balancers/47466/metrics", {
  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}`);

Managed DNS

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.

GET/cloud/dns/{id}/zones

List DNS zonesScope: services_read

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

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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/47466/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

Add a zoneScope: services_write

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

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
name requiredstringZone name (IDN allowed)
bindstringOptional BIND zone file (max 2 MB)
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "bind": "string", "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones", headers=h, json={"name": "string", "bind": "string", "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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}

Get a zone with its recordsScope: services_read

Zone state, serial, DNSSEC flag (+DS) and all record sets. Pending zones return the verification details.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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/47466/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}

Delete a zoneScope: services_write

Removes the zone and its health checks from our name servers at once. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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

Verify ownership nowScope: services_write

Checks delegation / TXT now (the system also re-checks automatically for 14 days).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/verify' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/verify", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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

Import a BIND zone fileScope: services_write

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

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Request body

FieldTypeDescription
bind requiredstring
modestring (merge, replace)
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/import' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"bind": "string", "mode": "merge", "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/import", headers=h, json={"bind": "string", "mode": "merge", "confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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

Export the zone fileScope: services_read

Returns the zone in BIND format (bind).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/export' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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/47466/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

List record setsScope: services_read

All record sets (rrsets: name, type, ttl, records, read_only, health_check). source=cpanel reads a zone of your cPanel hosting (read only).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name
sourcequerystringgyrodns (default) | cpanel

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/records' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/records", 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/47466/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

Create or replace a record setScope: services_write

Upserts one record set (name + type). CNAME and ALIAS take one value; no CNAME at the apex (use ALIAS); apex NS and SOA are managed by us.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Request body

FieldTypeDescription
name requiredstringRecord name relative to the zone (@ = apex, * = wildcard) or FQDN with trailing dot
type requiredstring (A, AAAA, CNAME, MX, TXT, SRV, CAA, ALIAS, NS, PTR)
ttlinteger60-86400 s
records requiredarray<string>Values in zone file syntax, one per item (TXT quotes optional)
confirmboolean

Responses

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

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/records' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "type": "A", "ttl": 1, "records": ["string"], "confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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

Delete a record setScope: services_write

Deletes the record set given by name and type (query). Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name
namequerystringRecord name
typequerystringRecord type

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/records' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/records", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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 status and DS recordsScope: services_read

dnssec flag and ds (enter at your registrar).

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Responses

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

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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/47466/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

Enable DNSSECScope: services_write

Signs the zone (ECDSA P-256) and returns the DS records. No effect until the DS is at the registrar. Not with ALIAS records.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/dnssec", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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

Disable DNSSECScope: services_write

Remove the DS at your registrar and wait for its TTL first, otherwise validating resolvers fail. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
zone requiredpathstringZone name

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/zones/1/dnssec", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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

List health-checked recordsScope: services_read

Checks with primary/backup IP, which one is active and the last state (gmon majority of 3 locations).

Parameters

FieldinTypeDescription
id requiredpathintegerService id

Responses

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

Code samples

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

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/health-checks", 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/47466/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

Create a health-checked recordScope: services_write

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

FieldinTypeDescription
id requiredpathintegerService id

Request body

FieldTypeDescription
zone requiredstring
name requiredstring
type requiredstring (A, AAAA)
primary requiredstring
backup requiredstring
check requiredstring (http, https, tcp, ping)
portinteger
pathstring
ttlinteger30-300 s
confirmboolean

Responses

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

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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}

Delete a health checkScope: services_write

Stops checking; the record keeps its current value. Needs "confirm": true.

Parameters

FieldinTypeDescription
id requiredpathintegerService id
hid requiredpathstringHealth check id

Request body

FieldTypeDescription
confirmboolean

Responses

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

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/health-checks/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/health-checks/1", headers=h, json={"confirm": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/dns/47466/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}`);

Reference data

Countries, states, cities.

GET/reference/countries

List countriesScope: Reference/GetCountries

List countries.

Core WISECP client endpoint.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/reference/countries' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/reference/countries", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/reference/countries", {
  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/reference/countries/{code}/states

List states (path: {code})Scope: Reference/GetStates

List states (path: {code}).

Core WISECP client endpoint.

Parameters

FieldinTypeDescription
code requiredpathstring

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/reference/countries/1/states' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/reference/countries/1/states", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/reference/countries/1/states", {
  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/reference/states/{id}/cities

List cities (path: {id})Scope: Reference/GetCities

List cities (path: {id}).

Core WISECP client endpoint.

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/reference/states/47466/cities' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/reference/states/47466/cities", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/reference/states/47466/cities", {
  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}`);

Services (core)

Core service endpoints: renew, cancel, auto-renew, add-ons, metrics, SSO, password.

GET/services

List servicesScope: Services/GetServices

List services. Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.
statusquerystringDurum süzgeci. Rozet gruplarını alır: bekleyen hem kurulumdakini hem işlemdekini kapsar, iptal ise tamamlananı da içerir.
typequerystringÜrün türü süzgeci.
searchquerystringHizmet adında ve bağlı alan adında arar.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services", {
  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/services/{id}

Get service (path: {id})Scope: Services/GetService

Get service (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466", {
  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}`);

PATCH/services/{id}

Update service (path: {id})Scope: Services/UpdateService

Update service (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
auto_renewbooleanHizmet bazlı otomatik yenileme. Hesap geneli otomatik ödeme açıkken değiştirilemez.
billing_profile_idintegerFatura profilinin numarası. Sıfır hesabın varsayılanına döner.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422autorenew_locked, no_auto_pay_source, not_actionable, nothing_to_update

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/services/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"auto_renew": true, "billing_profile_id": 1}'
import os, uuid, requests

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

POST/services/{id}/renew

Renew service (path: {id})Scope: Services/RenewService

Renew service (path: {id}). Service of the calling account (any product line).

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger
Idempotency-Key requiredheaderstring

Request body

FieldTypeDescription
cyclestringYenileme döngüsü. Hizmet detayındaki döngü listesinden seçilir; verilmezse mevcut döngü kullanılır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422already_invoiced, cycle_invalid, not_renewable, renew_blocked_subscription, renew_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/services/47466/renew' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"cycle": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/services/47466/renew", headers=h, json={"cycle": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/renew", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"cycle": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/services/{id}/invoices

List service invoices (path: {id})Scope: Services/GetServiceInvoices

List service invoices (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger
limitqueryintegerEn çok satır. En çok 100.
pagequeryinteger

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/invoices' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/invoices", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/invoices", {
  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/services/{id}/addons

List service addons (path: {id})Scope: Services/GetServiceAddons

List service addons (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/addons' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/addons", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/addons", {
  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/services/{id}/cancellation

Create cancellation (path: {id})Scope: Services/CreateCancellation

Create cancellation (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
urgency requiredstringNe zaman iptal edilsin: hemen ya da dönem sonunda.
reason requiredstringGerekçe. Beş değerden biri: gerek kalmadı, pahalı, başka yere geçiliyor, özellik eksik ya da diğer.
reason_detailstringSerbest açıklama. Gerekçe diğer ise zorunludur.
notestringOperatöre not.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422cancellation_exists, not_actionable, one_time_service, reason_detail_required

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/services/47466/cancellation' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urgency": "string", "reason": "string", "reason_detail": "string", "note": "string"}'
import os, uuid, requests

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

DELETE/services/{id}/cancellation

Revoke cancellation (path: {id})Scope: Services/RevokeCancellation

Revoke cancellation (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/services/47466/cancellation' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/services/47466/cancellation", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/cancellation", {
  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/services/{id}/metrics

Get service metrics (path: {id})Scope: Services/GetServiceMetrics

Get service metrics (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/metrics' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/metrics", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/metrics", {
  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/services/{id}/metrics/billing

List service metric billing (path: {id})Scope: Services/GetServiceMetricBilling

List service metric billing (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.
metricquerystringTek bir ölçüme daraltır.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/metrics/billing' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/metrics/billing", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/metrics/billing", {
  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}`);

PATCH/services/{id}/metrics/{key}

Update service metric (path: {id}, {key})Scope: Services/UpdateServiceMetric

Update service metric (path: {id}, {key}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-hizmetler).

Parameters

FieldinTypeDescription
id requiredpathinteger
key requiredpathstring

Request body

FieldTypeDescription
enabled requiredbooleanİstenen durum.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422enabled_invalid, metric_module_rejected, metric_not_priced, metric_unpaid_lock, not_actionable

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/services/47466/metrics/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true}'
import os, uuid, requests

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

GET/services/{id}/dashboard

Get service dashboard (path: {id})Scope: Services/GetServiceDashboard

Get service dashboard (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422module_unavailable, not_actionable

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/dashboard' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/dashboard", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/dashboard", {
  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/services/{id}/tools

Get service tools (path: {id})Scope: Services/GetServiceTools

Get service tools (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422tools_not_supported

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/tools' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/tools", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/tools", {
  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/services/{id}/tools/{tool}

Get service tool data (path: {id}, {tool})Scope: Services/GetServiceToolData

Get service tool data (path: {id}, {tool}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger
tool requiredpathstring
actionquerystringOkuma eylemi. Verilmezse aracın varsayılan listesi alınır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422tool_rejected, tools_not_supported
500tool_data_failed

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/services/47466/tools/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/services/47466/tools/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/tools/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}`);

POST/services/{id}/tools/{tool}/{action}

Run service tool action (path: {id}, {tool}, {action})Scope: Services/RunServiceToolAction

Run service tool action (path: {id}, {tool}, {action}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger
tool requiredpathstring
action requiredpathstring

Request body

FieldTypeDescription
current_pathstring
filestring
namestring
new_namestring
itemsstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422tool_action_failed, tool_rejected, tools_not_supported
500tool_action_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/services/47466/tools/1/reboot' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"current_path": "string", "file": "string", "name": "string", "new_name": "string", "items": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/services/47466/tools/1/reboot", headers=h, json={"current_path": "string", "file": "string", "name": "string", "new_name": "string", "items": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/services/47466/tools/1/reboot", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"current_path": "string", "file": "string", "name": "string", "new_name": "string", "items": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

POST/services/{id}/module-method

Use service module method (path: {id})Scope: Services/UseServiceModuleMethod

Use service module method (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
method requiredstringÇalıştırılacak metot. Panel özetindeki metot listesinden alınır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422invalid_method, method_required, module_unavailable, tool_rejected
500module_method_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/services/47466/module-method' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"method": "string"}'
import os, uuid, requests

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

POST/services/{id}/sso

Get service sso (path: {id})Scope: Services/GetServiceSso

Get service sso (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422sso_not_supported, tool_rejected
500sso_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/services/47466/sso' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

POST/services/{id}/password

Change service password (path: {id})Scope: Services/ChangeServicePassword

Change service password (path: {id}). Service of the calling account (any product line).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/hizmetin-icine-erisim).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
password requiredstringYeni panel parolası. Operatörün asgari uzunluğunu karşılamalıdır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422password_change_failed, password_not_supported, password_too_short

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/services/47466/password' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"password": "string"}'
import os, uuid, requests

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

Domains and DNS

Register, transfer, renew, nameservers, DNS records, DNSSEC, lock, EPP code, privacy, WHOIS contacts, forwarding (core WISECP client API).

GET/domains/tlds

List tldsScope: Domains/GetTlds

List tlds. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
tldquerystringTek bir uzantı. Listeyi daraltır ve süre başına fiyat tablosunu ekler.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422domains_not_offered

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/tlds' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/tlds", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/tlds", {
  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/domains/check

Check domainScope: Domains/CheckDomain

Check domain. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Request body

FieldTypeDescription
domain requiredstringSorulacak tam alan adı.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422domain_check_throttled, domain_invalid, domain_required, domains_not_offered, tld_not_offered

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/check' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "string"}'
import os, uuid, requests

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

POST/domains/register

Register domainScope: Domains/RegisterDomain

Register domain. Domain operations run against the registrar module of the domain.

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
Idempotency-Key requiredheaderstring

Request body

FieldTypeDescription
terms requiredbooleanŞartların kabulü. Doğru gönderilmelidir.
domain requiredstringTam alan adı.
yearsintegerKayıt süresi. Uzantının penceresi içinde olmalı; özel fiyatlı adlar ne gönderilirse gönderilsin bir yıl kaydedilir.
accept_premiumbooleanÖzel fiyatlı adın fiyatını kabul. Böyle bir adda zorunludur.
addonsstringBirlikte alınacak ek hizmetler. Alan adı yönetimi, kayıt gizliliği ve yönlendirme; yalnız uzantı sunuyorsa.
nameserversstringAd sunucuları. İkiden dörde; verilmezse hesabın varsayılanları uygulanır.
whois_profile_idintegerKayıtlı kayıt sahibi profili. Dört rolü birden doldurur.
contactsobjectRol bazında kişiler. Her rol ya kayıtlı bir profil numarası ya da satır içi bir kişi taşır ve o rol için profili ezer.
couponsstringKupon kodları.
billing_profile_idintegerFatura profilinin numarası.
notesstringSipariş notu.
paymentobjectÖdeme kaynağı. Hesap bakiyesi ya da kayıtlı kart.
auth_codestring
methodstring
card_idstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_not_offered, contact_field_invalid, contact_field_required, domains_not_offered, insufficient_balance, nameservers_invalid, terms_required, tld_not_offered, verification_required, years_invalid

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/register' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"terms": true, "domain": "string", "years": 1, "accept_premium": true, "addons": "string", "nameservers": "string", "whois_profile_id": 1, "contacts": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "auth_code": "string", "method": "string", "card_id": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/domains/register", headers=h, json={"terms": True, "domain": "string", "years": 1, "accept_premium": True, "addons": "string", "nameservers": "string", "whois_profile_id": 1, "contacts": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "auth_code": "string", "method": "string", "card_id": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/register", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"terms": true, "domain": "string", "years": 1, "accept_premium": true, "addons": "string", "nameservers": "string", "whois_profile_id": 1, "contacts": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "auth_code": "string", "method": "string", "card_id": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

POST/domains/transfer

Transfer domainScope: Domains/TransferDomain

Transfer domain. Domain operations run against the registrar module of the domain.

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
Idempotency-Key requiredheaderstring

Request body

FieldTypeDescription
terms requiredbooleanŞartların kabulü. Doğru gönderilmelidir.
domain requiredstringTam alan adı.
auth_codestringMevcut sağlayıcıdan alınan transfer kodu. Uzantı işaretliyse zorunludur ve her durumda hizmete yazılır.
addonsstringBirlikte alınacak ek hizmetler. Alan adı yönetimi, kayıt gizliliği ve yönlendirme; yalnız uzantı sunuyorsa.
nameserversstringAd sunucuları. İkiden dörde; verilmezse hesabın varsayılanları uygulanır.
whois_profile_idintegerKayıtlı kayıt sahibi profili. Dört rolü birden doldurur.
contactsobjectRol bazında kişiler. Her rol ya kayıtlı bir profil numarası ya da satır içi bir kişi taşır ve o rol için profili ezer.
couponsstringKupon kodları.
billing_profile_idintegerFatura profilinin numarası.
notesstringSipariş notu.
paymentobjectÖdeme kaynağı. Hesap bakiyesi ya da kayıtlı kart.
yearsstring
accept_premiumstring
methodstring
card_idstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422auth_code_required, checkout_blocked, domain_not_registered, domain_transfer_locked, domains_not_offered, terms_required, transfer_not_offered

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/transfer' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"terms": true, "domain": "string", "auth_code": "string", "addons": "string", "nameservers": "string", "whois_profile_id": 1, "contacts": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "years": "string", "accept_premium": "string", "method": "string", "card_id": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/domains/transfer", headers=h, json={"terms": True, "domain": "string", "auth_code": "string", "addons": "string", "nameservers": "string", "whois_profile_id": 1, "contacts": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "years": "string", "accept_premium": "string", "method": "string", "card_id": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/transfer", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"terms": true, "domain": "string", "auth_code": "string", "addons": "string", "nameservers": "string", "whois_profile_id": 1, "contacts": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "years": "string", "accept_premium": "string", "method": "string", "card_id": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/domains/whois-profiles

List whois profilesScope: Domains/GetWhoisProfiles

List whois profiles. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/whois-profiles' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles", {
  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/domains/whois-profiles

Create whois profileScope: Domains/CreateWhoisProfile

Create whois profile. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Request body

FieldTypeDescription
name requiredstringProfilin etiketi.
contact requiredobjectcontactKaydedilecek kişi. İl burada zorunlu değildir.
first_name requiredstringKişinin adı.
last_name requiredstringKişinin soyadı.
companystringKurum adı. Tek isteğe bağlı alandır.
email requiredstringGeçerli bir e-posta.
phone requiredstringTelefon.
address requiredstringAdres satırı.
address2stringİkinci adres satırı. İsteğe bağlı; anahtar yoksa boş satır kaydedilir.
city requiredstringŞehir.
statestringİl ya da eyalet. Alan adı kişilerinde zorunludur, kayıtlı profillerde değildir.
zip requiredstringPosta kodu.
country requiredstringÜlke kodu. Büyük harfe çevrilir.
postal_codestring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422contact_email_invalid, contact_field_invalid, contact_field_required, contact_name_required, name_required, profile_rejected
500profile_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/whois-profiles' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles", headers=h, json={"name": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

PUT/domains/whois-profiles/{pid}

Update whois profile (path: {pid})Scope: Domains/UpdateWhoisProfile

Update whois profile (path: {pid}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
pid requiredpathinteger

Request body

FieldTypeDescription
name requiredstringYeni etiket.
contact requiredobjectcontactTam kişi. Kayıtlı kişi bütünüyle değiştirilir.
first_name requiredstringKişinin adı.
last_name requiredstringKişinin soyadı.
companystringKurum adı. Tek isteğe bağlı alandır.
email requiredstringGeçerli bir e-posta.
phone requiredstringTelefon.
address requiredstringAdres satırı.
address2stringİkinci adres satırı. Profil bütün olarak değiştirilir; anahtar yoksa boş satır kaydedilir.
city requiredstringŞehir.
statestringİl ya da eyalet. Alan adı kişilerinde zorunludur, kayıtlı profillerde değildir.
zip requiredstringPosta kodu.
country requiredstringÜlke kodu. Büyük harfe çevrilir.
postal_codestring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422contact_email_invalid, contact_field_invalid, contact_field_required, contact_name_required, name_required, profile_rejected

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/1", headers=h, json={"name": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/1", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

DELETE/domains/whois-profiles/{pid}

Delete whois profile (path: {pid})Scope: Domains/DeleteWhoisProfile

Delete whois profile (path: {pid}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
pid requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/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}`);

POST/domains/whois-profiles/{pid}/default

Set default whois profile (path: {pid})Scope: Domains/SetDefaultWhoisProfile

Set default whois profile (path: {pid}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
pid requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/whois-profiles/1/default' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

GET/domains/default-nameservers

Get default nameserversScope: Domains/GetDefaultNameservers

Get default nameservers. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/default-nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/default-nameservers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/default-nameservers", {
  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/domains/default-nameservers

Update default nameserversScope: Domains/UpdateDefaultNameservers

Update default nameservers. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Request body

FieldTypeDescription
nameservers requiredstringVarsayılan set. İkiden dörde kadar geçerli sunucu adı; boşluklar kırpılır ve küçük harfe çevrilir.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422nameservers_invalid

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/default-nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"nameservers": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/domains/default-nameservers", headers=h, json={"nameservers": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/default-nameservers", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"nameservers": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/domains

List domainsScope: Domains/GetDomains

List domains. Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-alan-adlari).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.
statusquerystringDurum süzgeci. Rozet gruplarını alır.
tldquerystringYalnız bu uzantının alan adları.
searchquerystringAlan adında arar.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains", {
  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/domains/{domain}

Get domain (path: {domain})Scope: Domains/GetDomain

Get domain (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-alan-adlari).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/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}`);

PATCH/domains/{domain}

Update domain (path: {domain})Scope: Domains/UpdateDomain

Update domain (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-alan-adlari).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
auto_renewbooleanAlan adı bazlı otomatik yenileme. Yalnız etkin alan adlarında ve gerçek bir mantıksal değerle.
billing_profile_idintegerFatura profilinin numarası. Sıfır hesabın varsayılanına döner.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422auto_renew_invalid, autorenew_locked, billing_profile_rejected, no_auto_pay_source, not_actionable, nothing_to_update

Code samples

curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/domains/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"auto_renew": true, "billing_profile_id": 1}'
import os, uuid, requests

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

POST/domains/{domain}/renew

Renew domain (path: {domain})Scope: Domains/RenewDomain

Renew domain (path: {domain}). Domain operations run against the registrar module of the domain.

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-alan-adlari).

Parameters

FieldinTypeDescription
domain requiredpathstring
Idempotency-Key requiredheaderstring

Request body

FieldTypeDescription
years requiredintegerYenileme süresi. Detaydaki fiyatlı süre satırlarından biri olmalıdır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422not_renewable, years_invalid

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/renew' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"years": 1}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/domains/1/renew", headers=h, json={"years": 1}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/renew", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"years": 1}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/domains/{domain}/transfer-status

Get transfer status (path: {domain})Scope: Domains/GetTransferStatus

Get transfer status (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422not_a_transfer

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/transfer-status' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/transfer-status", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/transfer-status", {
  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/domains/{domain}/nameservers

Get nameservers (path: {domain})Scope: Domains/GetNameservers

Get nameservers (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/nameservers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/nameservers", {
  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/domains/{domain}/nameservers

Update nameservers (path: {domain})Scope: Domains/UpdateNameservers

Update nameservers (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
nameservers requiredstringYeni set. İkiden dörde kadar geçerli sunucu adı; boş girişler sayımdan önce düşer.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422nameservers_failed, nameservers_invalid, nameservers_not_supported, nameservers_rejected, not_actionable
500nameservers_failed

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"nameservers": "string"}'
import os, uuid, requests

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

GET/domains/{domain}/child-nameservers

Get child nameservers (path: {domain})Scope: Domains/GetChildNameservers

Get child nameservers (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422child_ns_failed, child_ns_not_supported
500child_ns_failed

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers", {
  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/domains/{domain}/child-nameservers

Create child nameserver (path: {domain})Scope: Domains/CreateChildNameserver

Create child nameserver (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
host requiredstringSunucunun tam adı. Küçük harfe çevrilir.
ip requiredstringSunucunun adresi. Biçimi doğrulanır.
nsstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422child_ns_failed, child_ns_fields, child_ns_host_invalid, child_ns_ip_invalid, child_ns_not_supported, child_ns_rejected, not_actionable
500child_ns_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"host": "string", "ip": "string", "ns": "string"}'
import os, uuid, requests

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

DELETE/domains/{domain}/child-nameservers

Delete child nameserver (path: {domain})Scope: Domains/DeleteChildNameserver

Delete child nameserver (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422child_ns_failed, child_ns_fields, child_ns_not_supported, child_ns_rejected, not_actionable
500child_ns_failed

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/child-nameservers", {
  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/domains/{domain}/transfer-lock

Get transfer lock (path: {domain})Scope: Domains/GetTransferLock

Get transfer lock (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/transfer-lock' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/transfer-lock", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/transfer-lock", {
  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/domains/{domain}/transfer-lock

Update transfer lock (path: {domain})Scope: Domains/UpdateTransferLock

Update transfer lock (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
locked requiredbooleanYeni kilit durumu. Gerçek bir mantıksal değer olmalıdır; metin ve sayı reddedilir.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422lock_failed, lock_not_supported, lock_rejected, locked_invalid, not_actionable
500lock_failed

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/transfer-lock' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locked": true}'
import os, uuid, requests

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

POST/domains/{domain}/auth-code

Send auth code (path: {domain})Scope: Domains/SendAuthCode

Send auth code (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422auth_code_failed, auth_code_not_supported, auth_code_rejected, not_actionable
500auth_code_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/auth-code' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

PUT/domains/{domain}/auth-code

Save auth code (path: {domain})Scope: Domains/SaveAuthCode

Save auth code (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-edinme).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
code requiredstringYeni transfer kodu. İşaretleme ayıklanır ve boşluklar kırpılır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422code_required, not_actionable

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/auth-code' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code": "string"}'
import os, uuid, requests

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

GET/domains/{domain}/dns-records

List dns records (path: {domain})Scope: Domains/GetDnsRecords

List dns records (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_pending, addon_required, dns_failed, dns_not_supported, dns_rejected
500dns_failed

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/dns-records' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/dns-records", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/dns-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}`);

POST/domains/{domain}/dns-records

Create dns record (path: {domain})Scope: Domains/CreateDnsRecord

Create dns record (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
type requiredstringKayıt türü.
name requiredstringKaydın yanıtlayacağı ad. Kabul edilen biçim sağlayıcıya göre değişir.
value requiredstringKaydın içeriği.
ttlintegerYaşam süresi. Verilmezse sağlayıcının varsayılanı kullanılır.
priorityintegerÖncelik. Posta ve hizmet kayıtları dışında yok sayılır.
identitystring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, dns_failed, dns_fields, dns_not_supported, dns_rejected, not_actionable
500dns_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/dns-records' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type": "string", "name": "string", "value": "string", "ttl": 1, "priority": 1, "identity": "string"}'
import os, uuid, requests

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

PUT/domains/{domain}/dns-records

Update dns record (path: {domain})Scope: Domains/UpdateDnsRecord

Update dns record (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
identitystringListeden gelen kayıt numarası. Liste bir numara döndürdüyse mutlaka gönderin.
type requiredstringKayıt türü.
name requiredstringKaydın adı.
value requiredstringYeni içerik.
ttlintegerYaşam süresi. Verilmezse kayıt mevcut yaşam süresini korur.
priorityintegerÖncelik. Verilmezse kayıt, türü değişmediği sürece mevcut önceliğini korur.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, dns_edit_not_supported, dns_failed, dns_fields, dns_rejected, not_actionable
500dns_failed

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/dns-records' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"identity": "string", "type": "string", "name": "string", "value": "string", "ttl": 1, "priority": 1}'
import os, uuid, requests

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

DELETE/domains/{domain}/dns-records

Delete dns record (path: {domain})Scope: Domains/DeleteDnsRecord

Delete dns record (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, dns_failed, dns_fields, dns_rejected, not_actionable
500dns_failed

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/domains/1/dns-records' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/domains/1/dns-records", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/dns-records", {
  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/domains/{domain}/dnssec

List dnssec records (path: {domain})Scope: Domains/GetDnssecRecords

List dnssec records (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422dnssec_failed, dnssec_not_supported
500dnssec_failed

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/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/domains/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/domains/{domain}/dnssec

Create dnssec record (path: {domain})Scope: Domains/CreateDnssecRecord

Create dnssec record (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
key_tag requiredintegerAnahtarın etiketi. dnskey-keytag-flags'te anahtar bayrağını taşır.
algorithm requiredintegerAnahtar algoritmasının numarası. Modülün bildirdiği kümede olmalıdır.
digest_type requiredintegerÖzet algoritmasının numarası ya da meta.dnssec_fields'in adlandırdığı anahtar bayrağı veya protokol. Modülün bildirdiği kümede olmalıdır.
digest requiredstringİmza özeti. DNSKEY isteyen servis sağlayıcı burada açık anahtarı (base64) alır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422dnssec_algorithm_invalid, dnssec_digest_type_invalid, dnssec_failed, dnssec_fields, dnssec_not_supported, dnssec_rejected, not_actionable
500dnssec_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key_tag": 1, "algorithm": 1, "digest_type": 1, "digest": "string"}'
import os, uuid, requests

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

DELETE/domains/{domain}/dnssec

Delete dnssec record (path: {domain})Scope: Domains/DeleteDnssecRecord

Delete dnssec record (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/ad-sunuculari-ve-kayitlar).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422dnssec_failed, dnssec_fields, dnssec_not_supported, dnssec_rejected, not_actionable
500dnssec_failed

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/domains/1/dnssec' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/domains/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/domains/1/dnssec", {
  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/domains/{domain}/whois

Get whois contacts (path: {domain})Scope: Domains/GetWhoisContacts

Get whois contacts (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422whois_not_supported, whois_rejected

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/whois' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/whois", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/whois", {
  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/domains/{domain}/whois

Update whois contacts (path: {domain})Scope: Domains/UpdateWhoisContacts

Update whois contacts (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
rolestringHangi rollere yazılacağı. Verilmezse dört rolün hepsine yazılır.
contact requiredobjectcontactYazılacak kişi.
first_name requiredstringKişinin adı.
last_name requiredstringKişinin soyadı.
companystringKurum adı. Tek isteğe bağlı alandır.
email requiredstringGeçerli bir e-posta.
phone requiredstringTelefon.
address requiredstringAdres satırı.
address2stringİkinci adres satırı (daire, kat, blok). Anahtar gönderilmezse sağlayıcıdaki satır korunur; boş metin satırı siler.
city requiredstringŞehir.
statestringİl ya da eyalet. Alan adı kişilerinde zorunludur, kayıtlı profillerde değildir.
zip requiredstringPosta kodu.
country requiredstringÜlke kodu. Büyük harfe çevrilir.
postal_codestring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422contact_email_invalid, contact_field_invalid, contact_field_required, contact_name_required, not_actionable, role_invalid, whois_failed, whois_not_supported, whois_rejected
500whois_failed

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/whois' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/domains/1/whois", headers=h, json={"role": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/whois", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"role": "string", "contact": {}, "first_name": "string", "last_name": "string", "company": "string", "email": "string", "phone": "string", "address": "string", "address2": "string", "city": "string", "state": "string", "zip": "string", "country": "string", "postal_code": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

POST/domains/{domain}/whois/apply

Apply whois profile (path: {domain})Scope: Domains/ApplyWhoisProfile

Apply whois profile (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
profile_id requiredintegerUygulanacak profilin numarası.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422not_actionable, whois_failed, whois_not_supported, whois_rejected
500whois_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/whois/apply' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"profile_id": 1}'
import os, uuid, requests

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

PUT/domains/{domain}/whois-privacy

Update whois privacy (path: {domain})Scope: Domains/UpdateWhoisPrivacy

Update whois privacy (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/alan-adi-kisileri-ve-gizlilik).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
enabled requiredbooleanGizlilik açık mı. Gerçek bir mantıksal değer olmalıdır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, enabled_invalid, not_actionable, privacy_failed, privacy_not_supported, privacy_rejected
500privacy_failed

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/whois-privacy' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true}'
import os, uuid, requests

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

GET/domains/{domain}/email-forwards

List email forwards (path: {domain})Scope: Domains/GetEmailForwards

List email forwards (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/yonlendirme-kurma).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_pending, addon_required, email_forwarding_failed, email_forwarding_not_supported
500email_forwarding_failed

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards", {
  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/domains/{domain}/email-forwards

Create email forward (path: {domain})Scope: Domains/CreateEmailForward

Create email forward (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/yonlendirme-kurma).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
prefix requiredstringAlan adındaki yerel kısım. Yönlendirme bu kısım ile alan adının birleşimine yanıt verir.
target requiredstringHedef posta kutusu. Geçerli bir e-posta adresi olmalıdır.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, email_forward_fields, email_forward_rejected, email_forward_target_invalid, email_forwarding_failed, email_forwarding_not_supported, not_actionable
500email_forwarding_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prefix": "string", "target": "string"}'
import os, uuid, requests

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

DELETE/domains/{domain}/email-forwards

Delete email forward (path: {domain})Scope: Domains/DeleteEmailForward

Delete email forward (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/yonlendirme-kurma).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, email_forward_fields, email_forwarding_failed, email_forwarding_not_supported, not_actionable
500email_forwarding_failed

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/email-forwards", {
  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/domains/{domain}/forwarding

Get url forwarding (path: {domain})Scope: Domains/GetUrlForwarding

Get url forwarding (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/yonlendirme-kurma).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_pending, addon_required, url_forwarding_failed, url_forwarding_not_supported
500url_forwarding_failed

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/domains/1/forwarding' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/domains/1/forwarding", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/forwarding", {
  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/domains/{domain}/forwarding

Update url forwarding (path: {domain})Scope: Domains/UpdateUrlForwarding

Update url forwarding (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/yonlendirme-kurma).

Parameters

FieldinTypeDescription
domain requiredpathstring

Request body

FieldTypeDescription
url requiredstringTam hedef adres. Şeması yönlendirmenin şeması olur; yazılmazsa güvensiz şema kullanılır.
methodintegerYönlendirme türü. Kalıcı olan varsayılandır; başka bir değer ona düşer.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, not_actionable, url_forwarding_failed, url_forwarding_not_supported, url_forwarding_rejected, url_required
500url_forwarding_failed

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/domains/1/forwarding' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "string", "method": 1}'
import os, uuid, requests

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

DELETE/domains/{domain}/forwarding

Delete url forwarding (path: {domain})Scope: Domains/DeleteUrlForwarding

Delete url forwarding (path: {domain}). Domain operations run against the registrar module of the domain.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/yonlendirme-kurma).

Parameters

FieldinTypeDescription
domain requiredpathstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_required, not_actionable, url_forwarding_failed, url_forwarding_not_supported, url_forwarding_rejected
500url_forwarding_failed

Code samples

curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/domains/1/forwarding' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/domains/1/forwarding", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/forwarding", {
  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}`);

POST/domains/{domain}/addons/{key}

Buy domain addon (path: {domain}, {key})Scope: Domains/BuyDomainAddon

Buy domain addon (path: {domain}, {key}). Domain operations run against the registrar module of the domain.

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/sahip-olunan-alan-adlari).

Parameters

FieldinTypeDescription
domain requiredpathstring
key requiredpathstring
Idempotency-Key requiredheaderstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422addon_active, addon_free, addon_not_offered, addon_not_supported, addon_pending, addon_rejected, addon_term_invalid, not_actionable
500addon_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/domains/1/addons/1' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/domains/1/addons/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/domains/1/addons/1", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Idempotency-Key": crypto.randomUUID(),
  },
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

Orders

Preview (quote) and place orders for any product.

GET/orders

List ordersScope: Orders/GetOrders

List orders. Orders of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/musteri-olarak-siparis).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.
statusquerystringDurum süzgeci: bekliyor, işlemde, etkin ya da iptal.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422status_invalid

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/orders' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/orders", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/orders", {
  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/orders

Create orderScope: Orders/CreateOrder

Create order. Orders of the calling account.

Spends money / creates an invoice. Money rules apply (AK-40): "confirm": true in the body, an Idempotency-Key header, account balance only (no stored card), daily limit of paid API operations per account (default 50, operator can override per account/reseller, resets 00:00 Europe/Istanbul); violations answer 422 with [confirm_required], [idempotency_key_required], [balance_only] or [daily_limit] in the message.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/musteri-olarak-siparis).

Parameters

FieldinTypeDescription
Idempotency-Key requiredheaderstring

Request body

FieldTypeDescription
terms requiredbooleanŞartların kabulü. Doğru gönderilmelidir.
items requiredstringitems[]Sipariş satırları. Birden yirmiye kadar.
product_id requiredintegerSipariş edilecek ürünün numarası.
cycle requiredstringÖdeme döngüsü. Ürünün fiyatlı döngülerinden biri olmalıdır.
quantityintegerAdet. Yalnız ürün çoklu alıma izin veriyorsa dikkate alınır.
addonsobjectSeçilen ek hizmetler. Ek hizmet numarasını seçenek numarasına eşler. Ürünün ilk dönemi ücretsiz dahil ettiği ek hizmet gönderilmese de siparişe eklenir. İlk dönem tutarı 0 olur, yenilemeler ek hizmet fiyatından faturalanır ve siparişten çıkarılamaz.
addons_qtyobjectAdetli ek hizmetlerin sayısı.
requirementsobjectÜrünün sorduğu alanların yanıtları. Zorunlu işaretlenen her alan gönderilmelidir.
requirement_filesobjectDosya isteyen alanların içeriği. Kodlanmış içerik olarak gönderilir; adres kabul edilmez.
metricsstringAçılacak ölçümlerin numaraları.
domainobjectSatırın alan adı ekseni. Seçim, ad, alt alan adı kökü ve lisans alanlarını taşır.
couponsstringKupon kodları. Operatörün kendiliğinden uygulanan kuponları da katılır.
billing_profile_idintegerFatura profilinin numarası.
notesstringSipariş notu. Bin karakterden uzunu kırpılır.
paymentobjectpaymentÖdeme kaynağı. Toplam sıfırın üstündeyse zorunludur.
methodstringÖdeme yolu: hesap bakiyesi ya da kayıtlı kart.
card_idintegerÇekilecek kartın numarası. Verilmezse hesabın varsayılan kartı çekilir.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422card_not_chargeable, checkout_blocked, insufficient_balance, no_stored_card, payment_method_restricted, terms_required, verification_required
404not_found

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/orders' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"terms": true, "items": "string", "product_id": 1, "cycle": "string", "quantity": 1, "addons": {}, "addons_qty": {}, "requirements": {}, "requirement_files": {}, "metrics": "string", "domain": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "method": "string", "card_id": 1}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
h["Idempotency-Key"] = str(uuid.uuid4())
r = requests.post("https://www.gyrohosting.com/api/v1/client/orders", headers=h, json={"terms": True, "items": "string", "product_id": 1, "cycle": "string", "quantity": 1, "addons": {}, "addons_qty": {}, "requirements": {}, "requirement_files": {}, "metrics": "string", "domain": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "method": "string", "card_id": 1}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/orders", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({"terms": true, "items": "string", "product_id": 1, "cycle": "string", "quantity": 1, "addons": {}, "addons_qty": {}, "requirements": {}, "requirement_files": {}, "metrics": "string", "domain": {}, "coupons": "string", "billing_profile_id": 1, "notes": "string", "payment": {}, "method": "string", "card_id": 1}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

POST/orders/preview

Preview orderScope: Orders/PreviewOrder

Preview order. Orders of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/musteri-olarak-siparis).

Request body

FieldTypeDescription
items requiredstringitems[]Sipariş satırları. Birden yirmiye kadar; şekli sipariş ucuyla aynıdır.
product_id requiredintegerSipariş edilecek ürünün numarası.
cycle requiredstringÖdeme döngüsü. Ürünün fiyatlı döngülerinden biri olmalıdır.
quantityintegerAdet. Yalnız ürün çoklu alıma izin veriyorsa dikkate alınır.
addonsobjectSeçilen ek hizmetler. Ek hizmet numarasını seçenek numarasına eşler. Ürünün ilk dönemi ücretsiz dahil ettiği ek hizmet gönderilmese de siparişe eklenir. İlk dönem tutarı 0 olur, yenilemeler ek hizmet fiyatından faturalanır ve siparişten çıkarılamaz.
addons_qtyobjectAdetli ek hizmetlerin sayısı.
requirementsobjectÜrünün sorduğu alanların yanıtları. Zorunlu işaretlenen her alan gönderilmelidir.
requirement_filesobjectDosya isteyen alanların içeriği. Kodlanmış içerik olarak gönderilir; adres kabul edilmez.
metricsstringAçılacak ölçümlerin numaraları.
domainobjectSatırın alan adı ekseni. Seçim, ad, alt alan adı kökü ve lisans alanlarını taşır.
couponsstringDenenecek kupon kodları.
billing_profile_idintegerFatura profilinin numarası. Vergi bağlamını belirler; verilmezse varsayılan profil, hesapta kayıtlı profil yoksa hesabın ülkesi kullanılır.
paymentobjectÖdeme bloğu. Verilirse yöntemin komisyonu toplama eklenir; bakiye yeterliliği burada denetlenmez.
methodstring
card_idstring

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422coupon_invalid, cycle_invalid, domain_acquisition_not_here, items_required, product_not_orderable, requirement_missing
404not_found

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/orders/preview' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"items": "string", "product_id": 1, "cycle": "string", "quantity": 1, "addons": {}, "addons_qty": {}, "requirements": {}, "requirement_files": {}, "metrics": "string", "domain": {}, "coupons": "string", "billing_profile_id": 1, "payment": {}, "method": "string", "card_id": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/orders/preview", headers=h, json={"items": "string", "product_id": 1, "cycle": "string", "quantity": 1, "addons": {}, "addons_qty": {}, "requirements": {}, "requirement_files": {}, "metrics": "string", "domain": {}, "coupons": "string", "billing_profile_id": 1, "payment": {}, "method": "string", "card_id": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/orders/preview", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"items": "string", "product_id": 1, "cycle": "string", "quantity": 1, "addons": {}, "addons_qty": {}, "requirements": {}, "requirement_files": {}, "metrics": "string", "domain": {}, "coupons": "string", "billing_profile_id": 1, "payment": {}, "method": "string", "card_id": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/orders/{id}

Get order (path: {id})Scope: Orders/GetOrder

Get order (path: {id}). Orders of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/musteri-olarak-siparis).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/orders/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/orders/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/orders/47466", {
  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}`);

Support tickets

Departments, open, reply, close, reopen, rate, attachments.

GET/tickets/departments

List ticket departmentsScope: Tickets/GetTicketDepartments

List ticket departments. Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422ticket_system_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/tickets/departments' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/tickets/departments", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/tickets/departments", {
  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/tickets/access-groups

List ticket access groupsScope: Tickets/GetTicketAccessGroups

List ticket access groups. Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422ticket_system_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/tickets/access-groups' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/tickets/access-groups", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/tickets/access-groups", {
  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/tickets

List ticketsScope: Tickets/GetTickets

List tickets. Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.
statusquerystringDurum süzgeci. Müşteriye gösterilen durum sözlüğünü kabul eder.
departmentqueryintegerDepartman süzgeci.
searchquerystringKonu, referans ve departman adında arar.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422status_invalid, ticket_system_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/tickets' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/tickets", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/tickets", {
  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/tickets

Create ticketScope: Tickets/CreateTicket

Create ticket. Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Request body

FieldTypeDescription
department_id requiredintegerDepartmanın numarası.
subject requiredstringKonu.
message requiredstringAçılış mesajı. En az beş karakter; düz metindir ve işaretleme ayıklanır.
priorityintegerÖncelik. Verilmezse orta alınır.
service_idintegerTalebi bir hizmete bağlar.
custom_fieldsobjectDepartman alanlarının yanıtları. Alan numarasını değere eşler; kutu tipli alanlar dizi alır.
credentialsstringErişim bilgileri. Her satır bir grup numarası ve alan haritası taşır; mesaja şifreli işlenir.
attachmentsarray<any>Ekler. Kodlanmış içerik olarak gönderilir; adres reddedilir.
encrypt_messagebooleanMesaj gövdesi şifreli saklansın mı.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422access_group_invalid, attachment_invalid, credential_field_required, custom_field_required, department_invalid, message_too_short, subject_required, ticket_rejected, ticket_system_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/tickets' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"department_id": 1, "subject": "string", "message": "string", "priority": 1, "service_id": 1, "custom_fields": {}, "credentials": "string", "attachments": [null], "encrypt_message": true}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/tickets", headers=h, json={"department_id": 1, "subject": "string", "message": "string", "priority": 1, "service_id": 1, "custom_fields": {}, "credentials": "string", "attachments": [None], "encrypt_message": True}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/tickets", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"department_id": 1, "subject": "string", "message": "string", "priority": 1, "service_id": 1, "custom_fields": {}, "credentials": "string", "attachments": [null], "encrypt_message": true}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

GET/tickets/{id}

Get ticket (path: {id})Scope: Tickets/GetTicket

Get ticket (path: {id}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422ticket_system_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/tickets/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/tickets/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/tickets/47466", {
  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/tickets/{id}/reply

Reply ticket (path: {id})Scope: Tickets/ReplyTicket

Reply ticket (path: {id}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
message requiredstringYanıt metni. En az beş karakter.
credentialsstringErişim bilgileri.
attachmentsarray<any>Ekler.
encrypt_messagebooleanGövde şifreli saklansın mı.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422access_group_invalid, attachment_invalid, message_too_short, reply_rejected, ticket_not_open, ticket_system_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/tickets/47466/reply' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message": "string", "credentials": "string", "attachments": [null], "encrypt_message": true}'
import os, uuid, requests

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

POST/tickets/{id}/close

Close ticket (path: {id})Scope: Tickets/CloseTicket

Close ticket (path: {id}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
ratingintegerKapatırken verilen puan. Yalnız talep henüz puansızken işlenir.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422ticket_system_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/tickets/47466/close' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rating": 1}'
import os, uuid, requests

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

POST/tickets/{id}/reopen

Reopen ticket (path: {id})Scope: Tickets/ReopenTicket

Reopen ticket (path: {id}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422ticket_locked, ticket_system_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/tickets/47466/reopen' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

POST/tickets/{id}/rating

Rate ticket (path: {id})Scope: Tickets/RateTicket

Rate ticket (path: {id}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger

Request body

FieldTypeDescription
rating requiredintegerVerilen puan. Birden beşe.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422already_rated, rating_invalid, ticket_system_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/tickets/47466/rating' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rating": 1}'
import os, uuid, requests

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

POST/tickets/{id}/replies/{rid}/rating

Rate ticket reply (path: {id}, {rid})Scope: Tickets/RateTicketReply

Rate ticket reply (path: {id}, {rid}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger
rid requiredpathinteger

Request body

FieldTypeDescription
rating requiredintegerVerilen puan. Birden beşe.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422already_rated, rating_invalid, ticket_system_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/tickets/47466/replies/1/rating' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rating": 1}'
import os, uuid, requests

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

GET/tickets/{id}/attachments/{aid}

Get ticket attachment (path: {id}, {aid})Scope: Tickets/GetTicketAttachment

Get ticket attachment (path: {id}, {aid}). Support ticket of the calling account.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/destek-isteme).

Parameters

FieldinTypeDescription
id requiredpathinteger
aid requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422ticket_system_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/tickets/47466/attachments/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/tickets/47466/attachments/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/tickets/47466/attachments/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}`);

SMS

SMS senders, quote and send.

GET/sms/senders

List sms sendersScope: Sms/GetSmsSenders

List sms senders.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/mesaj-gonderme).

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422sms_api_disabled, sms_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/sms/senders' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/sms/senders", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/sms/senders", {
  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/sms/quote

Quote smsScope: Sms/QuoteSms

Quote sms.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/mesaj-gonderme).

Request body

FieldTypeDescription
sender requiredstringGönderen başlığı. Hesabın etkin başlıklarından biri olmalıdır.
message requiredstringMesaj metni. Parça tavanını aşan metin kırpılır ve kırpıldığı bildirilir.
numbers requiredarray<any>Alıcı numaralar. Uluslararası biçimde; tek bir metin olarak gönderilirse satır, virgül ve noktalı virgülden bölünür.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422message_required, numbers_required, sender_invalid, sms_api_disabled, sms_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/sms/quote' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sender": "string", "message": "string", "numbers": [null]}'
import os, uuid, requests

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

POST/sms/send

Send smsScope: Sms/SendSms

Send sms.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/mesaj-gonderme).

Request body

FieldTypeDescription
sender requiredstringGönderen başlığı. Hesabın etkin başlıklarından biri olmalıdır.
message requiredstringMesaj metni. Parça tavanını aşan metin kırpılır ve kırpıldığı bildirilir.
numbers requiredarray<any>Alıcı numaralar. Uluslararası biçimde; tek bir metin olarak gönderilirse satır, virgül ve noktalı virgülden bölünür.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422insufficient_balance, no_recipients, price_unavailable, send_rejected, sender_invalid, sms_api_disabled, sms_disabled, sms_module_unavailable
500send_failed

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/sms/send' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sender": "string", "message": "string", "numbers": [null]}'
import os, uuid, requests

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

GET/sms/messages

List sms messagesScope: Sms/GetSmsMessages

List sms messages.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/mesaj-gonderme).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422sms_api_disabled, sms_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/sms/messages' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/sms/messages", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/sms/messages", {
  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/sms/messages/{id}

Get sms message (path: {id})Scope: Sms/GetSmsMessage

Get sms message (path: {id}).

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/mesaj-gonderme).

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
404not_found
422sms_api_disabled, sms_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/sms/messages/47466' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/sms/messages/47466", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/sms/messages/47466", {
  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}`);

Affiliate

Affiliate programme.

GET/affiliate

Get affiliateScope: Affiliate/GetAffiliate

Get affiliate.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satis-ortakligi-kazanci).

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422affiliate_disabled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/affiliate' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/affiliate", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/affiliate", {
  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/affiliate/commissions

List affiliate commissionsScope: Affiliate/GetAffiliateCommissions

List affiliate commissions.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satis-ortakligi-kazanci).

Parameters

FieldinTypeDescription
pagequeryintegerKaçıncı sayfa.
limitqueryintegerSayfa başına satır. En çok 100.

Responses

200Success — data: array<object>
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422affiliate_disabled, not_enrolled

Code samples

curl -s 'https://www.gyrohosting.com/api/v1/client/affiliate/commissions' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/affiliate/commissions", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/affiliate/commissions", {
  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/affiliate/enroll

Enroll affiliateScope: Affiliate/EnrollAffiliate

Enroll affiliate.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satis-ortakligi-kazanci).

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422affiliate_disabled

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/affiliate/enroll' \
  -H "Authorization: Bearer $GYRO_TOKEN"
import os, uuid, requests

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

POST/affiliate/withdraw

Withdraw affiliateScope: Affiliate/WithdrawAffiliate

Withdraw affiliate.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satis-ortakligi-kazanci).

Request body

FieldTypeDescription
amount requirednumberİstenen tutar. Alt sınır ile kullanılabilir bakiye arasında olmalıdır.
gateway requiredstringÖdeme yolu. Operatörün sunduklarından biri olmalıdır.
gateway_infostringHedef bilgisi. Kayıtlı bir hedef varsa atlanabilir.
save_defaultbooleanBu hedefi sonraki talepler için kaydet.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422affiliate_disabled, affiliate_disabled_account, amount_invalid, below_minimum, gateway_info_required, gateway_invalid, not_enrolled, withdrawal_pending, withdrawal_rejected

Code samples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/affiliate/withdraw' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount": 1.0, "gateway": "string", "gateway_info": "string", "save_default": true}'
import os, uuid, requests

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

PUT/affiliate/payment-method

Save affiliate payout methodScope: Affiliate/SaveAffiliatePayoutMethod

Save affiliate payout method.

Core WISECP client endpoint (Turkish reference: https://dev.wisecp.com/tr/satis-ortakligi-kazanci).

Request body

FieldTypeDescription
gateway requiredstringÖdeme yolu.
infostringHedef bilgisi. Boş göndermek kaydı siler.

Responses

200Success — data: object
401Missing, invalid or revoked key
403Key lacks the scope, IP not allowed, or feature disabled
422affiliate_disabled, gateway_invalid, not_enrolled

Code samples

curl -s -X PUT 'https://www.gyrohosting.com/api/v1/client/affiliate/payment-method' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"gateway": "string", "info": "string"}'
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.put("https://www.gyrohosting.com/api/v1/client/affiliate/payment-method", headers=h, json={"gateway": "string", "info": "string"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/affiliate/payment-method", {
  method: "PUT",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"gateway": "string", "info": "string"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);