Изображения
Создание изображений по тексту или с референсами. Общие правила авторизации и статусов — в обзоре API.
- Nano Banana 2 — параметры и актуальные цены.
- Nano Banana Pro — параметры и актуальные цены.
- GPT Image 2 — скоро
Параметры создания
| Поле | Обязательное | Значения |
|---|---|---|
model | Да | nano-banana-2 или nano-banana-pro. |
quality | Да | В запросе: 1k, 2k, 4k. В ответе нормализуется в 1K, 2K, 4K. |
prompt | Да | Непустая строка до 12 000 символов. |
aspect_ratio | Нет | 1:1 по умолчанию; также 9:16, 16:9, 4:5, 3:4, 4:3, 2:3, 3:2. |
upload_ids | Нет | Массив до пяти уникальных UUID, полученных через POST /files. |
Быстрый старт
1. Загрузите референс (необязательно)
curl -X POST https://corp.aitale.ru/api/v1/files \ -H "Authorization: Bearer $AITALE_CORP_KEY" \ -F "file=@reference.jpg"
Если генерация не использует исходное изображение, пропустите этот шаг и не передавайте upload_ids. Для референса используется только multipart/form-data. Один запрос загружает один JPG, PNG или WEBP до 8 МиБ (8 388 608 байт). Для одной генерации можно указать до пяти уникальных upload_id. Base64 и внешние URL не принимаются. Upload хранится 12 часов и принадлежит тому API-ключу, чей аккаунт его загрузил.
2. Создайте задание
curl -X POST https://corp.aitale.ru/api/v1/images/generations \
-H "Authorization: Bearer $AITALE_CORP_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-8472-image-1" \
-H "X-Request-Id: my-trace-8472" \
-d '{
"model": "nano-banana-2",
"quality": "2k",
"aspect_ratio": "4:5",
"prompt": "Создай рекламный портрет продукта",
"upload_ids": ["UUID_FROM_UPLOAD"]
}'Заголовок Idempotency-Key обязателен. Повтор с тем же ключом и телом возвращает исходное задание; тот же ключ с другими параметрами дает 409 idempotency_conflict.
{
"data": {
"id": "f01d6d17-...",
"object": "image_generation",
"status": "queued",
"model": "nano-banana-2",
"quality": "2K",
"cost_tokens": "2.50",
"result": null,
"error": null
}
}3. Опрашивайте статус
curl https://corp.aitale.ru/api/v1/images/generations/f01d6d17-... \ -H "Authorization: Bearer $AITALE_CORP_KEY"
Соблюдайте Retry-After (обычно 2 секунды) и не запускайте параллельный polling одного задания. После succeeded скачайте URL из result.url отдельным HTTP-запросом с тем же Bearer-ключом. Обычный тег <img src="…"> не передаст авторизацию. Сохраните бинарный ответ у себя: результат удаляется через 12 часов, а API не предоставляет постоянное хранилище.
Полный пример на Python
Функция use_your_fallback в примере обозначает ваш собственный резервный маршрут. Правила — в разделе ошибок.
import os, time, uuid, requests
BASE = "https://corp.aitale.ru/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['AITALE_CORP_KEY']}"}
with open("reference.jpg", "rb") as image:
uploaded = requests.post(
f"{BASE}/files", headers=HEADERS,
files={"file": ("reference.jpg", image, "image/jpeg")}, timeout=30,
).json()["data"]
response = requests.post(
f"{BASE}/images/generations",
headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
json={
"model": "nano-banana-pro", "quality": "4k",
"aspect_ratio": "1:1", "prompt": "Product photo",
"upload_ids": [uploaded["id"]],
}, timeout=15,
)
if response.status_code == 503:
use_your_fallback(response.json())
response.raise_for_status()
job = response.json()["data"]
while job["status"] in ("queued", "processing"):
time.sleep(int(response.headers.get("Retry-After", "2")))
response = requests.get(f"{BASE}/images/generations/{job['id']}", headers=HEADERS, timeout=15)
response.raise_for_status()
job = response.json()["data"]
if job["status"] == "succeeded":
content = requests.get(job["result"]["url"], headers=HEADERS, timeout=60)
content.raise_for_status()
open("result.png", "wb").write(content.content)
else:
use_your_fallback(job["error"])