Docs API reference Support, resellers and partners Reseller 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 settings Scope: reseller getResellerSettings OpenAPI for this operation
Responses 200 Settings — data: ResellerSettings 403 Key lacks the scope, IP not allowed, or feature disabled
Examples curl CLI Python JavaScript
Copy curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/settings' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller setting getCopy 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"])Copy 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 saveResellerSettings OpenAPI for this operation
Request body Field Type Description white_labelboolean
Responses 200 Settings — data: ResellerSettings 403 Key lacks the scope, IP not allowed, or feature disabled
Examples curl CLI Python JavaScript
Copy 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}'Copy gyro reseller setting set --help # all flagsCopy 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"])Copy 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-customer Scope: reseller resellerReport OpenAPI for this operation
Parameters Field in Type Description fromquery string toquery string
Responses 200 Report — data: ResellerReport 403 Key lacks the scope, IP not allowed, or feature disabled
Examples curl CLI Python JavaScript
Copy curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/report' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller report getCopy 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"])Copy 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 assignService OpenAPI for this operation
Request body Field Type Description service_id required integer customer_id required integer
Responses 200 Assignment — data: object 404 Not found — also returned for objects owned by someone else
Examples curl CLI Python JavaScript
Copy 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}'Copy gyro reseller assign --help # all flagsCopy 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"])Copy 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-customers Scope: reseller listResellerCustomers OpenAPI for this operation
Parameters Field in Type Description external_refquery string pagequery integer limitquery integer
Responses 200 Customers — data: array<EndCustomer> 403 Key lacks the scope, IP not allowed, or feature disabled
Examples curl CLI Terraform Python JavaScript
Copy curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller customer listCopy # resource gyro_reseller_customer: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/reseller_customer
# Reseller (bayi) accounts only
resource "gyro_reseller_customer" "acme" {
name = "Acme Ltd"
external_ref = "acme-001"
allow_order = true # Acme's keys may order servers, paid from YOUR balance at your discount
}Copy 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"])Copy 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-customer Scope: reseller createResellerCustomer OpenAPI for this operation
Request body Field Type Description namestring emailstring external_refstring Your own customer id (unique per reseller) notestring statusstring (active, suspended) allow_orderboolean May this customer's keys order servers (paid from YOUR balance)?
Responses 201 Created — data: EndCustomer 409 State conflict (server_locked, not_actionable, ssh_key_exists, server_limit, idempotency_in_flight) 422 Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)
Examples curl CLI Terraform Python JavaScript
Copy 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}'Copy gyro reseller customer create --help # all flagsCopy # resource gyro_reseller_customer: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/reseller_customer
# Reseller (bayi) accounts only
resource "gyro_reseller_customer" "acme" {
name = "Acme Ltd"
external_ref = "acme-001"
allow_order = true # Acme's keys may order servers, paid from YOUR balance at your discount
}Copy 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"])Copy 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-customer Scope: reseller getResellerCustomer OpenAPI for this operation
Parameters Field in Type Description id required path integer
Responses 200 Customer — data: EndCustomer 404 Not found — also returned for objects owned by someone else
Examples curl CLI Terraform Python JavaScript
Copy curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller customer get 12345Copy # resource gyro_reseller_customer: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/reseller_customer
# Reseller (bayi) accounts only
resource "gyro_reseller_customer" "acme" {
name = "Acme Ltd"
external_ref = "acme-001"
allow_order = true # Acme's keys may order servers, paid from YOUR balance at your discount
}Copy import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])Copy const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/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}`);# PATCH /cloud/reseller/customers/{id} Update an end-customer (suspend = its keys stop working) Scope: reseller updateResellerCustomer OpenAPI for this operation
Parameters Field in Type Description id required path integer
Request body Field Type Description namestring emailstring external_refstring Your own customer id (unique per reseller) notestring statusstring (active, suspended) allow_orderboolean May this customer's keys order servers (paid from YOUR balance)?
Responses 200 Customer — data: EndCustomer 404 Not found — also returned for objects owned by someone else
Examples curl CLI Terraform Python JavaScript
Copy curl -s -X PATCH 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345' \
-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}'Copy gyro reseller customer update 12345 --help # all flagsCopy # resource gyro_reseller_customer: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/reseller_customer
# Reseller (bayi) accounts only
resource "gyro_reseller_customer" "acme" {
name = "Acme Ltd"
external_ref = "acme-001"
allow_order = true # Acme's keys may order servers, paid from YOUR balance at your discount
}Copy import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.patch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345", 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"])Copy const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345", {
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 deleteResellerCustomer OpenAPI for this operation
Parameters Field in Type Description id required path integer confirm required query boolean
Responses 200 Deleted 404 Not found — also returned for objects owned by someone else 422 Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)
Examples curl CLI Terraform Python JavaScript
Copy curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller customer delete 12345Copy # resource gyro_reseller_customer: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/resources/reseller_customer
# Reseller (bayi) accounts only
resource "gyro_reseller_customer" "acme" {
name = "Acme Ltd"
external_ref = "acme-001"
allow_order = true # Acme's keys may order servers, paid from YOUR balance at your discount
}Copy import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])Copy const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/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}`);# GET /cloud/reseller/customers/{id}/keys List an end-customer's keys Scope: reseller listResellerCustomerKeys OpenAPI for this operation
Parameters Field in Type Description id required path integer
Responses 200 Keys — data: array<ApiKey> 404 Not found — also returned for objects owned by someone else
Examples curl CLI Python JavaScript
Copy curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/keys' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller customer key list 12345Copy import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.get("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/keys", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])Copy const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/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 createResellerCustomerKey OpenAPI for this operation
Parameters Field in Type Description id required path integer
Request body Field Type Description name required string 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_limitinteger Requests per minute (<= your own limit; 0 = default)
Responses 201 Created — data: object 404 Not found — also returned for objects owned by someone else 422 Validation or business rule failure (confirm_required, invalid_image, tool_action_failed ...)
Examples curl CLI Python JavaScript
Copy curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/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}'Copy gyro reseller customer key create 12345 --help # all flagsCopy import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/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"])Copy const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/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 key Scope: reseller deleteResellerCustomerKey OpenAPI for this operation
Parameters Field in Type Description id required path integer kid required path integer
Responses 200 Deleted 404 Not found — also returned for objects owned by someone else
Examples curl CLI Python JavaScript
Copy curl -s -X DELETE 'https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/keys/1' \
-H "Authorization: Bearer $GYRO_TOKEN"Copy gyro reseller customer key delete 12345Copy import os, uuid, requests
h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.delete("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/keys/1", headers=h, timeout=60)
r.raise_for_status()
print(r.json()["data"])Copy const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/reseller/customers/12345/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}`);