OpenAPI Türkçe gyrohosting.com ↗

Billing

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

#GET/invoices

List invoicesScope: Invoices/GetInvoiceslistInvoicesOpenAPI for this operation

Parameters

FieldinTypeDescription
statusquerystringunpaid, paid, cancelled, refund
pagequeryinteger
limitqueryinteger

Responses

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

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/invoices' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro invoice list
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/GetInvoicegetInvoiceOpenAPI for this operation

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

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

Examples

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

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

#GET/balance

Account balanceScope: Balance/GetBalancegetBalanceOpenAPI for this operation

Responses

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

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/balance' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro balance
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/GetBalanceTransactionslistBalanceTransactionsOpenAPI for this operation

Parameters

FieldinTypeDescription
pagequeryinteger
limitqueryinteger

Responses

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

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/balance/transactions' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro balance transaction list
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_paypayInvoiceFromBalanceOpenAPI for this operation

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 ...)

Examples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/invoices/12345/pay' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"confirm": true}'
gyro invoice pay 12345 --help    # all flags
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/12345/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/12345/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_readgetInvoicePdfOpenAPI for this operation

Parameters

FieldinTypeDescription
id requiredpathinteger

Responses

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

Examples

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

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

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 ...)

Examples

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}'
gyro balance top-up --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/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/PayInvoicecorePayInvoiceOpenAPI for this operation

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

Examples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/invoices/12345/pay' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"payment": {}, "method": "string", "card_id": 1}'
gyro core invoice pay 12345 --help    # all flags
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/12345/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/12345/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/ApplyInvoiceCouponcoreApplyInvoiceCouponOpenAPI for this operation

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

Examples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/invoices/12345/coupon' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code": "string"}'
gyro invoice coupon 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/invoices/12345/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/12345/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/UpdateBalanceSettingscoreUpdateBalanceSettingsOpenAPI for this operation

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

