OpenAPI Türkçe gyrohosting.com ↗

One-click apps

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

#GET/cloud/apps

List installable appsScope: services_readlistAppsOpenAPI for this operation

Responses

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

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/apps' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro api request GET /cloud/apps
# data source gyro_apps: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/data-sources/apps
# All one-click apps
data "gyro_apps" "all" {}

# Apps listed under "Popular in Türkiye" that run on Ubuntu 24.04
data "gyro_apps" "popular" {
  popular_tr = true
  os         = "ubuntu-24.04"
}

output "popular_app_ids" {
  value = [for a in data.gyro_apps.popular.apps : a.id]
}
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_readgetAppInstallOpenAPI for this operation

Since 2.7.0 also stuck (open but silent for too long), stuck_reason (no_callback = the server never reported back), last_update_at, attempt, can_retry, error_code, step_text. Live log: GET /cloud/servers/{id}/app/log.

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

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/servers/12345/app' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro server app get 12345
# resource gyro_app_install: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/app_install
# WARNING: installing an app rebuilds the server disk
resource "gyro_app_install" "wp" {
  server_id = tonumber(gyro_server.web.id)
  app       = "wordpress"
  domain    = "blog.example.com"
  email     = "[email protected]"
}
import os, uuid, requests

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

2.19.1: also on tr-ist-1 (Gyro Cloud Istanbul) servers. Equivalent to POST /cloud/servers/{id}/actions/rebuild with app.

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

Examples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/12345/app' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"app": "wordpress", "domain": "blog.example.com", "email": "[email protected]", "confirm": true}'
gyro server app create 12345 --help    # all flags
# resource gyro_app_install: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/app_install
# WARNING: installing an app rebuilds the server disk
resource "gyro_app_install" "wp" {
  server_id = tonumber(gyro_server.web.id)
  app       = "wordpress"
  domain    = "blog.example.com"
  email     = "[email protected]"
}
import os, uuid, requests

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

#GET/cloud/servers/{id}/app/log

Live progress log of the latest app install (step changes, server log tail)Scope: cloud_readgetAppInstallLogOpenAPI for this operation

Lines with id greater than after, oldest first (poll with the last id you have). source is step, server, system or staff. Server lines are untrusted text sent by the server (secrets masked); render them as plain text.

Parameters

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

Responses

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

Examples

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

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

#POST/cloud/servers/{id}/app/retry

Retry a failed or silent app install (rebuilds the disk; confirm required; 3 per server per hour)Scope: cloud_writeretryAppInstallOpenAPI for this operation

Allowed when the latest install has status hata (failed) or stuck = true (no news for too long). On cloud servers the server is rebuilt with the same app, OS and domain; ALL data on the disk is deleted.

Parameters

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

Request body

FieldTypeDescription
confirm requiredboolean = true

Responses

202Started (install_id, attempt)
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

Examples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/servers/12345/app/retry' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
gyro server app retry 12345 --help    # all flags
import os, uuid, requests

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