OpenAI 画像フォーマット
RouteAPI は OpenAI 互換の images エンドポイントを通じて画像生成を提供します。このページでは、すべてのベンダーが共有するリクエスト形式と、OpenAI の gpt-image シリーズ(現在販売中の gpt-image-2)を扱います。他のベンダーのリクエストも同じエンドポイントに適応されますが、モデル固有の挙動は個別に説明します。Nano Banana は Gemini 画像モデル、Seedream は ByteDance Seedream を扱います。
モデルが画像生成に対応しているかはモデル一覧で確認できます。supported_endpoint_types に image-generation が含まれていれば対応しています。このフィールドの読み方はモデルを参照してください。
エンドポイント
Section titled “エンドポイント”POST /v1/images/generationsPOST /v1/images/edits完全な URL:
https://api.routeapi.ai/v1/images/generationshttps://api.routeapi.ai/v1/images/edits/v1/images/generations は JSON ボディを受け取ります。/v1/images/edits は multipart/form-data を受け取ります。OpenAI 互換チャネルでは、URL または Base64 で画像を参照する JSON ボディも使用できます(JSON による編集を参照)。
画像を生成する
Section titled “画像を生成する”リクエストパラメータ
Section titled “リクエストパラメータ”| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
model | string | はい | GET /v1/models で取得したモデル ID。例: gpt-image-2 |
prompt | string | はい | 生成する画像のテキスト説明 |
n | integer | いいえ | 画像の枚数、最大 128。省略または 0 は 1 として扱われます |
size | string | いいえ | 1024x1024、1024x1536 などの出力サイズ、またはモデルによっては 1K / 2K などの段階。JSON ボディでは区切りに x を使用してください。全角の × は 400 で拒否されます |
quality | string | いいえ | standard、hd、high、medium、low、auto などの品質レベル。受け付ける値はモデルによって異なります |
response_format | string | いいえ | url または b64_json。上流へ転送され、どちらの値が有効かはプロバイダーが決めます |
style | string | いいえ | スタイルのヒント(例: vivid、natural)。対応するモデルでのみ意味があります |
user | string | いいえ | 上流へ転送されるエンドユーザー識別子 |
watermark | boolean | いいえ | 出力にウォーターマークを付けるかどうか(対応するプロバイダーのみ) |
ゲートウェイが理解する追加フィールドには background、output_format、output_compression、input_fidelity、moderation、partial_images があり、含まれていれば OpenAI 互換の上流へ転送されます。未知の JSON フィールドは転送されず破棄されます。ただしチャネルがリクエストボディのパススルーモードの場合は除きます。
リクエスト例
Section titled “リクエスト例”curl https://api.routeapi.ai/v1/images/generations \ -H "Authorization: Bearer $ROUTEAPI_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-image-2", "prompt": "A calico cat playing a piano on a small stage, soft studio lighting", "size": "1024x1024", "n": 1 }'Python(OpenAI SDK)
Section titled “Python(OpenAI SDK)”import osfrom openai import OpenAI
client = OpenAI( api_key=os.environ["ROUTEAPI_KEY"], base_url="https://api.routeapi.ai/v1",)
result = client.images.generate( model="gpt-image-2", prompt="A calico cat playing a piano on a small stage, soft studio lighting", size="1024x1024", n=1,)
for item in result.data: print(item.url or item.b64_json[:40])OpenAI 互換チャネルは上流のレスポンスボディをそのまま返します。モデルによって data[] には b64_json、url、またはその両方が入るため、存在する方を読み取ってください。
{ "created": 1740000000, "data": [ { "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." } ], "usage": { "input_tokens": 12, "output_tokens": 4160, "total_tokens": 4172 }}| フィールド | 説明 |
|---|---|
created | 生成時刻の Unix タイムスタンプ |
data | 生成された画像の配列。1 枚につき 1 要素 |
data[].url | 上流が URL を返す場合の画像 URL |
data[].b64_json | 上流が Base64 を返す場合の画像バイト列 |
data[].revised_prompt | モデルが書き換えたプロンプトを返す場合に存在 |
usage | トークン使用量。上流が返す場合のみ存在 |
url / b64_json は存在する方を読み取ってください。両方が必ずあるとは限らず、usage もオプションとして扱います。
画像を編集する
Section titled “画像を編集する”POST /v1/images/edits は prompt と、任意でマスクを使って既存の画像を変更します。
multipart フィールド
Section titled “multipart フィールド”| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
model | string | はい | GET /v1/models で取得したモデル ID |
image | file | はい | 元画像。フィールドを繰り返すか image[] を使うと複数送信できます |
prompt | string | はい | 編集内容を記述する指示 |
mask | file | いいえ | 編集する領域を示すマスク画像。マスクの意味は上流モデルが定義します |
n | integer | いいえ | 結果の枚数、最大 128(デフォルト 1) |
size | string | いいえ | 出力サイズ。生成と同じ規則です |
quality | string | いいえ | モデルが受け付ける品質レベル |
watermark | boolean | いいえ | 出力にウォーターマークを付けるかどうか |
その他のフォームフィールドは OpenAI 互換の上流へそのまま転送されるため、response_format や input_fidelity などもパススルーされます。
multipart リクエスト例
Section titled “multipart リクエスト例”curl https://api.routeapi.ai/v1/images/edits \ -H "Authorization: Bearer $ROUTEAPI_KEY" \ -F model="gpt-image-2" \ -F prompt="Replace the background with a sunset beach" \ -F image=@"cat.png" \ -F size="1024x1024"Python(OpenAI SDK)
Section titled “Python(OpenAI SDK)”import osfrom openai import OpenAI
client = OpenAI( api_key=os.environ["ROUTEAPI_KEY"], base_url="https://api.routeapi.ai/v1",)
with open("cat.png", "rb") as image: result = client.images.edit( model="gpt-image-2", image=image, prompt="Replace the background with a sunset beach", size="1024x1024", )
print(result.data[0].b64_json[:40])JSON による編集
Section titled “JSON による編集”OpenAI 互換チャネルでは、/v1/images/edits は JSON ボディも受け付けます。RouteAPI が各画像参照をダウンロードまたはデコードし、上流向けに multipart リクエストを組み直します。画像がすでに URL 上にある場合や Base64 文字列の場合に便利です。
curl https://api.routeapi.ai/v1/images/edits \ -H "Authorization: Bearer $ROUTEAPI_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-image-2", "prompt": "Repaint this photo as a watercolor illustration", "images": [ { "image_url": "https://example.com/photo.png" } ], "size": "1024x1024" }'images の各要素は image_url(または url)を持ち、値は http(s) リンクか data:image/...;base64,... 文字列です。mask も同じ構造です。このパスでは images 配列が必須で、単独の image フィールドは読み取られません。他のチャネルファミリーは実際の multipart ボディを要求する場合があるため、JSON 編集に依存する前にターゲットモデルで確認してください。
同じエンドポイント上の他のベンダー
Section titled “同じエンドポイント上の他のベンダー”エンドポイントと prompt / n / size のリクエスト形式は共通ですが、各ベンダーのアダプターが変換する方法は異なります。
| ベンダー系列 | ページ |
|---|---|
Google Gemini 画像モデル(gemini-*-image*) | Nano Banana |
ByteDance Seedream(seedream-5.0-pro、seedream-5.0-lite) | Seedream |
gpt-image モデルはトークン単位で課金されます。生成された画像は出力トークンとして出力価格で課金され、プロンプトと参照画像は入力トークンとして課金されます。出力が大きいほど、品質が高いほど多くのトークンを消費します。詳細な規則はモデル料金を、どちらの方式が適用されるかはモデル詳細ページを参照してください。
サイズ段階を使う 1 枚あたり課金モデルでは、チャネル選択前にリクエストした size のピクセル数から価格が決まります。n は 1 枚ごとに課金され、size が省略または認識できない場合は最高単価が適用されます。
エラーと制限
Section titled “エラーと制限”| ステータス | 意味 | よくある原因 |
|---|---|---|
| 400 | 無効なリクエスト | model の欠落、n が 128 超、モデルが対応しない size、JSON ボディで区切りに × を使用 |
| 401 | 認証失敗 | API Key の欠落、無効、期限切れ、クォータ枯渇 |
| 403 | 残高またはクォータ不足 | insufficient_user_quota または pre_consume_token_quota_failed。チャージするかキーのクォータを引き上げてください |
| 429 | レート制限 | 同時実行数を下げてください |
| 500 | 変換または内部エラー | 選択したチャネル向けに変換できない、または編集に使用できる画像がない |
| 501 | api_not_implemented | エンドポイントは存在するが未対応 |
POST /v1/images/variations は未対応で、コード api_not_implemented の 501 を返します。代わりにプロンプトベースの編集を使用してください。/v1/images/edits には少なくとも 1 枚の画像が必要で、image、image[]、image[0] 形式のフォームフィールド名を認識します。
次のステップ
Section titled “次のステップ”- Nano Banana — Gemini 画像モデルとネイティブな
generateContent呼び出し。 - Seedream — ByteDance Seedream のサイズ、連続生成、編集。
- モデル — 画像モデルを探し、
image-generation対応を確認します。 - モデル料金 — トークン課金と 1 枚あたり課金、サイズ段階。
- よくあるエラー — 共通のステータスコードとエラーボディ形式。