Перейти к основному содержанию
Обновление содержания: 2026-09-18

Асинхронное создание изображений

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

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

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

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

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

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

Запрос задачи

Запрос разрешён только для задач, отправленных текущим аккаунтом; задачи других аккаунтов всегда 404. Рекомендуется опрашивать раз в 2-3 секунды, если через 10 минут задача не завершена — считать проваленной.

Статусы

Ответ при завершении задачи (Gemini)

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

Ответ при завершении задачи (OpenAI)

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

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

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

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

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

Отличия от синхронного режима

Связанные страницы