Skip to main content
Обновлено: 2026-09-18

Асинхронная генерация изображений

Одна генерация изображения обычно занимает 20–120 секунд. Синхронные эндпоинты держат HTTP-соединение открытым всё это время, что упирается в таймауты чтения шлюзов и прокси, а base64-ответы получаются большими. Асинхронный режим разбивает вызов на два шага:
  1. Отправка: запрос возвращает 202 и ID задачи менее чем за секунду.
  2. Опрос: GET /v1/tasks/{id} до завершения; в result будет https-URL каждого изображения (постоянно хранится на media.crazyrouter.com). Base64 по умолчанию не возвращается.
Имена моделей, тела запросов и тарификация полностью совпадают с синхронными вызовами. Асинхронность меняет только когда вы получаете результат; один и тот же API-ключ может свободно смешивать синхронные и асинхронные запросы. Неудавшиеся задачи не тарифицируются.

Поддерживаемые модели

Способ 1: алиас пути Gemini (рекомендуется для Gemini-клиентов)

Не меняйте ни одного байта тела, заголовков или строки запроса. Замените только суффикс действия :generateContent на :asyncGenerateContent.
cURL
Ответ 202:
Поле model в ответе — это разрешённая базовая модель (например gemini-3.1-flash-image-preview), как в журнале расходов; отправлять по-прежнему можно с nano-banana-2. Редактирование по референсу работает как в синхронном вызове: положите части inlineData (base64) или fileData (URL) в contents.
:asyncGenerateContent принимает только модели с выводом изображений; текстовая модель вернёт 400 async mode is only available for image models. У потокового действия :streamGenerateContent асинхронной формы нет.

Способ 2: эндпоинты изображений OpenAI с заголовком Prefer

Добавьте HTTP-заголовок Prefer: respond-async к неизменённому запросу /v1/images/generations или /v1/images/edits. Эквивалентно — поле тела "async": true (JSON) или поле формы async=true (multipart).
В ответе будет заголовок Preference-Applied: respond-async и то же тело 202 + ID задачи, что и в способе 1.

Опрос задачи

Читать можно только задачи своего аккаунта; любой чужой ID даёт 404. Опрашивайте каждые 2–3 секунды; отсутствие завершения в течение 10 минут считайте ошибкой.

Значения статуса

Ответ при завершении (семейство Gemini)

result — это нативный Gemini GenerateContentResponse; единственное отличие: каждая часть inlineData заменена на fileData с URL изображения:

Ответ при завершении (семейство OpenAI)

result имеет ту же форму, что синхронный ответ /v1/images/*; изображения в data[].url:
Если base64 действительно нужен, добавьте ?inline=true к запросу опроса — сохранённое изображение будет прочитано обратно в inlineData / b64_json (не рекомендуется: медленно для больших картинок).

Ответ при ошибке

retryable: true означает, что можно отправить новую задачу; автоматических повторов нет.

Идемпотентная отправка

Сетевые повторы могут отправить одну задачу дважды. Передайте заголовок Idempotency-Key: <любая строка> при отправке: для одного аккаунта и ключа вернётся тот же ID задачи (второй вызов ответит 200 вместо 202) без повторной генерации и повторного списания.

Синхронно и асинхронно: сравнение