Examples

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"}'
gyro balance setting update --help    # all flags
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}`);

#GET/cloud/billing/balance

Balance, hourly cost of running prepaid services and estimated time leftScope: billing_readgetPrepaidBalanceOpenAPI for this operation

Prepaid (hourly, from the account balance) services: Gyro Containers (ECS) and Gyro Cloud Istanbul (tr-ist-1). Times are Europe/Istanbul. Usage is never invoiced: invoices are issued for balance top-ups.

Responses

200OK — data: PrepaidBalance
403insufficient_scope | subkey_forbidden

Examples

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

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

Hour-by-hour usage ledger (or daily/monthly totals). Times are Europe/Istanbul.Scope: billing_readlistPrepaidUsageOpenAPI for this operation

Prepaid (hourly, from the account balance) services: Gyro Containers (ECS) and Gyro Cloud Istanbul (tr-ist-1). Times are Europe/Istanbul. Usage is never invoiced: invoices are issued for balance top-ups.

Parameters

FieldinTypeDescription
fromquerystringfirst day (default: 1st of this month)
toquerystringlast day (default: today); at most 400 days
service_idqueryinteger
statusquerystring (ucretli, tavan, kismi, odenmedi, ucretsiz)
granularityquerystring (hour, day, month)
formatquerystring (json, csv)csv = base64 file in data.content_base64 (max 5000 rows)
pagequeryinteger
limitqueryinteger

Responses

200OK (meta = total, page, limit, next_page) — data: object

Examples

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

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

#GET/cloud/billing/statement/{month}

Monthly usage statement (not an invoice); JSON, PDF or CSVScope: billing_readgetPrepaidStatementOpenAPI for this operation

Prepaid (hourly, from the account balance) services: Gyro Containers (ECS) and Gyro Cloud Istanbul (tr-ist-1). Times are Europe/Istanbul. Usage is never invoiced: invoices are issued for balance top-ups.

Parameters

FieldinTypeDescription
month requiredpathstring
formatquerystring (json, pdf, csv)
langquerystring (tr, en)

Responses

200json: totals/by_service/by_day; pdf|csv: filename, content_type, content_base64
422invalid_month

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/billing/statement/1' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro api request GET /cloud/billing/statement/1
import os, uuid, requests

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

Hourly / daily / monthly cost of prepaid plans and serverless containers, and how long the balance lastsScope: billing_readestimatePrepaidCostOpenAPI for this operation

Prepaid (hourly, from the account balance) services: Gyro Containers (ECS) and Gyro Cloud Istanbul (tr-ist-1). Times are Europe/Istanbul. Usage is never invoiced: invoices are issued for balance top-ups. Server and dedicated-node plans: hourly = monthly / 672, capped at the monthly price (capped: true). Serverless containers ({"type": "serverless", "cpu_m": 250, "memory_mi": 512, "count": 2, "hours": 730}): charged by measured use with no monthly cap (capped: false), monthly_cap = a full month (730 hours) of running time, total = hours x hourly (billed_hours = hours). Errors 422: unknown_plan, region_not_prepaid, too_many_items, invalid_cpu, invalid_memory, serverless_not_available.

Request body

FieldTypeDescription
itemsarray<object>
planstringsingle-item shortcut
countinteger
cpu_mintegerserverless single-item shortcut
memory_miinteger
hoursinteger
typestring (serverless)

Responses

200items[], hourly, daily, monthly_cap, eur_rate, balance, hours_covered, order_requires (first 24 h), can_order
422unknown_plan | region_not_prepaid | too_many_items | invalid_cpu | invalid_memory | serverless_not_available

Examples

curl -s -X POST 'https://www.gyrohosting.com/api/v1/client/cloud/billing/estimate' \
  -H "Authorization: Bearer $GYRO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"items": [{"plan": "standart-2-4", "product_id": 1, "region": "tr-ist-1", "count": 1, "type": "serverless", "cpu_m": 250, "memory_mi": 512, "hours": 1}], "plan": "string", "count": 1, "cpu_m": 1, "memory_mi": 1, "hours": 1, "type": "serverless"}'
gyro api request POST /cloud/billing/estimate --data '{"items": [{"plan": "standart-2-4", "product_id": 1, "region": "tr-ist-1", "count": 1, "type": "serverless", "cpu_m": 250, "memory_mi": 512, "hours": 1}], "plan": "string", "count": 1, "cpu_m": 1, "memory_mi": 1, "hours": 1, "type": "serverless"}'
# data source gyro_prepaid_estimate: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/data-sources/prepaid_estimate
# What would two 0.5 vCPU / 1 GB serverless containers and one Istanbul server cost?
data "gyro_prepaid_estimate" "stack" {
  items = [
    { cpu_m = 500, memory_mi = 1024, count = 2, hours = 730 },
    { plan = "standart-2-4" },
  ]
}

output "monthly" {
  value = "${data.gyro_prepaid_estimate.stack.monthly} ${data.gyro_prepaid_estimate.stack.currency}"
}
import os, uuid, requests

h = {"Authorization": "Bearer " + os.environ["GYRO_TOKEN"]}
r = requests.post("https://www.gyrohosting.com/api/v1/client/cloud/billing/estimate", headers=h, json={"items": [{"plan": "standart-2-4", "product_id": 1, "region": "tr-ist-1", "count": 1, "type": "serverless", "cpu_m": 250, "memory_mi": 512, "hours": 1}], "plan": "string", "count": 1, "cpu_m": 1, "memory_mi": 1, "hours": 1, "type": "serverless"}, timeout=60)
r.raise_for_status()
print(r.json()["data"])
const res = await fetch("https://www.gyrohosting.com/api/v1/client/cloud/billing/estimate", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GYRO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"items": [{"plan": "standart-2-4", "product_id": 1, "region": "tr-ist-1", "count": 1, "type": "serverless", "cpu_m": 250, "memory_mi": 512, "hours": 1}], "plan": "string", "count": 1, "cpu_m": 1, "memory_mi": 1, "hours": 1, "type": "serverless"}),
});
const { data, error } = await res.json();
if (!res.ok) throw new Error(`${error.code}: ${error.message}`);

#GET/cloud/billing/topup-url

Browser link of the balance top-up page (top-ups are invoiced with VAT; usage is not)Scope: billing_readgetPrepaidTopupUrlOpenAPI for this operation

Prepaid (hourly, from the account balance) services: Gyro Containers (ECS) and Gyro Cloud Istanbul (tr-ist-1). Times are Europe/Istanbul. Usage is never invoiced: invoices are issued for balance top-ups.

Responses

200url, minimum

Examples

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

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

Serverless container sizes (vCPU / memory pairs) and pricesScope: billing_readgetContainerSizesOpenAPI for this operation

Gyro Containers Serverless bills each running container copy per hour: cpu_m/1000 x vCPU-hour + memory_mi/1024 x GB-hour, from the prepaid balance, no monthly cap. Only the cpu_m / memory_mi pairs listed here are accepted on POST /cloud/containers/{id}/services of a serverless environment (422 invalid_cpu / invalid_memory). 404 serverless_not_available when the product is not offered.

Responses

200Sizes — data: ContainerSizes
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

Examples

curl -s 'https://www.gyrohosting.com/api/v1/client/cloud/billing/container-sizes' \
  -H "Authorization: Bearer $GYRO_TOKEN"
gyro container sizes
# data source gyro_container_sizes: https://registry.terraform.io/providers/gyro-hosting/gyro/latest/docs/data-sources/container_sizes
# Serverless container sizes (vCPU / memory pairs) and prices
data "gyro_container_sizes" "all" {}

output "smallest" {
  value = {
    cpu_m     = data.gyro_container_sizes.all.sizes[0].cpu_m
    memory_mi = data.gyro_container_sizes.all.sizes[0].memory_mi[0]
    eur_hour  = data.gyro_container_sizes.all.sizes[0].hourly_eur_min
  }
}
import os, uuid, requests

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