Для разработчиков

Запускайте генерацию программно тем же движком, что и на сайте

1

Получите ключ

Он показывается один раз, сохраните его в секретах вашего сервиса

2

Выберите модель

Каталог и схему параметров каждой модели отдаёт сам API. Возьмите нужный code из списка

curl https://api.spello.ru/v1/models \
  -H "Authorization: Bearer spl_live_ВАШ_КЛЮЧ"
3

Запустите генерацию

Отправьте задачу: tool это code модели, payload проверяется по её схеме. В ответе придёт id задачи

curl -X POST https://api.spello.ru/v1/tasks \
  -H "Authorization: Bearer spl_live_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"tool": "nano_banana", "payload": {"prompt": "котик"}}'
4

Дождитесь результата

Опрашивайте задачу по id, пока status не станет done, error или blocked. Ссылка на готовый файл придёт в result.artifacts

curl https://api.spello.ru/v1/tasks/ID_ЗАДАЧИ \
  -H "Authorization: Bearer spl_live_ВАШ_КЛЮЧ"

Полный пример: правка фото

Самодостаточный скрипт: загружает фото, правит его через Nano Banana Pro, ждёт результат и печатает ссылку на готовый файл. Ключ берётся из переменной окружения SPELLO_API_KEY, задайте её перед запуском. Положите photo.jpg рядом со скриптом. Для Python нужен пакет requests, для JavaScript подойдёт Node 18 или новее

import os
import time
import requests

API = "https://api.spello.ru/v1"
KEY = os.environ["SPELLO_API_KEY"]
AUTH = {"Authorization": f"Bearer {KEY}"}

# 1. Загружаем фото на вход
with open("photo.jpg", "rb") as f:
    upload = requests.post(
        f"{API}/uploads/image",
        headers=AUTH,
        files={"file": ("photo.jpg", f, "image/jpeg")},
    )
upload.raise_for_status()
media = upload.json()["media"]

# 2. Запускаем правку через Nano Banana Pro
created = requests.post(
    f"{API}/tasks",
    headers={**AUTH, "Content-Type": "application/json"},
    json={
        "tool": "nano_banana_pro",
        "payload": {
            "prompt": "добавь на фон закатное небо, лицо не меняй",
            "references": [media],
            "resolution": "1K",
        },
    },
)
created.raise_for_status()
task_id = created.json()["id"]

# 3. Ждём результат
while True:
    time.sleep(2)
    task = requests.get(f"{API}/tasks/{task_id}", headers=AUTH).json()
    print(task)
    if task["status"] in ("done", "error", "blocked"):
        break

# 4. Забираем ссылку на готовый файл
if task["status"] == "done":
    print(task["result"]["artifacts"][0]["media"]["url"])
else:
    print("не удалось:", task.get("message"))
Все запросы идут на https://api.spello.ru/v1. Список моделей, их параметры и схемы во вкладке «Документация»