Оплата
Оплата SpicyAPI по использованию в USD: расчёт цены, резерв средств, итоговые списания, условия отказов моделей, пополнение, лимиты расходов и счета.
Деньги, а не баллы
Цены указаны в долларах США: «$0.008 за изображение», «$0.042 за секунду результата». Предоплаченные средства, промо-средства и кредитные линии выражены в долларах, но кредитный лимит не является денежным балансом.
Мы намеренно не используем баллы. Система баллов добавляет пересчёт между «пополните на X, получите бонус Y» и стоимостью одного балла, что затрудняет вычисление реальной цены за единицу. Показанная цена — та, которую вы платите.
Как устроена оплата
- Сначала пополните баланс. Новый аккаунт начинает с $0; бесплатного тарифа нет. Задача, отправленная до пополнения, отклоняется с
40201и ничего не стоит. - При принятии задачи её оценочная стоимость резервируется. Это резерв. Деньги по-прежнему ваши, но одновременно оплатить другую задачу ими нельзя.
- Если задача успешна, вы платите за фактическое использование, не больше резерва. Остаток возвращается в доступный баланс.
- Неудавшиеся или просроченные задачи обычно освобождают весь резерв. Некоторые отказы по содержанию оплачиваются по принятому расчёту только если страница модели явно раскрывает это исключение. Проверяйте
settledиcostдля итогового списания. - Лимиты расходов, заданные для каждого API-ключа, не дают неконтролируемому скрипту опустошить баланс.
Ниже каждый шаг объясняется подробнее.
Пополнение баланса
Пополняйте баланс в разделе Оплата консоли: картой, криптовалютой или ручным переводом, если эта возможность показана. Можно включить автопополнение, чтобы длительные задачи не останавливались при низком балансе. Оплаченный баланс не истекает; промо-средства истекают в дату, указанную в разделе Оплата.
Пошаговое описание способов оплаты, сроков зачисления и автопополнения — в разделе Настройка аккаунта. Обычно пополнение нельзя вернуть денежным переводом; политика возврата перечисляет исключения, например повторное списание.
Три этапа
Каждая задача проходит одинаковые три этапа оплаты. От вас действий не требуется; описание помогает уверенно читать историю баланса.
holdsettlereleaseРезерв
При создании задачи мы резервируем средства на оценочный объём использования. Сумма точно равна estimatedCost, возвращённой createTask.
Резерв закрепляет за задачей её источники финансирования; это не окончательное списание. Зарезервированные предоплаченные средства, подходящие промо-средства или одобренный кредит нельзя одновременно использовать для другой задачи. Сумма показана как held в GET /api/v1/chat/credit и как «В резерве» в консоли.
Резерв и запись задачи создаются в одной транзакции базы данных. Промежуточного состояния, где задача существует без резерва или наоборот, нет.
Расчёт или освобождение средств
succeeded→ расчёт по фактическому использованию, не выше принятого резерва. Неиспользованные средства возвращаются в исходные источники финансирования; позднее сверх этого резерва ничего не списывается.failed/expired→ обычно полное освобождение средств. Страница модели может явно указывать, что определённые ошибкиcontent_rejectedоплачиваются по принятому расчёту. Исторические записиcanceledтакже полностью освобождают средства, но сейчас принятые задачи отменить нельзя.
После завершения расчёта recordInfo показывает settled: true, и cost становится итоговым. Пока settled равно false, cost ещё может меняться.
Фоновая сверка
Если наш процесс завершился аварийно во время выполнения, фоновая процедура находит резервы задач, уже достигших конечного состояния, и завершает расчёт или освобождение средств по записанному результату.
Расчёт и освобождение используют общий ключ дедупликации, поэтому платёжный цикл задачи завершается ровно один раз — повторы не могут провести операцию дважды.
Проверяйте расчёт, а не только состояние задачи
Неудавшиеся или просроченные задачи обычно освобождают весь резерв. Некоторые отказы по содержанию оплачиваются по принятому расчёту только если страница модели явно раскрывает это исключение. Проверяйте settled и cost для итогового списания. Оплаченный отказ сохраняет state: "failed" с errorCode: "content_rejected"; после расчёта settled равно true, а cost положителен. Другие ошибки и просроченные задачи автоматически освобождают весь резерв.
Проверка баланса
Самый быстрый способ — страница Оплата в консоли: она показывает доступный баланс, текущий резерв и все движения средств. Из кода вызывайте:
GET /api/v1/chat/creditcurl https://api.spicyapi.ai/api/v1/chat/credit \
-H "Authorization: Bearer $SPICY_API_KEY"const res = await fetch('https://api.spicyapi.ai/api/v1/chat/credit', {
headers: { Authorization: `Bearer ${process.env.SPICY_API_KEY}` },
});
const body = await res.json();
if (body.code !== 200) throw new Error(`${body.code} ${body.msg}`);
const balance = body.data;
console.log(balance.funding ?? balance);import os, requests
res = requests.get(
"https://api.spicyapi.ai/api/v1/chat/credit",
headers={"Authorization": f"Bearer {os.environ['SPICY_API_KEY']}"},
)
body = res.json()
if body["code"] != 200:
raise RuntimeError(f'{body["code"]} {body["msg"]}')
balance = body["data"]
print(balance.get("funding", balance)){
"code": 200,
"msg": "success",
"data": {
"available": "128.42",
"held": "0.36",
"total": "128.78"
}
}| Поле | Значение |
|---|---|
available | Чистая сумма кошелька; может стать отрицательной после использования одобренного кредита и сама по себе не определяет допустимость запроса |
held | Средства, зарезервированные под активные задачи |
total | Сумма двух значений |
Если финансирования, подходящего для выбранной модели и времени, недостаточно для оценки, createTask возвращает 40201. Истечение кредита, исчерпание лимитов и недостаток средств после возврата внешнего платежа также могут влиять на принятие запроса. Не заменяйте серверные проверки клиентской проверкой знака available.
Проверять баланс перед каждой генерацией не требуется: при принятии задачи уже проверяются доступные средства и лимиты расходов.
В API деньги передаются строкой без знака доллара
«$0.008» — формат цены для читателя этой страницы. API возвращает десятичную строку без символа валюты: estimatedCost, cost и все три поля баланса выглядят как "0.008" — без $ и разделителей, всегда в USD.
// Keep the exact decimal string for display
const usd = task.cost;Строки вместо чисел JSON используются намеренно: в большинстве языков число JSON превращается в float64, а 0.008 не имеет точного двоичного представления. Для финансового учёта разбирайте сумму как десятичное число:
from decimal import Decimal
usd = Decimal(task["cost"]) # not float()Лимиты расходов
Лимит расходов ограничивает сумму, которую можно потратить. К задаче могут применяться до шести ограничений; первое достигнутое отклоняет задачу с 40202, до создания задачи или резервирования средств:
| Лимит | Кто задаёт | msg при достижении |
|---|---|---|
| Общий лимит ключа | Вы, на странице API-ключей. Максимум расходов ключа за всё время | This key has reached its total spend cap |
| Месячный лимит ключа | Вы, на странице API-ключей. Бюджет текущего календарного месяца | This key has reached its monthly budget |
| Дневной лимит ключа | Вы, на странице API-ключей. У новых ключей нет лимита, пока вы его не зададите | This key has reached its daily spend cap |
| Дневной лимит команды | Владельцы, администраторы и управляющие бюджетом команды на странице команды. Только для принадлежащих команде ключей | Workspace daily budget has been reached |
| Месячный лимит команды | Те же роли | Workspace monthly budget has been reached |
| Дневной лимит платформы | Мы. Это наш защитный механизм; вы не можете повысить лимит | Platform quota for today is exhausted, please try again later |
Дневные лимиты обновляются в 00:00 UTC; месячные следуют календарному месяцу UTC и обновляются 1-го числа. Общий лимит за всё время не сбрасывается. При достижении лимита платформы повторите после 00:00 UTC или обратитесь в поддержку, если это повторяется.
Нерассчитанный резерв входит в каждый лимит — общий, месячный и дневной — до расчёта задачи, независимо от того, на какой день или месяц это приходится. Деньги ещё не потрачены, но потратить их дважды тоже нельзя. Лимиты команд описаны в разделе Консоль и команды.
Пустое поле лимита имеет разный смысл в разных настройках
- Создание или редактирование ключа: пустое поле означает без лимита, как и
0. У новых ключей нет лимита, пока вы его не зададите. Очистка поля существующего ключа удаляет лимит; чтобы сохранить его, оставьте число. - Лимиты команды: пустое поле сохраняет текущее значение;
0означает отсутствие лимита.
Лимиты защищают вас. Неконтролируемый цикл, расходующий большую сумму за несколько часов, — обычный инцидент в этой отрасли. Почти всегда он происходит на аккаунте без настроенного лимита.
Платёжный журнал
Страница Оплата в консоли перечисляет все движения баланса с понятными подписями: Пополнение, В резерве, Списано, Возвращено. При скачивании списка через Экспорт CSV колонка kind содержит один из стабильных кодов:
| Вид | Значение |
|---|---|
topup | Оплаченные вами деньги, добавленные в баланс |
bonus | Дополнительная сумма предложения по пополнению, учитываемая отдельно от оплаты |
trial | Средства пробной кампании, отдельно от пополнений и бонусов |
hold | Оценочная сумма, зарезервированная при принятии задачи; не списание |
settle | Итоговая плата за задачу, включая отказ по содержанию, оплачиваемый по условиям модели; остаток резерва возвращается |
refund | Полный резерв возвращён из-за ошибки задачи или тайм-аута |
adjust | Ручная корректировка нашей командой; всегда содержит сведения об операторе и причину |
chargeback | Средства изъяты из баланса после спора по платежу |
forfeit | Остаток баланса, от которого вы отказались при закрытии аккаунта |
grant_expire | Неиспользованные промо-средства удалены после истечения срока |
grant_revoke | Неиспользованные промо-средства отозваны |
В платёжный журнал можно только добавлять записи. Уже записанное никогда не переписывается: возвращённый резерв создаёт новую запись, а не стирает исходную. Поэтому любой баланс можно пересчитать с самого начала, и вопрос о несовпадении чисел получает проверяемый ответ.
Бонус учитывается отдельно от вашей оплаты, потому что возврат платежа (деньги, возвращённые на карту) касается только оплаченной суммы; бонус не имеет денежной стоимости. Это не связано с записями refund выше, которые возвращают резерв неудавшейся задачи в баланс.
Движения средств хранятся 10 лет отдельно от содержимого задач. Они остаются доступными для сверки и споров после удаления промптов и результатов. См. Хранение данных.
Счета и отчёты об использовании
В разделе Оплата → Счета консоли вы можете самостоятельно оформить два документа и скачать их в PDF:
| Документ | Что охватывает | Это платёжный документ? |
|---|---|---|
| Счёт об оплате | Одно уже оплаченное пополнение, на списанную сумму | Да. Его подают для возмещения расходов |
| Отчёт об использовании | Фактические расходы за один завершённый месяц | Нет. Эти деньги были оплачены при пополнении; подача обоих документов означала бы запрос возмещения одной суммы дважды |
Один раз введите реквизиты вверху раздела Оплата → Счета. Обязательны имя или название компании, первая строка адреса, город и страна; налоговый номер (VAT, GST и подобный) необязателен. Данные печатаются точно как введены: вы их указываете, а мы ничего не проверяем, включая налоговый номер. Для печати поддерживаются только латиница, греческий алфавит и кириллица, поэтому японское или корейское название компании укажите в зарегистрированном латинском написании. Выданный документ сохраняет реквизиты на момент создания; последующие изменения затрагивают только новые документы.
- Для каждого оплаченного пополнения и каждого завершённого месяца можно выдать документ один раз. Если он уже существует, скачайте его, не создавая новый.
- Для исправления реквизитов выберите Перевыпустить: старый документ помечается аннулированным, а замена с новым номером относится к тому же пополнению или месяцу. Аннулировать без замены используйте только если документ относится не к тому пополнению или месяцу.
- Выписки по счёту ниже на той же странице — другое: фиксированный ежемесячный снимок всех движений баланса для вашего учёта. Это не подтверждение оплаты и не налоговый документ.
Налог указан как нулевой: мы — американский поставщик, не собираем и не перечисляем за вас VAT, GST или налог с продаж. Каждый документ содержит уведомление о самостоятельном начислении налога получателем (reverse charge), поэтому учёт налога, причитающегося в вашей стране, остаётся вашей обязанностью. Выданный счёт никогда не редактируется: его аннулируют и перевыпускают с записью причины и замены.
Единицы оплаты
У модели ровно одна единица оплаты.
| Единица | Значение | Какое поле input задаёт количество |
|---|---|---|
per_image | За сгенерированное изображение | поле, объявленное моделью; по умолчанию 1 |
per_second | За секунду результата. Некоторые эндпоинты округляют длительность вверх до целого блока — см. Оплата длительности целыми блоками | Прочитайте текущий quantityField и схему; стандартное поле длительности — duration_seconds. Не предполагайте, что отсутствие длительности выбирает самый короткий тариф. |
per_request | За вызов, независимо от параметров | — |
per_1k_tokens | По токенам. Единица API — per_1k_tokens; сайт и price.perMillionTokens каталога показывают те же цены за миллион токенов. У входных, кешированных входных, записываемых в кеш и выходных токенов могут быть свои цены | — |
Угадывать имя поля не нужно: quantityField эндпоинта каталога сообщает его для каждой модели; пустая строка означает одну единицу на вызов.
У модели могут быть разные цены для разных категорий. Разрешение, длительность, настройки аудио и референсные медиафайлы могут влиять на расчёт в зависимости от схемы. pricing[].variant определяет категорию карточки цены; в теле запроса нет поля variant. Не предполагайте, что эту метку всегда можно передать как resolution, и не считайте все модели по формуле «начальная цена × длительность». Отправьте полный набор входных данных в jobs/quote, чтобы получить точную оценку и верхнюю границу списания.
Всегда читайте количество и цену из актуального каталога
Не фиксируйте одно поле количества для целой категории моделей. Пустой quantityField означает одну единицу оплаты на вызов; иначе читайте оценку из указанного входного поля. Категории модели, значения по умолчанию и правила оплаты могут меняться вместе с каталогом. Списание ограничено суммой, зарезервированной при принятии задачи: остаток освобождается, а позднее сверх резерва ничего не списывается.
Оплата длительности целыми блоками
Большинство моделей per_second оплачиваются по точной длительности результата. Некоторые — по фиксированным блокам: перед расчётом измеренная длительность округляется вверх до следующего целого блока. При блоке 8 секунд ролики на 6 и 8 секунд стоят одинаково, а ролик на 9 секунд — два блока. Так работают не все модели с посекундной оплатой: правило действует только на объявляющих его эндпоинтах, и каждый объясняет это на своей странице.
Есть ещё общая черта, из-за которой округление видно в расчёте: длительность берётся из видео, которое вы передаёте, а не из выбранного вами duration_seconds. Поэтому до чтения ролика никто не знает длительность результата. Их quantityField пуст, и показанная до отправки сумма соответствует наихудшему случаю — самому длинному ролику, принимаемому эндпоинтом:
{
"estimatedCost": "0.96",
"maxCharge": "0.96",
"quantity": "32",
"unit": "per_second"
}Суммы иллюстративные; quantity здесь — верхняя граница в секундах, а не измеренная длительность. Резервируется сумма расчёта; итоговое списание вычисляется по округлённой длительности и никогда не превышает резерв. Остаток освобождается при расчёте задачи, как на трёх этапах выше.
Резерв будет больше итогового списания
Для таких эндпоинтов это ожидаемое поведение, а не завышенное списание. Между принятием и расчётом баланс показывает верхнюю границу в резерве: до чтения ролика длительность результата неизвестна. При расчёте оплачивается фактическая длительность, округлённая вверх до блока, а разница автоматически возвращается в баланс. Журнал отражает оба движения, поэтому hold и settle всегда можно сопоставить.
Из этого следуют два момента, которые нужно учитывать:
- Планируйте бюджет по расчёту, а не по своему ролику. До завершения расчёта задачи резерв соответствует верхней границе и входит в лимиты расходов, как любой другой резерв.
- Короткий ролик всё равно стоит целый блок. Сокращение с 9 до 8 секунд может вдвое уменьшить цену эндпоинта с 8-секундным блоком; сокращение с 8 до 5 ничего не меняет.
Точные единицы и цены — на странице цен и странице каждой модели.
Скидки и предложения для клиентов
Предложения могут распространяться на всех или на один аккаунт, на все модели или на выбранные. Постоянные действуют до отключения; временные — только между фактическими началом и окончанием. Цены отдельного аккаунта действуют после входа или при расчёте через его API-ключ и никогда не публикуются как цена другого клиента.
Предложения не суммируются. Автоматически применяется самая низкая доступная вам цена. Для стандартной суммы $10 публичное предложение 10% и скидка аккаунта 20% дают $8, а не составную скидку до $7.20. После окончания или отключения предложения новые расчёты используют лучшее из оставшихся подходящих либо стандартную цену, если таких нет.
Предложения на главной, в каталоге и на страницах моделей помогают сравнивать варианты. Фактическую оценку получайте через jobs/quote со своими учётными данными, моделью и полными входными данными. Обратный отсчёт не фиксирует цену: обновляйте расчёт после изменения предложения, входных данных или цены. Принятая задача сохраняет зафиксированную цену, даже если предложение закончится во время выполнения; итоговое списание не может превышать резерв при принятии.
Предложения автоматически применяются к плате за API, а не к сумме пополнения, и не дают кешбэк за пополнение. Примеры дневного и месячного бюджета экстраполируют текущую цену. Временное предложение может закончиться раньше бюджетного периода, поэтому проверяйте и дату его окончания.
Промо-средства и кредитные линии
GET /api/v1/chat/credit сохраняет available, held и total и может включать детализацию funding. Старые ответы могут не содержать funding; отсутствие данных не означает ноль. Используйте client.getBalance() в SDK или spicyapi balance --json в CLI.
funding.prepaidAvailableUsdсодержит предоплаченные или прежние доступные средства без ограничений;grantAvailableUsdсуммирует активные промо-средства. Каждая записьgrantsпоказывает выделенную, доступную, зарезервированную и потраченную суммы, статус, начало, истечение иmodelSlugs. Пустой список моделей означает все модели; иначе средства оплачивают только перечисленные. Список содержит до 100 выделений средств: сначала с остатком или резервом, затем от новых к старым.grantsHasMoreуказывает дополнительные записи. Не заменяйте общий итог аккаунта суммой видимого списка.funding.creditописывает одобренную кредитную линию с последующей оплатой.limitUsd— её предел,availableUsd— неиспользованный доступный кредит,usedUsd— рассчитанная непогашенная основная задолженность,heldUsd— резерв принятых задач,expiresAt— срок истечения. Кредитный лимит не является пополнением, промо-средствами или денежным балансом. Истечение срока, отключение или превышение лимита ограничивают новые запросы; существующий долг остаётся к оплате.- Промо-средства нельзя вывести. Скидки определяют цену запроса; промо-средства и кредит — способ её финансирования. Выделение промо-средств не уменьшает цену в карточке модели. Действуют область моделей и срок; неиспользованные суммы могут истечь или быть отозваны. Ошибки задач и неиспользованные резервы возвращают средства в исходный источник; это не возобновляет просроченные или отозванные промо-средства.
- Положительный
funding.cashShortfallUsd— недостаток денег после возврата внешнего платежа. Промо-средства и кредит его не покрывают; новые вызовы остаются заблокированы до покрытия. Отрицательноеavailable, напротив, может отражать использование одобренного кредита. Не делайте вывод об отказе по знаку суммы и не прибавляйте её напрямую к кредитному лимиту. Сервер проверяет источники средств, допустимость модели, сроки и лимиты расходов.
Суммы остаются точными десятичными строками USD, даты используют RFC3339. При отображении дат указывайте часовой пояс. Страница оплаты в консоли показывает финансирование и промо-средства; изменения действуют только после ручного одобрения администратором. По вопросам промо-средств или кредитных линий откройте обращение в разделе Поддержка консоли или напишите на support@spicyapi.ai. Публичный API не позволяет увеличить собственный лимит или выделить себе промо-средства.
Использование текущего API-ключа
Для графика расходов по дням и моделям всего аккаунта (или команды) используйте Оплата → Использование в консоли. Эндпоинт API ниже показывает только данные вызывающего его ключа:
curl 'https://api.spicyapi.ai/api/v1/usage?from=2026-09-01&to=2026-09-06' \
-H "Authorization: Bearer $SPICY_API_KEY"Даты используют UTC и интервал [from,to), поэтому пример включает 1–5 сентября. Без дат возвращаются последние семь
дней, включая сегодня; максимальный период — 92 дня. Результаты принадлежат только текущему API-ключу.
Параметра для другого ключа или отчёта всего аккаунта нет; для баланса кошелька используйте chat/credit.
data.totalCalls считает все задачи; data.totalSpend включает только окончательные списания. days и
models группируют те же задачи по дате создания и модели с точными десятичными строками USD. Незавершённые
резервы не входят в сумму, а поздний расчёт может обновить прошлые даты. Скрытая история задач остаётся
включённой; даты без вызовов пропускаются. Не складывайте результаты двух группировок.
Используйте client.getUsage({ from, to }) в SDK или spicyapi usage --from 2026-09-01 --to 2026-09-06
в CLI. У эндпоинта свой более строгий лимит частоты — см. Ограничения частоты запросов.
n8n
Используйте модели SpicyAPI для изображений, видео, звука и чата в рабочих процессах n8n. Установите community-узел, импортируйте шаблоны HTTP Request или направьте учётные данные OpenAI в n8n на SpicyAPI для узлов AI Agent.
Консоль и команды
Что делает каждая страница консоли SpicyAPI и когда ею пользоваться, а также как команды делят API-ключи и лимиты расходов, пока за всё платит владелец команды.

