Документация

Баланс и расход

Как считается счёт

При постановке задачи шлюз удерживает кредиты по запрошенному варианту модели, а когда задача завершилась — списывает фактический расход, о котором сообщил поставщик; разница возвращается на баланс. Задача, закончившаяся состоянием fail, не тарифицируется: всё удержание возвращается целиком. Списанное видно в поле creditsConsumed ответа о состоянии задачи. Цена каждой модели по вариантам — на её странице в каталоге, а условия пополнения — в блоке цен.

Спросить по ключу

Те же цифры, что показывает кабинет, отдают три адреса — по тому же ключу sk-…, что и генерация. Они нужны программе, а не человеку: пакетную генерацию останавливают по остатку на балансе, а не открыв кабинет глазами.

GET https://api.gen202.com/v1/account
GET https://api.gen202.com/v1/usage
GET https://api.gen202.com/api/v1/jobs/recordInfos

Баланс: /v1/account

Отвечает объектом без конверта — форма кабинета, не форма задач. Кредиты приходят строками, потому что считаются точными числами, а не с плавающей точкой.

ПолеТипЧто в нём
email строка Почта аккаунта, которому принадлежит ключ.
balance строка Сколько кредитов на балансе всего, включая удержанные.
reserved строка Сколько кредитов удержано под задачи и запросы, которые ещё не завершились.
available строка Свободные кредиты: баланс за вычетом удержания. Именно с ними сравнивается удержание под новый запрос.
is_admin да или нет Служебный признак кабинета; клиенту не нужен.

Расход: /v1/usage

Сводка по последним 1000 запросам аккаунта: сколько всего списано, разбивка по дням и по адресам. Глубина ограничена нарочно — полный пересчёт по всей истории рос бы вместе с аккаунтом.

ПолеТипЧто в нём
total_requests число Сколько запросов попало в сводку.
total_credits число Сколько кредитов по ним списано всего.
by_endpoint список Разбивка по адресам: { endpoint, credits }, от дорогого к дешёвому.
by_day список Разбивка по дням: { day, credits }, от раннего дня к позднему. День — дата по UTC.

Свои задачи: /api/v1/jobs/recordInfos

Список своих задач в конверте задач {code, msg, data}, где в data.tasks лежат те же записи, что отдаёт recordInfo, а data.hasMore говорит, есть ли следующая страница. Пригодится, когда номера задач у себя не сохранены: по нему видно, чем закончились последние. Предел частоты — 60 запросов в минуту на ключ; это не замена опросу состояния, а страница истории.

ПараметрТипЧто делает
state значение из списка Отбор по состоянию: waiting, queuing, generating, success или fail. Другое значение — отказ 422.
limit целое число Сколько задач вернуть. Без него — 20, больше 100 маршрут не отдаёт.
afterTaskId строка Номер последней задачи предыдущей страницы: следующая страница начинается за ней.
account.sh
# сколько кредитов свободно прямо сейчас
curl -s https://api.gen202.com/v1/account \
  -H "Authorization: Bearer sk-ваш-ключ" | jq '.available'

# расход по дням и по адресам
curl -s https://api.gen202.com/v1/usage \
  -H "Authorization: Bearer sk-ваш-ключ" | jq '.by_day, .by_endpoint'

# последние 20 задач; больше 100 за раз не отдаётся
curl -s "https://api.gen202.com/api/v1/jobs/recordInfos?state=success&limit=20" \
  -H "Authorization: Bearer sk-ваш-ключ" | jq '.data.tasks[] | {taskId, model, creditsConsumed}'