Перейти к содержанию

Баланс и тарифы

Все методы ниже вызываются относительно BASE_GATE с заголовком Authorization: Bearer ..., см. Аутентификация и ключи.

Баланс

Запрос: GET /v1/billing/balance?workspace=<guid>

Параметр запроса workspace обязателен: это GUID рабочей области (workspace), для которой запрашивается баланс.

Ответ 200 — объект JSON со свойствами (имена совпадают с ответом внутренней системы учёта балансов):

Поле Тип Смысл
currency строка Код валюты счёта
availableMinor целое Доступный баланс в минимальных денежных единицах (копейки для RUB и т.п.)
updatedAt строка времени ISO 8601 Время последнего обновления записи учёта

Ответ 404 при отсутствии счёта — JSON с полем описания ошибки по смыслу «акаунт для workspace не найден».

Ответ 500 — JSON с сообщением об внутренней ошибке сервера (детали см. телом ответа в отладке).

Малые единицы (*Minor)

Избегайте деления сумм с плавающей точкой: храните и пересчитывайте в минимальных единицах (центы и аналоги), затем форматируйте только для экрана.

Тарифы (цены)

Запрос: GET /v1/billing/prices

Параметр plan в контракте зарезервирован; если не использован бекендом, он может игнорироваться.

Ответ 200 — объект JSON с массивом items (каждый элемент описывает одну активную связку «модель + тариф»). Имена полей приходят в camelCase. Типичные поля элементов включая тарифную математику:

Поле Комментарий
modelId GUID модели в реестре
provider, name, displayName Строковые свойства описания модели и провайдера
registryEnabled, isActive Признак доступности записи модели и тарифа
inPricePerUnitMultiplierMinor, inUnitMultiplier, inComissThPercent, inMinCommissionPerBlockMinor Входящая часть тарификации (в «малых» суммах и множителях, см. код сервера)
outPricePerUnitMultiplierMinor, outUnitMultiplier, outComissThPercent, outMinCommissionPerBlockMinor Исходящая сторона
updatedAt Время изменения строки тарифа

Точную семантику коэффициентов см. во внутренней документации операций; для клиента API этого достаточно, чтобы отображать список и выбирать расчёт расходов в своём приложении или уточнять детали у поддержки продукта.

Ответ 404 — тарифная конфигурация не найдена (план).

Ответ 500 — внутренняя ошибка.

Примеры

Подставьте TOKEN, BASE_GATE и реальный WORKSPACE_GUID.

import os
import requests

BASE_GATE = os.environ["BASE_GATE"].rstrip("/")
TOKEN = os.environ["TOKEN"]
WORKSPACE_GUID = os.environ["WORKSPACE_GUID"]

headers = {"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"}

bal = requests.get(
    f"{BASE_GATE}/v1/billing/balance",
    params={"workspace": WORKSPACE_GUID},
    headers=headers,
    timeout=30,
)
bal.raise_for_status()
print("Баланс:", bal.json())

prices = requests.get(
    f"{BASE_GATE}/v1/billing/prices",
    headers=headers,
    timeout=60,
)
prices.raise_for_status()
print("Тарифы, элементов:", len(prices.json().get("items", [])))
export BASE_GATE="https://api.theta-cloud.ru"
export TOKEN='...'
export WORKSPACE_GUID='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

curl -sS -G "${BASE_GATE}/v1/billing/balance" \
  --data-urlencode "workspace=${WORKSPACE_GUID}" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Accept: application/json"

curl -sS "${BASE_GATE}/v1/billing/prices" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Accept: application/json"