Инструмент командной строки (CLI)
Команда spicyapi позволяет прямо из терминала, без написания кода, просматривать модели, узнавать цены, генерировать изображения и видео и скачивать результаты.
Что такое CLI
spicyapi — небольшая программа, которую запускают в терминале: это окно, где вместо нажатия кнопок вводят команды. Каждая команда выполняет одно действие: выводит список моделей, доступных вашему аккаунту, сообщает, сколько будет стоить генерация, запускает генерацию изображения или видео, дожидается её завершения и даёт ссылку для скачивания результата.
Писать код не нужно. Вы вводите команду, нажимаете Enter и читаете ответ.
CLI подойдёт, если вы хотите:
- попробовать модели и сравнить цены, прежде чем кто-то возьмётся за интеграцию;
- генерировать изображения или видео на своём компьютере и сохранять файлы;
- повторять однотипные генерации, не прокликивая каждый раз страницу;
- уточнить точные настройки модели, прежде чем что-то на ней строить.
CLI работает с генерацией изображений и видео. Текстовые и чат-модели вызываются через эндпоинты, совместимые с форматом чата, — они описаны на странице Текст и потоковые ответы.
Есть ещё три официальных инструмента. Выбирайте CLI, если хотите вводить команды сами:
| Инструмент | Когда его выбрать |
|---|---|
| SDK | Вы пишете программу на JavaScript или TypeScript, которая вызывает SpicyAPI |
| MCP-сервер | Вы хотите, чтобы ИИ-ассистент для программирования выполнял эти же шаги за вас |
| Agent Skill | Вы хотите научить ИИ-агента безопасно работать со SpicyAPI |
Пишете на другом языке? Официальные SDK есть и для Python, Go, PHP и Java.
На этой странице ничто не потратит деньги случайно
Деньги могут стоить только две команды: tasks create и tasks retry. Обе останавливаются и спрашивают вас, прежде чем что-либо списать. Все остальные команды бесплатны, запускайте их сколько угодно.
Что можно делать
| Я хочу… | Команда | Стоит денег? | Нужен API-ключ? |
|---|---|---|---|
| Проверить, доступен ли SpicyAPI | spicyapi status | Нет | Нет |
| Поискать по этой документации | spicyapi docs search <words> | Нет | Нет |
| Узнать, какими моделями я могу пользоваться и сколько они стоят | spicyapi models list | Нет | Да |
| Узнать, какие настройки принимает одна модель | spicyapi models get <model> | Нет | Да |
| Проверить баланс | spicyapi balance | Нет | Да |
| Узнать, сколько потратил ключ | spicyapi usage | Нет | Да |
| Узнать точную цену генерации, не запуская её | spicyapi tasks quote | Нет | Да |
| Запустить генерацию изображения или видео | spicyapi tasks create | Да, после вашего подтверждения | Да |
| Дождаться завершения генерации | spicyapi tasks wait <task-id> | Нет | Да |
| Посмотреть одну генерацию и ссылки на её результат | spicyapi tasks get <task-id> | Нет | Да |
| Вывести список последних генераций | spicyapi tasks list | Нет | Да |
| Ещё раз запустить генерацию, завершившуюся ошибкой | spicyapi tasks retry <task-id> | Да, после вашего подтверждения | Да |
| Безвозвратно удалить файлы и промпт генерации | spicyapi tasks purge <task-id> | Нет, и деньги не возвращаются | Да |
| Загрузить изображение, видео или аудиофайл, чтобы использовать его во входных данных | spicyapi files upload <path> | Нет | Да |
| Получить свежую ссылку для скачивания результата | spicyapi files download-url <task-id> | Нет | Да |
| Проверить, что обратный вызов действительно пришёл от SpicyAPI | spicyapi webhooks verify | Нет | Нет, используется ключ подписи вебхука |
В командах выше слово в угловых скобках, например <task-id>, означает «подставьте сюда своё значение» — без самих скобок.
Перед началом
Вам понадобятся четыре вещи: терминал, Node.js, API-ключ и способ запускать CLI. В первый раз на это уходит около десяти минут.
Откройте терминал
Терминал — это текстовое окно для запуска команд. Всё, что есть на этой странице, вводится или вставляется туда и запускается клавишей Enter.
Нажмите Cmd + Пробел, наберите Terminal и нажмите Enter. Откроется окно со строкой, которая заканчивается на % или $: здесь и вводят команды. Вставка — Cmd + V.
Установите Node.js 22.13 или новее
CLI работает на Node.js — это бесплатная программа. Проверьте, не установлена ли она уже:
node -vЕсли команда выводит v22.13.0 или номер больше, например v22.14.0 или v24.4.1, всё готово. Если номер меньше или появляется сообщение command not found или is not recognized (в русской Windows — «не распознано как имя командлета»):
- Зайдите на nodejs.org, откройте страницу загрузки и выберите версию LTS для своей системы.
- Запустите установщик и оставьте параметры по умолчанию.
- Закройте терминал и откройте новый, затем снова выполните
node -v.
Вместе с Node.js устанавливаются npm и npx — две вспомогательные программы, которые понадобятся на последнем шаге.
Создайте API-ключ
По API-ключу SpicyAPI понимает, что запрос пришёл от вашего аккаунта.
- Создайте аккаунт на spicyapi.ai/register. Аккаунты могут открываться партиями; если регистрация для вас ещё не открыта, запишитесь в лист ожидания.
- Пополните баланс в разделе Биллинг консоли. Генерации оплачиваются с баланса, в долларах США.
- Откройте страницу Ключи API и нажмите Создать ключ. Дайте ключу название, по которому вы потом его узнаете, например
my laptop. Обязательно указать только название. - Сразу скопируйте ключ. Он начинается с
sk-spicy-и показывается только один раз. Можно также нажать Сохранить в файл.
У новых ключей нет лимита расходов, пока вы не зададите его сами. Дневной лимит защищает от того, что ошибка или утечка ключа обернётся большим счётом, и позже его можно изменить на той же странице.
Обращайтесь с ключом как с паролем
Любой, у кого есть ваш ключ, может тратить ваш баланс. Не отправляйте его в чат или по почте, не показывайте на скриншотах и в обращениях в поддержку и никогда не сохраняйте в папке проекта, которая попадает в Git или на GitHub. Если ключ утёк, отзовите его на странице Ключи API и создайте новый.
Сохраните ключ в SPICY_API_KEY
У CLI нет команды входа, и ключ никогда не передаётся ему как параметр команды. CLI читает переменную окружения SPICY_API_KEY — именованное значение, которое терминал передаёт запускаемым из него программам.
Только для текущего окна (значение пропадёт, когда вы закроете окно):
export SPICY_API_KEY="sk-spicy-paste-your-key-here"Навсегда: добавьте ту же строку export в конец файла запуска вашей оболочки — он выполняется при каждом открытии терминала. В macOS это файл ~/.zshrc, в большинстве систем Linux — ~/.bashrc.
nano ~/.zshrcВставьте строку export в самый конец, нажмите Ctrl + O, затем Enter, чтобы сохранить файл, и Ctrl + X, чтобы выйти. В Linux вместо этого выполните nano ~/.bashrc. Чтобы изменение вступило в силу, откройте новое окно терминала.
Проверьте, что переменная задана, не выводя ключ целиком:
echo "${SPICY_API_KEY:0:9}"Должно вывести sk-spicy-.
Где ключ хранить можно, а где нельзя
Файл запуска оболочки и настройки вашей учётной записи Windows остаются на этом компьютере — для личного использования это нормально. Никогда не кладите ключ в файл внутри проекта, никогда не коммитьте его и никогда не вставляйте в общий документ. Кроме того, терминал запоминает введённые команды, поэтому на общем компьютере лучше пользоваться файлом запуска или окном настроек Windows, а не вводить ключ прямо в команде.
Выберите, как запускать CLI
Способов два, команды в обоих одинаковые.
npx скачивает CLI, когда он нужен, и запускает его:
npx @spicyapi/cli statusВ первый раз npm спросит Need to install the following packages: @spicyapi/cli@… Ok to proceed? (y). Нажмите y и Enter.
При этом способе пишите npx @spicyapi/cli везде, где на этой странице написано spicyapi. Например, spicyapi models list превращается в npx @spicyapi/cli models list.
Ваш первый результат
В этом пошаговом примере вы сгенерируете одно изображение и скачаете его. На каждом шаге показаны команда, примерно то, что вы увидите, и что только что произошло. Ваши числа, ID и время будут другими.
Замените MODEL_ID_FROM_CATALOG настоящим ID модели
MODEL_ID_FROM_CATALOG — это заполнитель, а не модель. На шаге 3 показано, как выбрать настоящий ID из актуального каталога (live catalog): это spicyapi models list, тот же список, что и GET /api/v1/models. Подставляйте свой ID везде, где на этой странице стоит заполнитель. Если отправить сам заполнитель, вернётся только ошибка «not found».
Проверьте подключение
spicyapi statusSpicyAPI is reachable — api.spicyapi.ai answered in 523 ms.Что произошло: CLI спросил у SpicyAPI, работает ли сервис. Ключ для этого не нужен, и это ничего не стоит. Если вы видите «could not be reached», проверьте подключение к интернету или прокси; см. Устранение неполадок.
Проверьте баланс
spicyapi balanceavailable: 12.34
held: 0.06
total: 12.40Что произошло: это первая команда, которая использует ваш ключ. Суммы указаны в долларах США. available — сколько можно потратить сейчас, held — сколько зарезервировано под генерации, которые ещё выполняются, а total — сумма этих двух значений. Может появиться и строка funding с разбивкой баланса на предоплаченные средства и промоначисления.
Если вы видите Error: SPICY_API_KEY is required for authenticated API operations, в этом окне терминала ключ не задан. Строка Next: под сообщением подсказывает, как его задать; см. также Перед началом.
Выберите модель
spicyapi models list --modality image --json{
"total": 1,
"items": [
{
"model": "MODEL_ID_FROM_CATALOG",
"displayName": "Example image model",
"modality": "image",
"tasks": ["text-to-image"],
"enabled": true,
"available": true,
"pricing": [
{ "variant": "", "unit": "per_image", "price": "0.03", "currency": "USD" }
]
}
]
}Пример сокращён: в настоящем списке больше моделей и больше полей.
Что произошло: CLI получил модели, которые ваш аккаунт может вызывать сегодня, с вашими ценами. Выберите модель, у которой и enabled, и available равны true, и скопируйте её значение model, например выделив его мышью. Это значение и есть ID модели. ID выглядят как maker/model/task.
priceуказан в долларах США заunit:per_image(за изображение),per_second(за секунду видео),per_request(за запрос) илиper_1k_tokens(за 1000 токенов).- Несколько записей в
pricingозначают, что цена зависит от ваших настроек, например от разрешения. - Чтобы найти модель по названию, добавьте
--searchи часть её названия.
--json выводит список в виде читаемого JSON с отступами. Без этого флага весь список втиснут в одну длинную строку.
Посмотрите, какие настройки принимает модель
spicyapi models get MODEL_ID_FROM_CATALOG --json{
"model": "MODEL_ID_FROM_CATALOG",
"enabled": true,
"available": true,
"inputSchema": {
"type": "object",
"required": ["prompt"],
"properties": {
"prompt": { "type": "string" },
"aspect_ratio": { "type": "string", "enum": ["1:1", "16:9", "9:16"] }
},
"additionalProperties": false
}
}Что произошло: inputSchema — это список настроек модели. То, что вы в этих настройках отправляете, дальше на этой странице называется входными данными (input).
requiredперечисляет настройки, которые нужно отправить обязательно. Здесь это толькоprompt.propertiesперечисляет все настройки, которые принимает модель, и ничего другого передавать нельзя: из-за одного неизвестного или написанного с ошибкой имени отклоняется весь запрос.enumперечисляет единственные допустимые значения настройки.
У каждой модели свои настройки, поэтому всегда смотрите их у той модели, которую выбрали. Готовые входные данные, которые сервер уже проверил, можно получить командой spicyapi models list --search <name> --include-examples --json: смотрите поле examples.
Запишите входные данные в файл
Сохраните входные данные в файл input.json в той папке, где сейчас находится терминал. Файл избавляет от проблем с кавычками, особенно в Windows.
Вставьте все три строки сразу:
cat > input.json <<'EOF'
{"prompt": "A paper lantern glowing on a rainy street at night, cinematic light"}
EOFЧто произошло: вы описали, что нужно сгенерировать, используя имена настроек из предыдущего шага. Кавычки должны быть обычными прямыми ("), а не типографскими.
Проверьте цену
spicyapi tasks quote --model MODEL_ID_FROM_CATALOG --input-file input.jsonquoteId: eyJ2IjoxLCJtIjoi…
model: MODEL_ID_FROM_CATALOG
estimatedCost: 0.03
maxCharge: 0.03
currency: USD
quantity: 1
unit: per_image
expiresAt: 2026-09-17T08:05:00ZЧто произошло: SpicyAPI рассчитал стоимость именно этого запроса. Ничего не запущено и ничего не списано. estimatedCost — ориентировочная стоимость, а maxCharge — максимальная сумма списания. Этот шаг необязателен: следующая команда снова получит цену и покажет её вам, прежде чем что-либо потратить.
Запустите генерацию и дождитесь её
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --waitCLI сначала показывает цену и просит подтвердить запуск:
Estimated charge: USD 0.03; maximum charge: USD 0.03. Quote expires: 2026-09-17T08:05:00Z.
Idempotency-Key: 4f6755a5-0d72-4420-9f6b-9faf0e2b0241
Create a billable task with model MODEL_ID_FROM_CATALOG? Estimated charge: USD 0.03; maximum charge: USD 0.03. Quote expires: 2026-09-17T08:05:00Z. Idempotency-Key: 4f6755a5-0d72-4420-9f6b-9faf0e2b0241. Continue? [y/N]Введите y и нажмите Enter. Любой другой ответ отменяет запуск, и ничего не списывается. Ответьте в течение пяти минут, пока не истёк срок расчёта стоимости.
Как только SpicyAPI примет работу, CLI выведет её ID задачи:
Accepted: job_01k3m8x9q2z4v7n5p6r8s0t1w3
If waiting is interrupted: spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3Изображения обычно готовы за секунды, видео — за минуты. Когда генерация завершится, появится результат:
idempotencyKey: 4f6755a5-0d72-4420-9f6b-9faf0e2b0241
accepted: {"taskId":"job_01k3m8x9q2z4v7n5p6r8s0t1w3","state":"queued","estimatedCost":"0.03","deadlineAt":"2026-09-17T08:30:00Z"}
task: {"taskId":"job_01k3m8x9q2z4v7n5p6r8s0t1w3","model":"MODEL_ID_FROM_CATALOG","state":"succeeded","output":{"assets":[{"key":"tasks/…/result.png","url":"https://…","expiresAt":"2026-09-17T08:20:00Z","mime":"image/png","width":1024,"height":1024}]},"cost":"0.03","settled":true,…}Что произошло: после вашего y SpicyAPI принял генерацию — с этого момента она называется задачей — и зарезервировал ориентировочную стоимость на вашем балансе. Затем CLI каждые несколько секунд проверял задачу, пока она не завершилась. В последней строке найдите "state":"succeeded" и "url" внутри output. cost — окончательное списание, когда settled равно true. Если удобнее, чтобы результат был разбит на несколько читаемых строк, добавьте к команде --json.
Закрытие окна не отменяет задачу
Принятая задача всегда выполняется до конца и оплачивается как обычно. Ctrl + C или закрытие терминала останавливает только ожидание. Сохраните ID задачи и вернитесь к ней командой spicyapi tasks wait <task-id>; см. Как вернуться к задаче после прерванного ожидания.
Скачайте результат
url — прямая ссылка для скачивания, которая действует около 20 минут и не требует ключа. Вставьте её в браузер и сохраните файл или скачайте его из терминала (кавычки оставьте: в ссылке есть символы &):
curl -L -o result.png "PASTE_THE_URL_HERE"Выберите расширение файла по значению mime: .png для image/png, .jpg для image/jpeg, .mp4 для video/mp4.
Если срок действия ссылки истёк, получите новую командой spicyapi files download-url <task-id> или выполните spicyapi tasks get <task-id> — эта команда возвращает свежие ссылки.
Что произошло: вы скопировали результат на свой компьютер. Не откладывайте: SpicyAPI хранит сгенерированные файлы не дольше примерно 14 дней (меньше, если в вашем аккаунте задан более короткий срок), а затем удаляет их навсегда. См. Хранение и удаление данных.
Как читать вывод
- Обычный вывод — по одной паре
name: valueна строку. Значения из нескольких частей, напримерoutputилиretention, выводятся как JSON в одну строку. --jsonвыводит полный ответ в виде JSON с отступами. Флаг работает с любой командой, до или после её имени:spicyapi --json balanceиspicyapi balance --json— одно и то же.- Результаты идут в обычный вывод, а сообщения — в поток ошибок. Цены, ключ идемпотентности, строки
Accepted:и ошибки — это сообщения. Поэтомуspicyapi --json tasks get <task-id> > task.jsonсохранит вtask.jsonтолько результат, а сообщения по-прежнему появятся на экране. - Ошибки выглядят как
Error: <what went wrong> (request req_…), и обычно за ними следует строкаNext:с подсказкой, что делать. С--jsonошибка — это однострочный объект JSON с полямиerror,type,status,codeиrequestId, без строкиNext:. Если ключ не задан,typeравенMissingApiKeyError. Если обращаетесь в поддержку, укажите значениеreq_…. - Деньги — сумма в долларах США, записанная обычным текстом без знака
$, например0.03. - Время указано в UTC.
Zв конце2026-09-17T08:05:00Zозначает UTC. - Код завершения равен
0, если команда выполнена успешно, и не равен0, если она завершилась ошибкой; скрипты могут это проверять.
Справочник команд
У каждой команды есть встроенная справка: добавьте --help, например spicyapi tasks create --help.
Глобальные параметры и переменные окружения
Эти параметры работают с любой командой.
| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--json | Выводит полный результат в виде JSON | Выключен | Нет |
--timeout-ms <milliseconds> | Сколько ждать одного ответа от SpicyAPI, прежде чем сдаться, от 1 до 120000 | 30000 (30 секунд) | Нет |
--max-retries <count> | Сколько раз автоматически повторить запрос после сетевой ошибки, 429 или ошибки сервера — только для запросов, которые безопасно повторять; от 0 до 5 | 2 | Нет |
--api-base-url <url> | Отправлять запросы к API на другой адрес. Обычно это никогда не нужно | https://api.spicyapi.ai/api/v1 | Нет |
--service-base-url <url> | Адрес, который проверяет status. Обычно это никогда не нужно | https://api.spicyapi.ai | Нет |
-V, --version | Выводит версию CLI | — | Нет |
-h, --help | Показывает справку по команде | — | Нет |
| Переменная окружения | Для чего она |
|---|---|
SPICY_API_KEY | Ваш API-ключ. Нужен всем командам, кроме status, docs search и webhooks verify |
SPICY_WEBHOOK_SECRET | Ваш ключ подписи вебхука; его читает webhooks verify |
SPICY_API_BASE_URL, SPICY_SERVICE_BASE_URL | То же, что два параметра адреса выше. Адреса должны начинаться с https:// |
status
Что делает: проверяет, работает ли SpicyAPI и доступен ли он с вашего компьютера.
spicyapi statusПараметров нет. Ключ не нужен. Бесплатно.
Вывод: одно предложение. SpicyAPI is reachable — … answered in … ms. означает, что всё в порядке. could not be reached означает, что ваш компьютер не получил ответа: проверьте сеть или прокси. is not healthy или reports it is not ready означает проблему на нашей стороне; текущие инциденты публикуются на status.spicyapi.ai.
С --json вы увидите исходные результаты проверок. Главное — operational: true; запись readiness со статусом 404 на публичном адресе — это нормально.
docs search
Что делает: находит страницу документации по теме. Поиск идёт по небольшому индексу, встроенному в CLI, поэтому работает без ключа и без обращения к SpicyAPI. Каждый результат ведёт на страницу этого сайта документации, docs.spicyapi.ai.
spicyapi docs search [words] [--limit <count>]| Аргумент или параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
words | Слова для поиска. Если не указать, выводится список страниц | Пусто | Нет |
--limit <count> | Максимальное число результатов, от 1 до 25 | 10 | Нет |
spicyapi docs search retentionslug: retention
title: Retention and destruction
summary: What the platform caps are, how far down you can dial them, how to destroy a task's content, and what we cannot promise.
keywords: ["privacy","delete","storage","retention","per-request retention","purge","destroy"]
url: https://docs.spicyapi.ai/docs/retentionЕсли результатов несколько, они выводятся друг за другом, и каждый начинается с slug:. Если ничего не найдено, команда так и сообщает и всё равно завершается с кодом 0:
No documentation matched "refnd". Try fewer or different words, or run `spicyapi docs search` without words to browse pages.С --json при отсутствии совпадений выводится пустой список, []. Бесплатно.
models list
Что делает: выводит модели, которые ваш аккаунт может вызывать сегодня, с ценами для вашего аккаунта.
spicyapi models list [options]| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--modality <type> | Только модели image, video или text. Параметр принимает и audio, но аудиомоделей сейчас нет | Все | Нет |
--task <task> | Только один вид работы, например text-to-image, edit, image-to-video, text-to-video или reference-to-video | Все | Нет |
--provider <name> | Только модели одного создателя — компании или лаборатории, которая сделала модель. Должно в точности совпадать со значением provider | Все | Нет |
--search <text> | Только модели, у которых ID или отображаемое название содержит этот текст, без учёта регистра | Не задано | Нет |
--include-schema | Добавить полные настройки каждой модели (inputSchema). Вывод становится намного больше | Выключен | Нет |
--include-examples | Добавить готовые примеры входных данных, которые сервер уже проверил (examples) | Выключен | Нет |
spicyapi models list --modality video --task image-to-video --jsonВывод: total и items. Используйте --json, потому что без него все элементы выводятся в одну строку. Самые полезные поля каждого элемента:
| Поле | Значение |
|---|---|
model | ID модели, который указывается в других командах |
displayName, provider, modality, tasks | Название, создатель модели, тип результата и вид работы |
enabled, available | Используйте модели, у которых оба значения равны true |
pricing | По одной записи на каждый ценовой уровень: variant (например, разрешение), unit, price в USD, а также regularPrice и offerLabel, если действует скидка |
taskTimeoutSeconds | Сколько может длиться генерация, прежде чем завершится с состоянием expired |
maxOutputDurationSeconds | Максимальная длина видео, которую допускает модель, если такое ограничение есть |
Бесплатно. Запросы списка моделей учитываются в лимите запросов вашего аккаунта, поэтому выполнять команду перед каждой генерацией не нужно.
models get
Что делает: показывает одну модель полностью, включая настройки, которые она принимает.
spicyapi models get <model>| Аргумент | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
model | Точный ID модели. Косые черты в нём оставляйте как есть | — | Да |
spicyapi models get MODEL_ID_FROM_CATALOG --jsonВывод: те же поля, что у models list, плюс inputSchema. В inputSchema смотрите required (настройки, которые нужно отправить обязательно), properties (все допустимые настройки и их типы), enum (единственные допустимые значения), minimum и maximum (границы чисел) и default (значение, которое используется, если настройку не указать). Записи с именем x-ui — подсказки для построения форм, их можно не читать. Бесплатно.
balance
Что делает: показывает, сколько денег доступно на вашем аккаунте.
spicyapi balanceПараметров нет. Бесплатно.
Вывод: available (сколько можно потратить сейчас), held (зарезервировано под задачи, которые ещё выполняются) и total — всё в долларах США. Может быть и поле funding, которое разбивает баланс на предоплаченные средства и промоначисления, в том числе с указанием, когда истекают промоначисления и за какие модели ими можно платить. Проверять баланс перед каждой генерацией не нужно: tasks create делает это за вас.
usage
Что делает: показывает, сколько генераций выполнил текущий API-ключ и сколько они стоили, с группировкой по дням и по моделям.
spicyapi usage [--from <date>] [--to <date>]| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--from <date> | Первый день, который входит в выборку, в формате YYYY-MM-DD по UTC | Последние семь дней, включая сегодняшний | Нет |
--to <date> | День после последнего дня выборки, в формате YYYY-MM-DD по UTC. Диапазон — не больше 92 дней | Последние семь дней, включая сегодняшний | Нет |
spicyapi usage --from 2026-09-01 --to 2026-10-01Эта команда охватывает весь сентябрь: --to — первый день, который не входит в выборку. Чтобы увидеть последние семь дней, включая сегодняшний, не указывайте ни один из параметров.
Вывод: from, to, currency, totalCalls, totalSpend, затем days (по дням: calls, succeeded, failed, spend) и models (те же числа по моделям). totalSpend учитывает только окончательные списания. days и models описывают одни и те же задачи двумя способами, поэтому не складывайте их. Чтобы увидеть данные по всему аккаунту, а не по одному ключу, откройте в консоли страницу Использование.
Бесплатно. Лимит — 30 вызовов в минуту, поэтому пользуйтесь командой для проверки итогов, а не в цикле.
tasks quote
Что делает: сообщает точную стоимость одной генерации, не запуская её и ничего не резервируя.
spicyapi tasks quote --model <model> --input-file <path>| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--model <model> | Точный ID модели | — | Да |
--input-file <path> | Прочитать входные данные из файла JSON. - означает читать их из того, что передано команде через конвейер (pipe) | — | Этот параметр или --input-json |
--input-json <json> | Передать входные данные прямо текстом JSON. С кавычками проще через --input-file | — | Этот параметр или --input-file |
--callback-url <url> | Адрес обратного вызова, который вы собираетесь использовать: он входит в запрос, стоимость которого рассчитывается | Не задан | Нет |
Вывод: quoteId, model, estimatedCost, maxCharge, currency, quantity (например, число оплачиваемых секунд), unit и expiresAt. Расчёт стоимости действует пять минут.
Бесплатно, без подтверждения. Используйте эту команду, чтобы сравнивать модели или настройки. Перед tasks create запускать её не обязательно: та получает собственный расчёт стоимости.
tasks create
Что делает: запускает генерацию изображения или видео. Это стоит денег. CLI всегда сначала показывает цену и спрашивает.
spicyapi tasks create --model <model> --input-file <path> [options]| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--model <model> | Точный ID модели | — | Да |
--input-file <path> | Прочитать входные данные из файла JSON. - читает их из конвейера, и тогда нужен ещё и --yes | — | Этот параметр или --input-json |
--input-json <json> | Передать входные данные прямо текстом JSON | — | Этот параметр или --input-file |
--wait | Дождаться завершения задачи и вывести результат | Выключен: вывести ID задачи и вернуться | Нет |
--yes | Пропустить вопрос о подтверждении. Используйте, только когда уже знаете цену, обычно в скриптах | Выключен: спрашивать | Нет |
--idempotency-key <key> | Имя для «этой одной генерации». Если в течение 24 часов снова выполнить команду с тем же ключом, вы получите ту же задачу, а не новую. До 128 символов | Новый случайный ключ при каждом запуске | Нет |
--retention <duration> | Удалить сгенерированные медиа, данные результата, промпт и прочий текст входных данных этой задачи раньше обычного: 30m, 1h, 7d или число секунд. Срок можно только сократить. 0 удаляет всё это сразу после завершения задачи. Записи биллинга сохраняются всегда | Настройка вашего аккаунта | Нет |
--callback-url <url> | Публичный адрес, начинающийся с https://, на который SpicyAPI отправит запрос, когда задача завершится. Обычный http://, localhost и адреса частных сетей отклоняются. Пригодится, только если у вас есть свой сервер; см. Webhook | Не задан | Нет |
--poll-interval-ms <milliseconds> | С --wait: проверять каждые столько миллисекунд, от 100 до 60000 | Сначала 2 секунды, затем постепенно до 10 секунд | Нет |
--wait-timeout-ms <milliseconds> | С --wait: перестать ждать через столько миллисекунд, от 1 до 86400000. Задача продолжает выполняться | 600000 (10 минут) | Нет |
Что происходит по порядку:
- CLI читает ваши входные данные и проверяет, что это объект JSON. Если входные данные не указаны, на этом всё останавливается.
- Если ответить на вопрос некому, например в скрипте, а
--yesне передан, на этом всё останавливается. - CLI получает расчёт стоимости и выводит ориентировочную стоимость, максимальную сумму списания, срок действия расчёта и ключ идемпотентности.
- CLI спрашивает
Continue? [y/N]. Продолжить можно только ответомyилиyes. По умолчанию ответ — нет. - CLI создаёт задачу по рассчитанной цене. Ориентировочная стоимость резервируется на вашем балансе, и это же максимум, который может стоить задача.
- Без
--waitCLI выводитidempotencyKey,taskId,state(queued),estimatedCostиdeadlineAtи возвращается. С--waitон сразу выводитAccepted: <task-id>и команду для восстановления, ждёт, а затем выводитidempotencyKey,acceptedи завершённую задачу вtask.
deadlineAt — самое позднее время, к которому задача может завершиться, прежде чем закончится с состоянием expired. Это не срок действия ссылки для скачивания и не срок хранения файлов.
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --waitВ macOS и Linux входные данные можно передать и прямо в команде:
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-json '{"prompt": "A paper lantern on a rainy street"}'Если ожидание прервалось, задача всё равно выполняется
Ожидание может закончиться раньше из-за ограничения по времени, проблем с сетью или Ctrl + C. Сама задача продолжает выполняться и оплачивается как обычно. Её ID есть в строке Accepted:, выведенной в самом начале; продолжите командой spicyapi tasks wait <task-id>. Не запускайте ту же команду создания ещё раз без --idempotency-key: так вы запустите вторую генерацию и заплатите и за неё.
Если ожидание завершилось ошибкой (а не Ctrl + C), последние строки повторяют всё нужное, так что прокручивать вывод назад к строке Accepted: не придётся:
Error: task job_01k3m8x9q2z4v7n5p6r8s0t1w3 did not reach a terminal state within 600000ms
Task job_01k3m8x9q2z4v7n5p6r8s0t1w3 was accepted and may still be running; only the wait stopped.
Recover: spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3
To replay the same request without creating a second task, reuse --idempotency-key 4f6755a5-0d72-4420-9f6b-9faf0e2b0241.Если у ошибки есть известное решение, например при 429 или ошибке сервера, дальше следует строка Next:. С --json те же сведения содержатся в объекте ошибки, в полях taskId, idempotencyKey и recover.
tasks wait
Что делает: ждёт, пока завершится задача, которую вы уже запустили.
spicyapi tasks wait <task-id> [options]| Аргумент или параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
task-id | ID задачи, например job_01k3m8x9q2z4v7n5p6r8s0t1w3 | — | Да |
--poll-interval-ms <milliseconds> | Проверять каждые столько миллисекунд, от 100 до 60000 | Сначала 2 секунды, затем постепенно до 10 секунд | Нет |
--wait-timeout-ms <milliseconds> | Перестать ждать через столько миллисекунд, от 1 до 86400000 | 600000 (10 минут) | Нет |
spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000Вывод: завершённая задача с теми же полями, что у tasks get, когда её состояние становится succeeded, failed или expired. Если задача выполнена успешно, но её файлы ещё копируются, команда подождёт ещё немного.
Если время ожидания истекло, вы увидите Error: task … did not reach a terminal state within 600000ms. Это не ошибка задачи: она всё ещё выполняется. Подождите снова, при необходимости с большим значением --wait-timeout-ms. Остановка ожидания никогда не отменяет задачу. Бесплатно.
tasks get
Что делает: показывает одну задачу в её текущем виде: состояние, стоимость, ссылки на результат и когда будет удалено её содержимое.
spicyapi tasks get <task-id>| Аргумент | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
task-id | ID задачи | — | Да |
Используйте тот же API-ключ, которым создана задача: с другим ключом вернётся «not found».
Поля вывода:
| Поле | Значение |
|---|---|
state | queued (ждёт запуска), running, succeeded, failed или expired (не уложилась во время). У старых задач может встречаться и canceled |
output.assets | Результаты. У каждого есть url (ссылка для скачивания, действует около 20 минут), expiresAt (когда эта ссылка перестанет работать), mime (тип файла), сведения о размере и key. pending: true означает, что файл ещё копируется, — попробуйте снова через несколько секунд. unavailable: true означает, что файл восстановить нельзя |
errorCode, errorMessage | Почему задача завершилась ошибкой. См. Ошибки и повторы |
cost, settled | Сумма списания в USD. Она окончательна, когда settled равно true |
input | Настройки, которые вы отправили. Удаляются, когда истекает срок хранения промптов |
createdAt, completedAt, deadlineAt | Когда задача создана, когда завершилась и самое позднее время, к которому она могла завершиться |
contentState | present (содержимое ещё хранится), expired (удалено по правилам хранения) или purged (вы его удалили) |
retention | outputsExpireAt (когда будут удалены файлы результата), promptsExpireAt (когда будет стёрт текст промпта) и source (какая настройка это определила) |
sourceTaskId | Есть, если эта задача — повтор другой задачи |
Обычный вывод заканчивается пояснением простыми словами, например Outputs expire: … или Content: Destroyed — you removed the outputs …. Каждый вызов возвращает свежие ссылки для скачивания. Бесплатно.
tasks list
Что делает: выводит задачи, созданные текущим API-ключом, по одной странице за раз.
spicyapi tasks list [options]| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--from <date> | Первый день выборки, YYYY-MM-DD по UTC | Семидневный период, который заканчивается сегодня | Нет |
--to <date> | День после последнего дня выборки, YYYY-MM-DD по UTC. Диапазон — не больше 92 дней | См. выше | Нет |
--state <state> | Только задачи в одном состоянии: queued, running, succeeded, failed, canceled или expired | Все | Нет |
--model <model> | Только задачи модели с точно таким ID | Все | Нет |
--limit <count> | Задач на странице, от 1 до 100 | 20 | Нет |
--cursor <cursor> | Продолжить с предыдущей страницы, используя её значение nextCursor | Первая страница | Нет |
spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --state failedВывод: items (у каждого элемента taskId, model, state, cost, settled, createdAt, deadlineAt и completedAt), hasMore и nextCursor. Если hasMore равно true, выполните ту же команду ещё раз с теми же --from и --to, добавив --cursor со значением nextCursor. Ссылок для скачивания в списке нет; для нужной задачи используйте tasks get. Бесплатно.
tasks retry
Что делает: запускает задачу в состоянии failed или expired ещё раз — как новую задачу с новым ID. Это стоит денег.
spicyapi tasks retry <task-id> [options]| Аргумент или параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
task-id | Задача, завершившаяся ошибкой или истёкшая, которую нужно запустить ещё раз | — | Да |
--wait | Дождаться завершения новой задачи | Выключен | Нет |
--yes | Пропустить вопрос о подтверждении | Выключен: спрашивать | Нет |
--idempotency-key <key> | Если повторить команду с тем же ключом, вы получите ту же новую задачу, а не ещё одну | Новый случайный ключ при каждом запуске | Нет |
--poll-interval-ms <milliseconds> | С --wait: как часто проверять | Сначала 2 секунды, затем постепенно до 10 секунд | Нет |
--wait-timeout-ms <milliseconds> | С --wait: перестать ждать через столько миллисекунд | 600000 (10 минут) | Нет |
Команда спрашивает Retry source task … Continue? [y/N]. В отличие от tasks create, она не показывает цену перед вопросом. Новая задача оплачивается по текущей цене модели, поэтому, если цена важна, сначала проверьте её командой spicyapi models get <model>.
Вывод: idempotencyKey, новый taskId, sourceTaskId (исходная задача), state, estimatedCost (зарезервированная сумма) и deadlineAt.
- Повторить можно только задачи
failedиexpired, а также старыеcanceled. Чтобы получить другой вариант успешного результата, используйтеtasks create. - Исходные входные данные используются без изменений, поэтому повтор помогает, только если сбой был временным. Сначала проверьте
errorCode; см. Повтор задачи, завершившейся ошибкой и Ошибки и повторы. - Если входные данные ссылались на загруженный файл, срок действия которого уже истёк, повтор завершится ошибкой; загрузите файл заново и используйте
tasks create. - Повтор сохраняет настройку хранения исходной задачи.
- Если
tasks createпотерял соединение до того, как вы увидели ID задачи, это не задача, завершившаяся ошибкой. Вместо повтора действуйте по разделу Как вернуться к задаче после прерванного ожидания.
tasks purge
Что делает: безвозвратно удаляет у завершённой задачи сгенерированные медиа, данные результата (сохранённые данные о результате), промпт и прочий текст входных данных — сразу, не дожидаясь истечения срока хранения.
spicyapi tasks purge <task-id> [--yes]| Аргумент или параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
task-id | Завершённая задача: succeeded, failed, expired или canceled | — | Да |
--yes | Пропустить вопрос о подтверждении | Выключен: спрашивать | Нет |
Содержимое задачи в состоянии queued или running уничтожить нельзя. Отменить такую задачу тоже нельзя — ни команды, ни API для отмены нет, — поэтому дождитесь её завершения командой spicyapi tasks wait <task-id>, а затем уничтожьте содержимое.
Команда объясняет, что будет удалено, и просит подтверждения, потому что это действие нельзя отменить. Сначала скачайте всё, что хотите сохранить.
Вывод: taskId, contentState (purged), purgedAt, contentRemovedBy (user), billingRetained (всегда true) и mediaDeletionPending, а за ними строка, где перечислено уничтоженное и сказано, что сохранённые медиа будут удалены примерно в течение минуты. Если contentState по-прежнему present, на этот раз ничего не удалено; попробуйте позже.
Бесплатно, и это не возврат денег: запись в журнале операций, списанная сумма, модель, состояние, временные метки и ID запроса остаются в учёте. См. Хранение и удаление данных.
files upload
Что делает: загружает файл с вашего компьютера, например исходное изображение для генерации видео из изображения, и выдаёт адрес spicy://, который нужно указать во входных данных.
spicyapi files upload <path> [--content-type <type>]| Аргумент или параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
path | Файл для загрузки | — | Да |
--content-type <type> | Тип файла, если его нельзя определить по имени: image/jpeg, image/png, image/webp, image/gif, video/mp4, video/webm, audio/mpeg или audio/wav | Определяется по расширению | Нет |
Поддерживаются изображения .jpg, .jpeg, .png, .webp и .gif до 10 MiB, видео .mp4 и .webm, а также аудио .mp3 и .wav до 90 MiB и не длиннее 600 секунд. Модель может задать собственные, более низкие ограничения.
spicyapi files upload ./start-frame.jpgfileId: fil_01k3m8x9q2z4v7n5p6r8s0t1w3
status: ready
bytes: 402118
contentType: image/jpeg
sha256: a91f4c2e5b7d16809e3f2a4c8d0b61e7c4a890e5d2f71b3c609ae8427d15f0c6
uri: spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3
expiresAt: 2026-09-18T09:12:11Z
width: 1280
height: 720Вывод: скопируйте значение uri в точности так, как оно выведено, в настройку модели для файла — часто это image_url. Пользоваться адресом можно до expiresAt, обычно один день. После этого загрузите файл снова. Загрузка бесплатна.
files download-url
Что делает: создаёт новую ссылку для скачивания результата завершённой задачи. Команда выводит ссылку, но сам файл не сохраняет.
spicyapi files download-url <task-id> [--key <key>]| Аргумент или параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
task-id | Задача, выполненная успешно | — | Да |
--key <key> | На какой результат дать ссылку, если задача создала несколько. Используйте значение key из output.assets в выводе tasks get | Первый результат | Нет |
Вывод: key, url и expiresAt. Ссылка действует около 20 минут; откройте её в браузере или скачайте файл через curl. Для задачи, которая ещё не выполнена успешно, вернётся «not found». Если файл ещё копируется, вы получите ошибку конфликта; подождите несколько секунд и попробуйте снова. Когда файлы задачи удалены, новую ссылку создать нельзя. Бесплатно.
webhooks verify
Что делает: если у вас есть сервер, который принимает обратные вызовы SpicyAPI (см. --callback-url), команда проверяет, что сохранённый обратный вызов настоящий и не изменён. Она целиком работает на вашем компьютере, и API-ключ ей не нужен.
spicyapi webhooks verify --body-file <path> --timestamp <seconds> --signature <base64> --payload-version <version>| Параметр | Что делает | По умолчанию | Обязателен |
|---|---|---|---|
--body-file <path> | Файл с телом обратного вызова в точности в том виде, в каком оно получено, байт в байт | — | Да |
--timestamp <seconds> | Значение заголовка X-Webhook-Timestamp | — | Да |
--signature <base64> | Значение заголовка X-Webhook-Signature | — | Да |
--payload-version <version> | Значение заголовка X-Webhook-Payload-Version: 1 или 2 | — | Да |
--secret-env <name> | Имя переменной окружения, в которой хранится ваш ключ подписи вебхука. Сам ключ никогда не вводится в командной строке | SPICY_WEBHOOK_SECRET | Нет |
--tolerance-seconds <seconds> | Насколько метка времени может расходиться с часами вашего компьютера | 300 | Нет |
Вывод: при успехе — payload (содержимое обратного вызова), payloadVersion, taskId, deliveryId (в версии 2) и timestamp. Если что-то не совпадает, команда выводит ошибку и завершается с ненулевым кодом. Бесплатно.
Ключ подписи создаётся автоматически при регистрации, но его значение никогда не показывается. Чтобы получить ключ, который можно скопировать, откройте в консоли страницу Вебхуки и нажмите Создать (или Сменить, если ключ уже настроен). Новый ключ показывается только один раз. Смена ключа действует сразу и без переходного периода: старый ключ немедленно перестаёт подписывать. См. Webhook.
Готовые рецепты
Сгенерировать изображение
spicyapi models list --modality image --json
spicyapi models get MODEL_ID_FROM_CATALOG --json
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --waitВыберите ID в выводе первой команды, составьте input.json по настройкам, которые показывает вторая, затем запустите третью и подтвердите ответом y. Каждый шаг подробно разобран в разделе Ваш первый результат.
Превратить изображение в видео
Найдите модель для генерации видео из изображения и её настройки
spicyapi models list --modality video --task image-to-video --json
spicyapi models get MODEL_ID_FROM_CATALOG --jsonВ inputSchema найдите настройку для исходного изображения (обычно image_url), настройку длительности (обычно duration_seconds) и всё, что перечислено в required.
Загрузите изображение
spicyapi files upload ./start-frame.jpgСкопируйте значение uri — оно начинается с spicy://.
Составьте входные данные
Создайте input.json, как в разделе Ваш первый результат, используя имена настроек модели и свой uri:
{
"prompt": "Slow push-in, rain running down the window",
"image_url": "spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3",
"duration_seconds": 5
}Проверьте цену и запустите генерацию
spicyapi tasks quote --model MODEL_ID_FROM_CATALOG --input-file input.json
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --wait --wait-timeout-ms 1800000Видео обычно оплачивается посекундно, поэтому выбранная длительность меняет цену. Генерация видео может занять несколько минут, поэтому в этом примере ожидание длится до 30 минут вместо 10 по умолчанию. Скачайте .mp4 по ссылке url, как в разделе Ваш первый результат.
Загруженным изображением можно пользоваться один день. После этого загрузите его снова.
Как вернуться к задаче после прерванного ожидания
Задача продолжает выполняться, даже если терминал закрылся, пропала сеть, компьютер ушёл в сон или истекло время ожидания. Как к ней вернуться, зависит от того, что вы видели:
-
Вы видели
Accepted: job_…или строкуRecover:под ошибкой. У вас есть ID задачи. Подождите снова или просто посмотрите на неё:spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000 spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3 -
Вы видели только строку
Idempotency-Key:— например, потому что соединение оборвалось во время создания задачи. Выполните ту же команду ещё раз, с той же моделью и теми же входными данными, и добавьте этот ключ:spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key 4f6755a5-0d72-4420-9f6b-9faf0e2b0241 --waitCLI снова покажет цену и спросит подтверждение, но если первая попытка была принята, SpicyAPI вернёт ту же самую задачу, а не запустит и не оплатит вторую. Это работает в течение 24 часов с тем же API-ключом. Если первая попытка так и не дошла, задача будет создана сейчас — один раз.
-
У вас нет ни того, ни другого. Выведите список последних задач и найдите нужную по времени и модели:
spicyapi --json tasks list --limit 10
Повтор задачи, завершившейся ошибкой
Сначала выясните, почему задача завершилась ошибкой:
spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3Затем посмотрите errorCode. При ошибке или истечении срока задачи резерв обычно освобождается полностью. Некоторые отказы по содержанию оплачиваются по принятой цене, только если это исключение прямо указано на странице модели. Окончательную сумму проверяйте по settled и cost. tasks retry отправляет те же входные данные ещё раз, поэтому помогает, только если причина была временной:
errorCode | Что делать |
|---|---|
rate_limited, upstream_unavailable, timeout, upstream_failed | Немного подождите и повторите один раз. Если снова ошибка, больше не повторяйте: при timeout попробуйте через tasks create меньшую длительность или более низкое разрешение |
generation_failed | Не повторяйте. Измените промпт или изображение и используйте tasks create: те же входные данные обычно приводят к той же ошибке |
invalid_asset | Не повторяйте: повтор использует старый файл. Загрузите файл заново и используйте tasks create с новым uri |
invalid_request, unsupported_combination | Не повторяйте без изменений. Измените настройки и используйте tasks create |
content_rejected | Не повторяйте без изменений. Модель отклонила этот запрос: измените промпт или выберите другую модель, затем используйте tasks create |
Полный список — на странице Ошибки и повторы.
Если повтор имеет смысл, запустите его. Он создаёт новую задачу, за которую списываются деньги:
spicyapi tasks retry job_01k3m8x9q2z4v7n5p6r8s0t1w3 --waitВыгрузка расходов
Сохраните в файл расходы текущего ключа за месяц:
spicyapi --json usage --from 2026-09-01 --to 2026-10-01 > usage-2026-09.jsonВ файле — итоги по дням и по моделям. Чтобы получить список по отдельным задачам, сохраните так же вывод spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --limit 100, переходя по nextCursor, пока hasMore равно true. Данные по всему аккаунту и счета есть в консоли.
Запуск CLI из скрипта
В скрипте некому ответить на Continue? [y/N], поэтому платные команды отказываются выполняться, если не добавить --yes. Если добавляете:
- сначала получите расчёт стоимости и проверьте цену в самом скрипте;
- давайте каждой генерации собственный постоянный
--idempotency-key, напримерposter-2026-09-17-v1, чтобы повторный запуск скрипта не привёл к двойному списанию; - добавьте
--jsonи читайтеstateиз результата: код завершения0ещё не означает, что задача выполнена успешно; - задайте для ключа лимиты расходов в консоли.
spicyapi --json tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key poster-2026-09-17-v1 --yes --wait > result.jsonСтоимость, подтверждение и безопасность
Какие команды стоят денег. Только tasks create и tasks retry. Цены указаны в долларах США. Расчёт стоимости, просмотр списков, проверки, загрузка, скачивание и удаление бесплатны.
Цена заранее. tasks quote рассчитывает стоимость запроса, ничего не запуская. tasks create получает собственный расчёт и перед вопросом показывает Estimated charge и maximum charge. Когда задача принята, ориентировочная стоимость резервируется (held), и это же максимум, который с вас могут списать. Если задача выполнена успешно, вы платите за то, что фактически получено, но не больше этой суммы, а остаток возвращается на баланс.
Подтверждение. Continue? [y/N] означает, что ответ — нет, пока вы не введёте y. --yes отвечает за вас, поэтому используйте его, только когда уже знаете цену. Если CLI запущен там, где спросить нельзя, например в скрипте или с входными данными из конвейера, а --yes не указан, он отказывается выполнять команду, а не считает ответ положительным. tasks purge спрашивает так же, потому что удаление нельзя отменить. tasks retry тоже спрашивает, но цену заранее не показывает.
Ключ идемпотентности простыми словами. Это метка для одной генерации, вроде номера заказа. Каждая команда tasks create и tasks retry выводит такую метку. Если интернет пропал и вы не уверены, запустилась ли генерация, выполните ту же команду ещё раз с --idempotency-key и выведенным значением: вы получите исходную задачу, и деньги не будут списаны дважды. Метка действует 24 часа с тем же API-ключом. Не используйте её для другой генерации: тот же ключ с другими входными данными отклоняется.
Отмены нет. Принятую задачу отменить нельзя. Ctrl + C, закрытие терминала или отзыв ключа останавливают только ожидание; задача завершится и будет оплачена как обычно.
При ошибке или истечении срока задачи резерв обычно освобождается полностью. Некоторые отказы по содержанию оплачиваются по принятой цене, только если это исключение прямо указано на странице модели. Окончательную сумму проверяйте по settled и cost.
Скачивайте то, что хотите сохранить. Файлы результатов хранятся не дольше примерно 14 дней (или меньше, если так задано в аккаунте или в --retention), а затем удаляются навсегда. Ссылки для скачивания действуют около 20 минут, но пока файл существует, всегда можно запросить новую. Загруженными файлами можно пользоваться один день. Текст промптов по умолчанию стирается через 30 дней. Записи биллинга сохраняются. См. Хранение и удаление данных.
Лимиты расходов. У каждого ключа могут быть дневной лимит, месячный бюджет и общий лимит; они задаются на странице Ключи API. У новых ключей лимита нет, пока вы его не зададите. Задача, которая превысила бы лимит, отклоняется ещё до запуска.
Ваш ключ. CLI читает ключ только из SPICY_API_KEY, никогда его не выводит, а в подсказках к ошибкам показывает не больше первых девяти символов (sk-spicy-).
Подробнее: Оплата, Идемпотентность, Необратимость и повтор.
Устранение неполадок
Найдите сообщение, которое видите. Ошибки от SpicyAPI заканчиваются на (request req_…); если обращаетесь в поддержку, укажите это значение, но никогда не отправляйте свой ключ.
Все коды ошибок объяснены на странице Ошибки и повторы, а шаги восстановления — на странице Диагностика и восстановление.
Исходный код
Пакет распространяется под лицензией MIT и разрабатывается открыто по адресу github.com/spicyapi-ai/spicy-cli. Там же можно прочитать код любой команды с этой страницы, сообщить о поведении, которое расходится с описанным, или предложить изменение.
Что дальше
Каталог моделей и схемы
Как устроены актуальный каталог и настройки каждой модели
Оплата
Цены, резервирование, лимиты расходов и счета
Хранение и удаление данных
Сколько хранятся файлы и промпты и как удалить их раньше
Ошибки
Все коды ошибок и какие из них стоит повторять
TypeScript SDK
То же самое из вашего собственного кода на JavaScript или TypeScript
Python SDK
То же самое из вашего собственного кода на Python
Go SDK
То же самое из вашего собственного кода на Go
MCP-сервер
Пусть ИИ-ассистент для программирования выполняет эти шаги, с подтверждением перед любыми расходами
Agent Skill
Научите ИИ-агента безопасной работе со SpicyAPI
Быстрый старт
Тот же путь напрямую через HTTP API
Агенты и автоматизация
Какой официальный инструмент выбрать, и регламент рабочей эксплуатации для ИИ-агентов, фоновых обработчиков на бэкенде и повторяемых медиаконвейеров.
MCP-сервер
Подключите Claude, Cursor, VS Code и других ИИ-ассистентов к SpicyAPI и прямо в переписке просматривайте модели, сравнивайте цены, генерируйте медиа и забирайте результаты — каждый платный шаг подтверждаете вы сами.

