Перейти к основному контенту

Редактирование Nano Banana 2 принимает от одного до четырнадцати исходных изображений и описание правки, в 0.5k–4k. Сохраните форму исходника или выберите одно из четырнадцати соотношений сторон, с необязательным поиском в вебе и по изображениям.

От $0.036/изобр.На 20% ниже официальной цены

Рабочая область

Отправить запрос

Быстрый старт

Примеры используют публичные параметры выбранного эндпоинта. Замените API-ключ и примеры медиафайлов, затем отправьте запрос со своего сервера.

SDK и интеграции
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Аутентификация API

Храните API-ключ в серверной переменной окружения SPICY_API_KEY. Используйте Bearer-аутентификацию и Content-Type: application/json для JSON-запросов.

Authorization: Bearer $SPICY_API_KEY
Nano Banana 2 · Image Editing · Пример результата
Пример результатаИспользовать пример
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "google/nano-banana-2/edit",
  "input": {
    "aspect_ratio": "auto",
    "enable_image_search": false,
    "enable_web_search": false,
    "image_urls": [
      "https://example.com/reference.png"
    ],
    "prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
    "resolution": "1k"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Пример построен по входной схеме этой модели — той же, по которой API проверяет каждый запрос.

Входные параметры

Поместите эти поля в объект input тела запроса. Имена и типы соответствуют API. Не предполагайте значение по умолчанию, если оно не задано.

image_urlsarray<string>ОбязательноВлияет на цену

От 1 до 14 исходных изображений. Напишите в промпте, что даёт каждое: человека, обстановку, продукт. Экономичный маршрут принимает до 10; правка с 11–14 исходниками выполняется на официальном маршруте по официальной цене, поэтому оставьте Official fallback включённым. На официальном маршруте каждый исходник добавляет небольшую фиксированную плату.

По умолчанию
Не задано
Ограничения
minItems:1
maxItems:14
promptstringОбязательно

До 5000 символов. Опишите объект, обстановку, свет и объектив полными предложениями; слова в кавычках рисуются как текст на изображении.

По умолчанию
Не задано
Ограничения
minLength:1
maxLength:5000
official_fallbackbooleanНеобязательно

По умолчанию включено. Каждая правка сначала выполняется по эконом-маршруту. Если этот маршрут не может её завершить, например потому что отклоняет правку уровня Мягкий, правка запускается повторно по официальному маршруту и тарифицируется по официальной цене, а не по эконом-цене. Выключите, чтобы платить только эконом-цену; тогда правка может быть отклонена или завершиться ошибкой, а размер 0,5K, правки с более чем 10 исходными изображениями, веб-поиск и поиск изображений будут недоступны.

По умолчанию
true
enable_image_searchbooleanНеобязательноВлияет на цену

По умолчанию выключено. Если включить, модель перед рисованием ищет в интернете референсные изображения — это помогает с реальными местами и продуктами. Может добавить плату за поиск, она видна в расчёте стоимости. В этом случае правка выполняется на официальном маршруте по официальной цене, поэтому оставьте Official fallback включённым.

По умолчанию
false
enable_web_searchbooleanНеобязательноВлияет на цену

По умолчанию выключено. Если включить, модель перед рисованием проверяет актуальные факты: погоду, даты, достопримечательности. Добавляет к запросу плату за поиск, она видна в расчёте стоимости. В этом случае правка выполняется на официальном маршруте по официальной цене, поэтому оставьте Official fallback включённым.

По умолчанию
false
resolutionstringНеобязательноВлияет на цену

0.5k, 1k (по умолчанию), 2k или 4k. Квадратное изображение имеет сторону 512, 1024, 2048 или 4096 пикселей; у каждого уровня своя цена. Уровень 0.5k выполняется только на официальном маршруте по официальной цене, поэтому для него оставьте Official fallback включённым.

По умолчанию
"1k"
Допустимые значения
"0.5k""1k""2k""4k"
aspect_ratiostringНеобязательно

auto (по умолчанию) сохраняет соотношение исходного изображения; либо выберите одно из четырнадцати соотношений, включая крайние баннерные 4:1, 1:4, 8:1 и 1:8. Соотношение сторон на цену не влияет.

По умолчанию
"auto"
Допустимые значения
"auto""1:1""3:2""2:3""3:4""4:3""4:5""5:4""9:16""16:9""21:9""1:4""4:1""1:8""8:1"

Отследить задачу

HTTP 202 означает принятие задачи, а не завершение генерации. Сохраните полученный taskId и проверяйте эту задачу. Не создавайте новую, пока ждёте результат.

Ответ при приёме задачи
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

В ответе о приёме есть оценка стоимости — приложение сможет показать ту же сумму в истории задач и в расчётах.

Получить задачу
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Начните с интервала около 2 секунд и постепенно увеличивайте его. Прекратите опрос при конечном состоянии. После сбоя соединения используйте исходный taskId. Повторно создавать задачу можно только с исходным ключом идемпотентности и исходным телом запроса.

Или пусть вызов придёт сам
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Передайте callBackUrl при создании задачи — готовая запись придёт к вам POST-запросом, и никакого опроса не понадобится. В каждой доставке есть X-Webhook-Timestamp, X-Webhook-Signature и X-Webhook-Payload-Version. Подпись — это HMAC-SHA256 в base64 от taskId.timestamp.sha256(body), поэтому проверять её нужно по исходным байтам: если разобрать JSON и сериализовать заново, байты изменятся и проверка не пройдёт. Неудачные доставки повторяются, так что один и тот же taskId может прийти дважды — сделайте обработчик идемпотентным. Сначала ответьте 2xx, работу выполняйте после: медленный обработчик считается неудачной доставкой.

Прочитать результат

Обрабатывайте output только при state, равном succeeded. При ошибке проверьте errorCode, errorMessage и request_id. Стоимость и состояния в примерах не являются фактическим счётом.

Пример ответа после завершения
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "google/nano-banana-2/edit",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.png",
          "mime": "image/png",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.png?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Доступные файлы можно открыть или скачать по assets[].url без заголовка API Authorization. Подписанная ссылка действует до expiresAt. Чтобы обновить её, повторно запросите задачу в течение срока хранения файла. У ожидающих или недоступных файлов URL отсутствует. Не передавайте подписанные ссылки посторонним.

SDK и интеграции

Используйте SpicyAPI в приложении, терминале, ИИ-ассистенте или визуальном процессе. Выберите руководство по настройке.

Использование в ComfyUI

Установите узлы SpicyAPI через ComfyUI Manager или командой ниже и найдите на холсте Nano Banana 2 · Image Editing. У узла те же параметры, что и на этой странице, а цена показывается до запуска.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi