Биллинг
Баланс — в рублях, decimal. Минимальная единица учёта — 0.0001 ₽: внутри биллинг-движок работает с целыми «units» (1 ₽ = 10 000 units), API-ответы конвертируются обратно в ₽ с дробью. Цены в каталоге (priceRub) могут быть меньше рубля и списываются точно — никакого пола в 1 ₽ нет.
Как тратится баланс
- Списание происходит атомарно при
POST /runилиPOST /queue/{modelId}— точно поpriceRub × quantityс учётом скидки (округление вверх до 0.0001 ₽). Если на балансе меньше — приходит402 insufficient_balance, генерация не запускается. - Возврат — автоматически при ошибке генерации, той же суммой.
- Сверка по факту — для моделей с динамической ценой (per-second video, per-megapixel image) точное списание уточняется после генерации; разница возвращается отдельной транзакцией. Микроразницы ≤ 0.01 ₽ игнорируются — не плодим шумные транзакции.
Все движения видны в GET /me/transactions. Тип каждой записи — один из topup, deduct, refund, grant.
Проверить баланс
curl https://api.neuroartist.ru/me/balance \
-H "Authorization: Bearer na_live_xxxxxxxxxxxxxxxx"
# {"userId":"u_…","balance":248.5}balance — текущий остаток в ₽ (decimal). Минимальная значимая дробь — 0.0001 ₽.
Оценка стоимости перед запуском
curl -X POST https://api.neuroartist.ru/models/flux/dev/estimate \
-H "Authorization: Bearer na_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"prompt":"…","num_inference_steps":28}'{
"modelId": "flux/dev",
"modelAlias": "flux/dev",
"estimatedCostRub": 8.0,
"estimatedPriceRub": 8.0,
"priceUnit": "image",
"quantity": 1,
"currency": "RUB"
}| Поле | Что |
|---|---|
estimatedCostRub | Сколько спишется при submit, в ₽ (decimal, минимум 0.0001 ₽). |
estimatedPriceRub | Цена за единицу до округления. Совпадает с estimatedCostRub, если в input ровно 1 единица. |
priceUnit | Единица измерения цены — image, second, megapixel, request, 1k_chars. |
quantity | Сколько единиц получится при текущем input-е. |
Пополнение
Делается в дашборде gateway.neuroartist.ru → Биллинг → Пополнить.
- Минимальная сумма — 500 ₽ (
MIN_TOPUP_RUB). Меньше нельзя. - Оплата через YooKassa, чек 54-ФЗ формируется автоматически.
- После успешной оплаты карта сохраняется (
payment_method_idот YooKassa, с маской PAN) — чтобы не вводить реквизиты повторно и для авто-пополнения.
Авто-пополнение
Когда баланс падает ниже заданного порога, мы автоматически списываем фиксированную сумму с сохранённой карты — чтобы вы не получили 402 insufficient_balance посреди пайплайна. Срабатывает в момент попытки списания за генерацию, не чаще одного раза в минуту на пользователя (защита от дублей).
В дашборде → Биллинг → Авто-пополнение:
| Поле | Диапазон |
|---|---|
thresholdRub | ≥ AUTO_TOPUP_MIN_THRESHOLD_RUB (10 ₽) |
amountRub | от AUTO_TOPUP_MIN_AMOUNT_RUB (50 ₽) до AUTO_TOPUP_MAX_AMOUNT_RUB (10 000 ₽) |
| Default-карта | Обязательно. Без неё авто-пополнение не сработает. |
Если списание не прошло (карта отклонена, нет default-метода) — обычная ошибка 402 insufficient_balance на текущем submit + email-уведомление.
История платежей
curl https://api.neuroartist.ru/billing/payments \
-H "Authorization: Bearer na_live_xxxxxxxxxxxxxxxx"Возвращает список с id, yookassaId, status, creditsToGrantRub (сумма зачисления в ₽, с учётом промо-бонуса если был), amountKopecks, currency, createdAt.
Чеки 54-ФЗ и PDF-выписки — в дашборде → Биллинг → История.
Welcome-бонус и уведомление о низком балансе
- Welcome-бонус — 50 ₽ при регистрации (
WELCOME_BONUS_RUB). - При просадке ниже 100 ₽ (
LOW_BALANCE_THRESHOLD_RUB) — email-уведомление, не чаще раза в 24 часа. Отписаться:PATCH /me { "lowBalanceEmailOptOut": true }или флажок в дашборде.
Дальше
/billingв справочнике — точные схемы платежей.- Коды ошибок — обработка
insufficient_balance,minimum_topup,payment_provider.