Group your services into projects (e.g. one per business, client or environment). Every service is in exactly one project; services without one are in the default project (id 0). Invoices are not split by project.
# resource gyro_project: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/project
# A project per business / client / environment. Destroying it only deletes the project:
# its services go back to the default project (id 0).
resource "gyro_project" "gyroproje" {
name = "Gyro Proje"
description = "Web + API + CDN"
color = "blue"
icon = "rocket-takeoff"
}
# New servers and load balancers can be ordered straight into a project.
resource "gyro_server" "web" {
plan = "standart-2-4"
region = "tr-ist-1"
image = "ubuntu-24.04"
confirm_order = true
project_id = tonumber(gyro_project.gyroproje.id)
}
import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/projects", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/projects", {
method: "GET",
headers: {
"Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
},
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);
# resource gyro_project: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/project
# A project per business / client / environment. Destroying it only deletes the project:
# its services go back to the default project (id 0).
resource "gyro_project" "gyroproje" {
name = "Gyro Proje"
description = "Web + API + CDN"
color = "blue"
icon = "rocket-takeoff"
}
# New servers and load balancers can be ordered straight into a project.
resource "gyro_server" "web" {
plan = "standart-2-4"
region = "tr-ist-1"
image = "ubuntu-24.04"
confirm_order = true
project_id = tonumber(gyro_project.gyroproje.id)
}
# resource gyro_project: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/project
# A project per business / client / environment. Destroying it only deletes the project:
# its services go back to the default project (id 0).
resource "gyro_project" "gyroproje" {
name = "Gyro Proje"
description = "Web + API + CDN"
color = "blue"
icon = "rocket-takeoff"
}
# New servers and load balancers can be ordered straight into a project.
resource "gyro_server" "web" {
plan = "standart-2-4"
region = "tr-ist-1"
image = "ubuntu-24.04"
confirm_order = true
project_id = tonumber(gyro_project.gyroproje.id)
}
import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/projects/12345", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/projects/12345", {
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}`);
Send any of name, description, color, icon. The default project cannot be changed (409 default_project). Writes: 60 per minute per key (429 rate_limited). Sub-account keys cannot create, rename or delete projects (403 subkey_forbidden).
Parameters
Field
in
Type
Description
idrequired
path
integer
Project id (0 = default project)
Request body
Field
Type
Description
name
string
Letter or digit first; then letters, digits, space and . _ - / + # & ( ). Unique per account (case-insensitive). Reserved: Genel, General, Default.
# resource gyro_project: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/project
# A project per business / client / environment. Destroying it only deletes the project:
# its services go back to the default project (id 0).
resource "gyro_project" "gyroproje" {
name = "Gyro Proje"
description = "Web + API + CDN"
color = "blue"
icon = "rocket-takeoff"
}
# New servers and load balancers can be ordered straight into a project.
resource "gyro_server" "web" {
plan = "standart-2-4"
region = "tr-ist-1"
image = "ubuntu-24.04"
confirm_order = true
project_id = tonumber(gyro_project.gyroproje.id)
}
Only the project is deleted: its services go back to the default project, nothing else changes. Writes: 60 per minute per key (429 rate_limited). Sub-account keys cannot create, rename or delete projects (403 subkey_forbidden).
Parameters
Field
in
Type
Description
idrequired
path
integer
Project id (0 = default project)
Responses
200
Deleted — data: object
409
default_project
401
Missing, invalid or revoked key
403
Key lacks the scope, IP not allowed, or feature disabled
404
Not found — also returned for objects owned by someone else
429
Too many requests (rate_limited); see the Retry-After and X-RateLimit-* headers
# resource gyro_project: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/project
# A project per business / client / environment. Destroying it only deletes the project:
# its services go back to the default project (id 0).
resource "gyro_project" "gyroproje" {
name = "Gyro Proje"
description = "Web + API + CDN"
color = "blue"
icon = "rocket-takeoff"
}
# New servers and load balancers can be ordered straight into a project.
resource "gyro_server" "web" {
plan = "standart-2-4"
region = "tr-ist-1"
image = "ubuntu-24.04"
confirm_order = true
project_id = tonumber(gyro_project.gyroproje.id)
}
import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/projects/12345", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/projects/12345", {
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}`);
All ids must be your services within the key's scope, else 404 service_not_found and nothing moves. Up to 500 per call; id 0 = default project. Sub-account keys need the project:move action. Writes: 60 per minute per key (429 rate_limited).
Parameters
Field
in
Type
Description
idrequired
path
integer
Project id (0 = default project)
Request body
Field
Type
Description
service_idsrequired
array<integer>
Responses
200
Moved — data: object
401
Missing, invalid or revoked key
403
Key lacks the scope, IP not allowed, or feature disabled
404
Not found — also returned for objects owned by someone else
429
Too many requests (rate_limited); see the Retry-After and X-RateLimit-* headers
# resource gyro_project: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/project
# A project per business / client / environment. Destroying it only deletes the project:
# its services go back to the default project (id 0).
resource "gyro_project" "gyroproje" {
name = "Gyro Proje"
description = "Web + API + CDN"
color = "blue"
icon = "rocket-takeoff"
}
# New servers and load balancers can be ordered straight into a project.
resource "gyro_server" "web" {
plan = "standart-2-4"
region = "tr-ist-1"
image = "ubuntu-24.04"
confirm_order = true
project_id = tonumber(gyro_project.gyroproje.id)
}