更新日:2026-09-18
非同期画像生成
画像生成は 1 回あたり通常 20〜120 秒かかります。同期 API では HTTP 接続を開いたまま待つ必要があり、ゲートウェイやプロキシの読み取りタイムアウトにかかりやすく、base64 のレスポンスも大きくなります。非同期モードでは呼び出しを 2 回に分けます。- 送信:リクエストは 1 秒以内に
202とタスク ID を返します。 - ポーリング:
GET /v1/tasks/{id}で完了を待ちます。完了後、resultには各画像の https URL(media.crazyrouter.comに永続保存)が入ります。デフォルトで base64 は返しません。
モデル名・リクエストボディ・課金は同期呼び出しと完全に同じです。 非同期は「いつ結果を受け取るか」だけを変えます。同じ API キーで同期と非同期を混在させて構いません。失敗したタスクは課金されません。
対応モデル
方法 1:Gemini パスエイリアス(Gemini クライアント推奨)
ボディ・ヘッダー・クエリ文字列を 1 バイトも変更する必要はありません。 アクション接尾辞:generateContent を :asyncGenerateContent に置き換えるだけです。
cURL
202 が返ります:
レスポンスの
model は解決後の実モデル名(例:gemini-3.1-flash-image-preview)で、利用ログと一致します。送信時は引き続き nano-banana-2 を使えます。参照画像による編集は同期と同じで、contents の parts に inlineData(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 です。
タスクの照会
404 です。2〜3 秒間隔でポーリングし、10 分経っても完了しない場合は失敗とみなしてください。
ステータス
完了時のレスポンス(Gemini 系)
result はネイティブの Gemini GenerateContentResponse そのもので、inlineData が画像 URL を指す fileData に置き換わっている点だけが異なります。
完了時のレスポンス(OpenAI 系)
result は同期の /v1/images/* レスポンスと同じ形で、画像は data[].url にあります。
?inline=true を付けてください。保存済み画像を読み戻して inlineData / b64_json に戻します(大きな画像では遅いため非推奨)。
失敗時のレスポンス
retryable: true は新しいタスクを再送信してよいという意味で、自動再試行は行われません。
冪等な送信
ネットワークの再試行で同じタスクが二重送信されることがあります。送信リクエストにIdempotency-Key: <任意の文字列> ヘッダーを付けると、同一アカウント・同一キーでは同じタスク ID が返り(2 回目は 202 ではなく 200)、重複生成も重複課金も起きません。