Биллинг
Базовая модель
Стоимость считается в рублях, балансе ключа. Поток:
- Ты делаешь
POST /generate— мы оцениваем стоимость и резервируем (hold) её на балансе. - Если баланса не хватает —
402 Payment Required, задача не создаётся. - Если хватает — задача создаётся, баланс уменьшается, в очередь уходит сообщение.
- При
failed— стоимость возвращается на ключ автоматически. - При
completed— стоимость списана окончательно.
balance: 1000₽ │ │ POST /generate (Veo-3-fast, 8s → 40₽) ▼balance: 960₽ [hold] │ ├──── task completes → balance остаётся 960₽ │ └──── task fails → balance возвращается к 1000₽Виды биллинга
В зависимости от модели стоимость считается одним из трёх способов:
1. Фиксированная цена за генерацию
Большинство моделей (image, многие video). В прайс-листе для модели указана цена за один запрос — её и резервируем. Цена видна заранее в каталоге.
Пример: Nano-Banana — 5₽ за изображение, всегда.
2. Цена × длительность видео
Применяется к Kling-семейству. В каталоге цена дана за секунду, hold = цена × duration параметр запроса.
Пример: Kling v2.1 Pro — 12₽/сек, запрашиваешь 10-секундный клип → hold 120₽.
Список моделей с per-second биллингом:
kling-v2.6,kling-v2.5-standard,kling-v2.5-prokling-v2.1-standard,kling-v2.1-pro,kling-v2.1-masterkling-o1,kling-o1-editkling-v2.6-motion-720p,kling-v2.6-motion-1080pkling-o3,kling-o3-pro,kling-v3,kling-v3-pro
3. По токенам с post-reconcile (только Seedance)
ByteDance-провайдер биллит Seedance по фактическим completion_tokens, которые становятся известны только после завершения генерации. Поэтому:
- При создании задачи мы оцениваем worst-case (максимум по разрешению × длительности × FPS) и резервируем эту сумму.
- После завершения провайдер возвращает фактические токены.
- Мы пересчитываем реальную стоимость и возвращаем переплату на ключ.
Пример: запрашиваешь Seedance 2.0 на 5 секунд в 1080p с reference-видео. Worst-case = 80₽, hold = 80₽. Фактически получилось 62₽ — возвращаем 18₽ на ключ автоматически.
Персональные цены
Для крупных клиентов админ может назначить персональную цену на конкретные модели — она применяется поверх дефолтной. Кастомные цены видны в профиле клиента в админке.
Если у тебя есть персональная цена — она показывается в result ответа на /me/keys. Через панель panel.nexusapi.dev self-service вариант появится позже.
Что происходит при провале
Когда задача переходит в failed:
- Запрос провайдеру не успел, или ответ — ошибка.
- Сумма hold’а возвращается на тот же ключ, с которого создавали.
- В
error— человекочитаемое описание (см. Ошибки). - В метриках
nexus_tasks_finished_total{status="failed"}иnexus_refunds_total{reason="task_failed"}отметка о возврате.
То есть за провалы ты не платишь. Это касается всех типов ошибок: и сетевых проблем у провайдера, и rejected-промптов, и моделей, которые отказались генерить из-за safety-фильтра.
Где смотреть свои списания
- Dashboard — суммарно за 30 дней, разбивка по моделям, общая сумма
- API ключи — баланс каждого ключа, сколько потрачено LTV
- Запросы (логи) — каждая задача с моделью и стоимостью
- Биллинг — история транзакций (топ-апы, корректировки админа)