画像生成
Nano Banana、GPT-Image、Seedream、Wan 2.7 の各モデルファミリーで、テキストプロンプトと参照画像から画像を生成します。同期実行と非同期タスクに対応しています。
画像生成は、テキストプロンプト(任意で参照画像による誘導つき)を 1 枚以上の画像に変換します。4 つのファミリーにまたがる 10 のモデルが、1 つのリクエストスキーマと 1 組のエンドポイントを共有します。モデルは model フィールドで選びます。
呼び出し方は 3 通りあります。
- 同期 —
POST /v1/images/generationは画像が完成するまでブロックし、モデルの生の出力(base64 画像データ)をレスポンスボディで返します。 - 非同期 —
POST /v1/images/generation/asyncは即座にtaskIdを返します。ホスティングされた画像 URL はGET /v1/images/generation/tasks/{taskId}をポーリングして取得します。 - 先に見積もり —
POST /v1/images/generation/estimate-creditsは、何も消費せずにクレジットコストと、アカウントが生成可能かどうかを返します。
本ページのすべてのエンドポイントは OpenAPI の Base URL
https://api.marswave.ai/openapi を使用し、Authorization: Bearer $LISTENHUB_API_KEY
ヘッダーで API キーによる認証を行います。キーは
listenhub.ai/settings/api-keys
で作成できます。
モデルを選ぶ
まず下の表でモデルを選び、次に各ファミリーのページで正確な制限、挙動の癖、サンプルを確認してください。
| モデル | ファミリー | 主な用途 | サイズ | アスペクト比 | 参照画像の上限 |
|---|---|---|---|---|---|
gpt-image-2 (デフォルト) | GPT-Image | プロンプト追従性が高く、サイズごとの固定料金 | 1K, 2K, 4K | 標準 10 種 | 4 |
gpt-image-2.5-flare | GPT-Image | 同じ料金と制限で使える 2 つ目の GPT-Image スタイル | 1K, 2K, 4K | 標準 10 種 | 4 |
gpt-image-2.5-sunburst | GPT-Image | 同じ料金と制限で使える 3 つ目の GPT-Image スタイル | 1K, 2K, 4K | 標準 10 種 | 4 |
gpt-image-2-official | GPT-Image | quality が効く唯一のモデル。料金はトークン単位 | 1K, 2K, 4K | 標準 10 種 | 4 |
gemini-3-pro-image | Nano Banana | 最も精細な出力。Nano Banana Pro | 1K, 2K, 4K | 標準 10 種 | 14 |
gemini-3.1-flash-image | Nano Banana | より高速・低コストな生成。1:4 / 4:1 / 1:8 / 8:1 を受け付ける唯一の Nano Banana ティア | 1K, 2K, 4K | 14 種すべて | 14 |
gemini-nano-banana-2.1 | Nano Banana | Nano Banana 2.1。1K/2K は 15 クレジット、4K は 30 クレジット | 1K, 2K, 4K | 標準 10 種 | 14 |
seedream-5-0-pro | Seedream | 座標とカラーコードによる精密な領域編集 | 1K, 2K | 14 種すべて | 10 |
wan2.7-image | Wan 2.7 | よく使う 5 種の比率でコスト効率のよい生成 | 1K, 2K | 5 種 | 9 |
wan2.7-image-pro | Wan 2.7 | 同じ 5 種の比率に 4K 出力を追加 | 1K, 2K, 4K | 5 種 | 9 |
model を省略した場合のデフォルトは gpt-image-2 です。標準 10 種の比率は 1:1、2:3、3:2、3:4、4:3、4:5、5:4、9:16、16:9、21:9 で、極端な 4 種を除くすべてです。詳しいルールは アスペクト比 を参照してください。
Nano Banana
Nano Banana Pro、Flash、2.1 のモデル ID、制限、料金、リクエスト例。
GPT-Image
gpt-image-2、2.5 の Flare と Sunburst、そして quality が効く唯一のモデルである GPT-Image-2 Pro。
Seedream
seedream-5-0-pro:プロンプトに座標を書いて、既存画像の指定した領域を編集します。
Wan 2.7
wan2.7-image と wan2.7-image-pro:厳密に検証される 5 種の比率、Pro では 4K に対応。
呼び出しの流れ
クレジットを見積もる
生成に使う予定と同じボディで POST /v1/images/generation/estimate-credits を呼び出します。何も消費せずに credits と canGenerate が返ります。クレジットコストはモデルとサイズで変わります。ハードコードせず、このエンドポイントから読み取ってください。
画像を生成する
画像が完成するまでブロックするなら POST /v1/images/generation を、即座に taskId を受け取るなら POST /v1/images/generation/async を呼び出します。
結果を受け取る
同期エンドポイントはレスポンスボディで base64 画像データを返します。非同期エンドポイントは画像をこちらで保存します。status が success になるまで GET /v1/images/generation/tasks/{taskId} をポーリングし、ホスティングされた images[].url を読んでください。
リクエストパラメータ
これらのパラメータは POST /v1/images/generation、POST /v1/images/generation/async、POST /v1/images/generation/estimate-credits に適用されます。3 つのエンドポイントは 1 つのリクエストスキーマを共有します。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
provider | string | はい¹ | モデルプロバイダー:google、openai、bytedance、alibaba、quotaflow のいずれか |
model | string | いいえ | モデル名。デフォルトは gpt-image-2。旧プレビュー ID は GA の ID に正規化されます。モデルを選ぶ を参照 |
prompt | string | はい² | 生成する画像のテキスト説明 |
referenceImages | array | いいえ | 生成を誘導する参照画像。参照画像 を参照 |
referenceImages[].fileData | object | いいえ | URL 形式で渡す参照画像 |
referenceImages[].fileData.fileUri | string | はい | 画像 URL — スキームは http、https、gs のいずれか |
referenceImages[].fileData.mimeType | string | はい | MIME タイプ:image/png、image/jpeg、image/webp、image/heic、image/heif |
referenceImages[].inlineData | object | いいえ | base64 エンコードデータ形式で渡す参照画像 |
referenceImages[].inlineData.data | string | はい | base64 エンコードされた画像データ |
referenceImages[].inlineData.mimeType | string | はい | MIME タイプ:fileData.mimeType と同じ 5 つの値 |
imageConfig | object | いいえ | 画像出力の設定。デフォルトは { "imageSize": "2K" } |
imageConfig.imageSize | string | いいえ | 出力解像度:1K、2K(デフォルト)、4K。モデルの制限に従います |
imageConfig.aspectRatio | string | いいえ | アスペクト比。ファミリーごとのデフォルト解決ルールは アスペクト比 を参照 |
imageConfig.quality | string | いいえ | low、medium、high のいずれか。gpt-image-2-official でのみ有効で、それ以外のモデルではすべて無視されます |
¹ provider は 2 つの生成エンドポイントでは必須、estimate-credits では任意です。
² prompt は 2 つの生成エンドポイントでは必須です。estimate-credits では空でも省略しても構いません(入力トークンの見積もりにのみ影響します)。
referenceImages の各要素には、fileData と inlineData の少なくとも一方が必要です。指定するのはどちらか一方だけにしてください。両方を含む要素も検証は通りますが、その場合の挙動は未定義です。
provider は検証されますが、ルーティングには使われません。上流の選択は完全に model によって決まります。
リクエストを読みやすく保つため、本ページの各例のようにモデルに対応するベンダーを送ってください。ただし、
食い違っていても実行されるモデルは変わりません。
gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst に quality を渡してもエラーにはなりません。
値は破棄され、estimate-credits は警告 quality_ignored_for_gpt_image_2_lite を返します。
指定した品質でレンダリングされるのは gpt-image-2-official だけです。
GPT-Image を参照してください。
アスペクト比
カタログ全体では 14 種の比率があります。10 種は標準で、ほとんどのモデルが受け付けます。4 種は極端で、受け付けるのは gemini-3.1-flash-image と seedream-5-0-pro だけです。
| 比率 | 説明 | 区分 |
|---|---|---|
1:1 | 正方形 | 標準 |
2:3 | 縦長 | 標準 |
3:2 | 横長 | 標準 |
3:4 | 縦長 | 標準 |
4:3 | 横長 | 標準 |
4:5 | 縦長 | 標準 |
5:4 | 横長 | 標準 |
9:16 | 縦向き / モバイル | 標準 |
16:9 | ワイドスクリーン | 標準 |
21:9 | ウルトラワイド | 標準 |
1:4 | 細長い縦長 | 極端 |
4:1 | 幅広の横長 | 極端 |
1:8 | 極端な縦長 | 極端 |
8:1 | パノラマ | 極端 |
imageConfig.aspectRatio にはスキーマレベルのデフォルト 1:1 があります。aspectRatio を持たない
imageConfig オブジェクトを送ると、どのモデルでも正方形の画像になります。下のファミリーごとの挙動が
適用されるのは imageConfig 自体をまるごと省略した場合だけです。imageConfig 自身のデフォルトは
{ "imageSize": "2K" } で、比率は未設定のままになるからです。
上のスキーマデフォルトで埋まらなかった場合、aspectRatio は次のように解決されます。
| ファミリー | 未設定のままの場合 | 非対応の場合 |
|---|---|---|
| Nano Banana | 1:1 に解決されます | 400、code: 29003 |
| GPT-Image | 未設定のまま — モデルがプロンプトに合わせて比率を選びます | 400、code: 26019。メッセージに対応する比率の一覧が入ります |
| Seedream | 未設定のまま | 受け付けます — Seedream の検証対象は比率ではなくサイズです |
| Wan 2.7 | 未設定のまま | 400、code: 26019。メッセージに対応する比率の一覧が入ります |
画像サイズ
imageConfig.imageSize は 1K、2K(デフォルト)、4K を受け付けます。クレジット消費はモデルとサイズによって異なります。
| モデル | 1K | 2K | 4K |
|---|---|---|---|
| GPT-Image の全モデル | 対応 | 対応 | 対応 |
| Nano Banana の全モデル | 対応 | 対応 | 対応 |
seedream-5-0-pro | 対応 | 対応 | 400 |
wan2.7-image | 対応 | 対応 | 400 |
wan2.7-image-pro | 対応 | 対応 | テキストから画像のみ — 参照画像ありでは 400 |
クレジットコストをハードコードしないでください。使用するモデル、サイズ、比率での正確な数値は estimate-credits を呼び出して取得してください。
参照画像
参照画像は生成を誘導します。各画像は URL(fileData)か base64(inlineData)のどちらか一方で渡し(両方は不可)、配列はモデルの上限内に収めてください。
| ファミリー | 参照画像の上限 |
|---|---|
| Nano Banana | 14(スキーマ上の上限) |
| GPT-Image | 4 |
| Seedream | 10 |
| Wan 2.7 | 9 |
スキーマ上、referenceImages はすべてのモデルで 14 件が上限です。それより厳しい上限を持つファミリーは、超過分を 400 と上限を示すメッセージで拒否します。fileData と inlineData のどちらでも受け付ける MIME タイプは image/png、image/jpeg、image/webp、image/heic、image/heif です。
3 つの画像エンドポイントが受け付ける JSON ボディは最大 25MB です。プラットフォームの既定値の 4 倍になっているのは、base64 の inlineData がその中に収まる必要があるからです。base64 化するとファイルサイズは約 3 分の 1 増えるため、インラインで渡す画像は元のバイト数の合計で 18MB 程度までに抑えるか、fileData で URL を渡してください。
画像を生成する(同期)
POST /v1/images/generation
画像を生成し、完成までブロックします。レスポンスボディはモデルの生の出力です。base64 画像データを含む JSON であり、標準の { code, message, data } エンベロープではありません。レスポンス形式 を参照してください。
curl -X POST "https://api.marswave.ai/openapi/v1/images/generation" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "google",
"model": "gemini-3-pro-image",
"prompt": "An astronaut riding a horse on Mars, photorealistic",
"imageConfig": {
"imageSize": "2K",
"aspectRatio": "16:9"
}
}'const response = await fetch(
'https://api.marswave.ai/openapi/v1/images/generation',
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LISTENHUB_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
provider: 'google',
model: 'gemini-3-pro-image',
prompt: 'An astronaut riding a horse on Mars, photorealistic',
imageConfig: { imageSize: '2K', aspectRatio: '16:9' },
}),
},
)
const result = await response.json()
const image = result.candidates[0].content.parts[0].inlineDataimport os
import requests
response = requests.post(
'https://api.marswave.ai/openapi/v1/images/generation',
headers={'Authorization': f'Bearer {os.environ["LISTENHUB_API_KEY"]}'},
json={
'provider': 'google',
'model': 'gemini-3-pro-image',
'prompt': 'An astronaut riding a horse on Mars, photorealistic',
'imageConfig': {'imageSize': '2K', 'aspectRatio': '16:9'},
},
)
result = response.json()
image = result['candidates'][0]['content']['parts'][0]['inlineData']参照画像を使う
参照画像の扱いはどのエンドポイントでも同じです。画像がすでにホスティングされている場合は fileData を、バイト列が手元にある場合は inlineData を使います。
curl -X POST "https://api.marswave.ai/openapi/v1/images/generation" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "google",
"model": "gemini-3-pro-image",
"prompt": "Redraw this character in a watercolor style",
"referenceImages": [
{
"fileData": {
"fileUri": "https://example.com/character.png",
"mimeType": "image/png"
}
}
],
"imageConfig": { "imageSize": "2K", "aspectRatio": "3:4" }
}'curl -X POST "https://api.marswave.ai/openapi/v1/images/generation" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "google",
"model": "gemini-3-pro-image",
"prompt": "Redraw this character in a watercolor style",
"referenceImages": [
{
"inlineData": {
"data": "'"$(base64 -w0 character.png)"'",
"mimeType": "image/png"
}
}
],
"imageConfig": { "imageSize": "2K", "aspectRatio": "3:4" }
}'base64 の参照画像を含むリクエストには、別枠のより厳しいレート制限がかかります。
429 を受け取ったら Retry-After ヘッダーを読み、バックオフしてから再試行してください。
非同期生成
時間のかかるジョブや高解像度のジョブでは、リクエストを開いたままにせず、タスクを送信して結果をポーリングしてください。
非同期タスクを作成する
POST /v1/images/generation/async
リクエストボディは同期エンドポイントと同じです。即座に 202 と taskId を返します。生成はバックグラウンドで実行され、できあがった画像はホスティングされた URL として永続化されます。
curl -X POST "https://api.marswave.ai/openapi/v1/images/generation/async" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "google",
"model": "gemini-3-pro-image",
"prompt": "An astronaut riding a horse on Mars, photorealistic",
"imageConfig": { "imageSize": "4K", "aspectRatio": "16:9" }
}'レスポンス(202):
{
"code": 0,
"message": "",
"data": { "taskId": "65f0...", "status": "pending" }
}タスクを取得する
GET /v1/images/generation/tasks/{taskId}
単一タスクのステータスと結果をポーリングします。status は pending、generating、success、fail のいずれかです。成功時は images にホスティングされた結果の URL が入ります。
curl "https://api.marswave.ai/openapi/v1/images/generation/tasks/65f0abc..." \
-H "Authorization: Bearer $LISTENHUB_API_KEY"{
"code": 0,
"message": "",
"data": {
"taskId": "65f0abc...",
"status": "success",
"images": [{ "url": "https://.../0.png", "mimeType": "image/png" }],
"createdAt": 1750000000000,
"completedAt": 1750000020000
}
}| フィールド | 型 | 説明 |
|---|---|---|
taskId | string | タスク識別子 |
status | string | pending、generating、success、fail のいずれか |
images | array | 成功時に含まれます。各要素は { url, mimeType } |
failMsg | string | status が fail のときの失敗メッセージ |
contentModeration | object | 任意の審査拒否メタデータ。コンテンツ審査を参照。 |
publicationModeration | object | 生成成功画像の任意の公開制限メタデータ。コンテンツ審査を参照。 |
createdAt | number | 作成時刻(エポックミリ秒) |
completedAt | number | 完了時刻(エポックミリ秒)。完了している場合 |
タスク一覧を取得する
GET /v1/images/generation/tasks
自分の画像タスクを新しい順に一覧します。
| クエリパラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
page | number | 1 | ページ番号、最小値は 1 |
pageSize | number | 20 | 1 ページあたりの件数、1–100 |
status | string | — | pending、generating、success、fail で絞り込み |
curl "https://api.marswave.ai/openapi/v1/images/generation/tasks?page=1&pageSize=20&status=success" \
-H "Authorization: Bearer $LISTENHUB_API_KEY"{
"code": 0,
"message": "",
"data": {
"items": [
{
"taskId": "65f0...",
"status": "success",
"images": [],
"createdAt": 1750000000000,
"completedAt": 1750000020000
}
],
"page": 1,
"pageSize": 20,
"total": 1
}
}バックグラウンドタスクが pending または generating のまま 30 分を超えると、まとめて fail に更新され、
タイムアウトを示す failMsg が付きます。それより古い非終端ステータスは失敗とみなして再試行してください。
クレジットの見積もり
POST /v1/images/generation/estimate-credits
指定した設定のクレジットコストと、アカウントの残高で足りるかどうかを返します。クレジットは消費せず、モデルも呼び出しません。ボディは生成エンドポイントと同じものを受け付け、ここでは provider と prompt が任意です。
curl -X POST "https://api.marswave.ai/openapi/v1/images/generation/estimate-credits" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"imageConfig": {
"imageSize": "2K",
"aspectRatio": "1:1"
}
}'const response = await fetch(
'https://api.marswave.ai/openapi/v1/images/generation/estimate-credits',
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LISTENHUB_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'gpt-image-2',
imageConfig: { imageSize: '2K', aspectRatio: '1:1' },
}),
},
)
const { data } = await response.json()
console.log(data.credits, data.canGenerate)import os
import requests
response = requests.post(
'https://api.marswave.ai/openapi/v1/images/generation/estimate-credits',
headers={'Authorization': f'Bearer {os.environ["LISTENHUB_API_KEY"]}'},
json={
'model': 'gpt-image-2',
'imageConfig': {'imageSize': '2K', 'aspectRatio': '1:1'},
},
)
data = response.json()['data']
print(data['credits'], data['canGenerate'])見積もりレスポンス
標準エンベロープでラップされます。data オブジェクトは次のとおりです。
| フィールド | 型 | 説明 |
|---|---|---|
model | string | 見積もりに使われた正規化後の GA モデル ID |
imageSize | string | 解決された出力サイズ |
aspectRatio | string | 解決されたアスペクト比(モデルが自動選択する場合は返りません) |
quality | string | 解決された品質(該当しない場合は返りません) |
pixels | object | 解決された場合は { "width": number, "height": number, "size": "WxH" } |
credits | number | この設定で消費されるクレジット |
canGenerate | boolean | アカウントの有効クレジット残高が足りているか |
requiresSubscription | boolean | 4K または quality: high の gpt-image-2-official の場合にのみ true |
pricing | object | 価格メタデータ:pricingVersion、mode(token-estimate または fixed)、レート入力値 |
warnings | array | 注意喚起の文字列。例:quality_ignored_for_gpt_image_2_lite |
{
"code": 0,
"message": "",
"data": {
"model": "gpt-image-2",
"imageSize": "2K",
"aspectRatio": "1:1",
"credits": 6,
"canGenerate": true,
"requiresSubscription": false,
"pricing": { "pricingVersion": "gpt-image-2-lite-fixed-2026-06-15", "mode": "fixed" },
"warnings": []
}
}ほとんどのモデルはサイズごとの固定クレジットで課金されます(mode: "fixed")。gpt-image-2-official
は推定トークン数から課金されるため(mode: "token-estimate")、コストはプロンプトの長さ、出力の寸法、
指定した品質、参照画像の枚数(API 経由では 1 枚あたり定額で計上されます)に応じて変動します。
credits は常にその設定のクレジット価格です。無料枠は差し引かれません。枠が残っているアカウントの
1K / 2K リクエストも満額で見積もられ、そのうえで実際には何も消費しません。アカウントが実際に支払う
価格を表示したい場合は、freeUsages を自分で読んでください。
無料生成枠
API キーからの呼び出しは、ListenHub アプリや Labnana アプリと同じアカウント単位の無料枠(freeUsages)残高を使います。新規登録、招待、チェックインで枠を獲得し、それを API 経由で消費します。現在の残高は GET /v1/user/subscription で取得し、その freeUsages マップを読んでください。
対応する残高が 0 より大きい場合、1K / 2K のリクエストはクレジットではなく無料生成を 1 回消費します。残高が 0 になると、同じリクエストは通常のクレジット課金にフォールバックします。
| 無料枠リソース | 対象モデル |
|---|---|
gemini-3-pro-image-relax-1k-2k | gemini-3-pro-image |
gemini-3.1-flash-image | gemini-3.1-flash-image |
gpt-image-2 | gpt-image-2 |
gpt-image-2.5 | gpt-image-2.5-flare, gpt-image-2.5-sunburst |
seedream-5-0-pro | seedream-5-0-pro |
wan2.7-image | wan2.7-image |
無料枠が適用されるのは 1K と 2K のサイズだけです。4K のリクエストが freeUsages を使うことはなく、
常にクレジットで課金されます。gemini-nano-banana-2.1、gpt-image-2-official、wan2.7-image-pro には、どのサイズでも無料枠はありません。
gemini-3-pro-image は、無料枠が独立した実行レーンで動き、分岐処理に使える独自の失敗メタデータを持つ唯一のモデルです。詳しくは
Nano Banana → relax レーン を参照してください。
レスポンス形式
| エンドポイント | エンベロープでラップ? | ボディ |
|---|---|---|
POST /v1/images/generation | いいえ — モデルの生 JSON | base64 画像データ(下記参照) |
POST /v1/images/generation/async | はい | { taskId, status } |
POST /v1/images/generation/estimate-credits | はい | 見積もりオブジェクト |
GET /v1/images/generation/tasks | はい | ページング形式の { items, page, pageSize, total } |
GET /v1/images/generation/tasks/{taskId} | はい | タスクオブジェクト |
同期エンドポイントはモデルの生の出力をそのまま返します。成功時のボディには、生成された画像が base64 データとして含まれます。
{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/png",
"data": "<BASE64_ENCODED_IMAGE>"
}
}
]
}
}
]
}data フィールドを base64 からデコードすると画像ファイルが得られます。非同期の経路では画像がこちらで永続化され、タスクオブジェクトにホスティングされた url が返るため、base64 のデコードは不要です。
エラーコード
エラーは標準エンベロープ(code が非ゼロ)で返ります。同期エンドポイントの場合は、無料生成枠 に記載した生のエラーボディで返ります。
これらのルートは、すべての業務エラーを HTTP 400 に正規化します。クレジット不足は 402 ではなく
code: 26004 を伴う 400 です。HTTP ステータスではなく、エンベロープの code で分岐してください。
独自の意味を持つステータスは 429 だけです。例外は同期エンドポイントの無料 relax 失敗ボディで、
これはエンベロープではなく生のボディが返り、code ではなく errno を持ちます。
| HTTP ステータス | code | 意味 |
|---|---|---|
400 | 29003 | パラメータが不正 — 選択したモデルが受け付けないサイズや参照画像の枚数、または Nano Banana ファミリーが受け付けないアスペクト比 |
400 | 26019 | GPT-Image または Wan 2.7 で非対応のアスペクト比 |
400 | 26004 | クレジット不足 |
400 | 23016 | サブスクリプションが必要 — 有効なプランのないアカウントでの 4K または quality: high の gpt-image-2-official。まず見積もりの requiresSubscription を確認してください |
429 | — | レート制限、またはサービス混雑 — Retry-After を読んでバックオフ |
比率の拒否は 1 つのコードにまとまっていません。Nano Banana は 29003 を、GPT-Image と Wan 2.7 は
26019 を返します。「このモデルに合わない比率」を検知したい場合は、両方で分岐してください。
2 つの生成エンドポイントには、ユーザー単位およびグローバルのレート制限がかかります。base64 の参照画像(inlineData)を含むリクエストには別の、より厳しい制限がかかり、ピーク時には最初に絞られることがあります。estimate-credits にはレート制限がありません。
コンテンツ審査
同期エラーオブジェクトと、タスク詳細・一覧内の失敗タスクには、任意の contentModeration が付く場合があります。審査による拒否が確認された場合にのみ返されます。code、status、message を含む既存のフィールドと値は変わりません。既存のエラー処理に加えて利用してください。
| フィールド | 型 | 説明 |
|---|---|---|
rejected | boolean | 常に true。 |
reasons | string[] | 既知の分類:political、sexual、violence、copyright、privacy。空配列は拒否が確認済みで、分類が不明であることを表します。 |
stage | string | input、output、unknown のいずれか。 |
providerCode | string | 任意の元のエラーコード。表示用の文言ではありません。 |
理由が空または不明の場合は、汎用の審査拒否メッセージを表示してください。プロバイダーのエラー原文ではなく、独自の短いローカライズ済み文言を使用します。メタデータの例:
{
"contentModeration": {
"rejected": true,
"reasons": [],
"stage": "unknown"
}
}プロンプトや参照画像の審査で生成が拒否された場合は contentModeration を使用します。生成は成功しても公開できない画像には、同じ構造の任意の publicationModeration が付く場合があります。stage は審査対象を保持し、プロンプトの制限は input、生成画像の制限は output、両方による制限は unknown です。公開制限によって生成失敗にはなりません。既存の成功ステータスと画像 URL は変わらず、閲覧とダウンロードには従来のアクセス条件が適用されます。「公開不可」と固定の理由を表示し、フィールドがない場合に制限を推測しないでください。