Skip to main content
更新日:2026-09-18

非同期画像生成

画像生成は 1 回あたり通常 20〜120 秒かかります。同期 API では HTTP 接続を開いたまま待つ必要があり、ゲートウェイやプロキシの読み取りタイムアウトにかかりやすく、base64 のレスポンスも大きくなります。非同期モードでは呼び出しを 2 回に分けます。
  1. 送信:リクエストは 1 秒以内に 202 とタスク ID を返します。
  2. ポーリングGET /v1/tasks/{id} で完了を待ちます。完了後、result には各画像の https URLmedia.crazyrouter.com に永続保存)が入ります。デフォルトで base64 は返しません。
モデル名・リクエストボディ・課金は同期呼び出しと完全に同じです。 非同期は「いつ結果を受け取るか」だけを変えます。同じ API キーで同期と非同期を混在させて構いません。失敗したタスクは課金されません。

対応モデル

方法 1:Gemini パスエイリアス(Gemini クライアント推奨)

ボディ・ヘッダー・クエリ文字列を 1 バイトも変更する必要はありません。 アクション接尾辞 :generateContent:asyncGenerateContent に置き換えるだけです。
cURL
202 が返ります:
レスポンスの model は解決後の実モデル名(例:gemini-3.1-flash-image-preview)で、利用ログと一致します。送信時は引き続き nano-banana-2 を使えます。参照画像による編集は同期と同じで、contentspartsinlineData(base64)または fileData(URL)を入れてください。
:asyncGenerateContent は画像出力モデル専用です。テキストモデルで呼ぶと 400 async mode is only available for image models になります。ストリーミングの :streamGenerateContent に非同期版はありません。

方法 2:OpenAI 画像エンドポイント + Prefer ヘッダー

既存の /v1/images/generations または /v1/images/edits リクエストに HTTP ヘッダー Prefer: respond-async を付けるだけです。ボディの "async": true(JSON)やフォームフィールド async=true(multipart)でも同じ効果です。
レスポンスヘッダーに Preference-Applied: respond-async が付き、ボディは方法 1 と同じ 202 + タスク ID です。

タスクの照会

照会できるのは自分のアカウントで送信したタスクのみで、それ以外の 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 は新しいタスクを再送信してよいという意味で、自動再試行は行われません。

冪等な送信

ネットワークの再試行で同じタスクが二重送信されることがあります。送信リクエストに Idempotency-Key: <任意の文字列> ヘッダーを付けると、同一アカウント・同一キーでは同じタスク ID が返り(2 回目は 202 ではなく 200)、重複生成も重複課金も起きません。

同期と非同期の比較