本文へスキップ

GPT Image

GPT Image で画像を生成・編集する方法:パラメータ、レスポンス、注意点。

項目値
Base URLhttps://api.hop-base.com/v1
画像の生成POST /v1/images/generations
画像の編集POST /v1/images/edits
非同期タスクの照会GET /v1/images/tasks?task_id=…
キーのグループ「GPT Image 全モデル」

デフォルトは同期で Base64 の画像を返し、Prefer: respond-async を付けると非同期タスクになります。チャット用グループのキーで gpt-image-* を呼び出すと 404 が返ります。

利用できるモデル

モデルモデル IDquality の段階公式価格
GPT Image 2.5 Flaregpt-image-2.5-flarelow / medium / high / xhigh / max$5 / $30/ 100 万トークン
GPT Image 2.5 Sunburstgpt-image-2.5-sunburstlow / medium / high / xhigh / max$5 / $30/ 100 万トークン
GPT Image 2gpt-image-2low / medium / high$5 / $30/ 100 万トークン

選び方:日常的な画像生成は Flare が第一候補です。より高品質が必要なら Sunburst を選びます(同じ設定では Flare よりやや遅くなります)。gpt-image-2 は汎用モデルで、ID は gpt-image-2 で、gpt-image-2.0 ではありません。

参考所要時間(1024x1024 を 1 枚)は、low では 2.5 の両モデルとも約 14 秒、high では Flare 約 19 秒、Sunburst 約 37 秒です。

リクエストパラメータ

生成

POST /v1/images/generations、JSON のリクエストボディ。

パラメータ必須型と制限デフォルト説明
model必須string—上表の 3 つの ID のいずれか
prompt必須string、32,000 文字以下—前後の空白を除いて空でないこと
size任意auto または WIDTHxHEIGHT—規則は表の下
quality任意auto / low / medium / high—2.5 は xhigh / max も可
n任意integer、1〜1011 のみ対応のグループあり
background任意auto / opaque / transparent—透過には png / webp が必要
output_format任意png / jpeg / webppngデコード後の形式
output_compression任意integer、0〜100100jpeg / webp のみ
moderation任意auto / low—安全チェックは無効にならない
user任意string—エンドユーザーの識別子
stream任意booleanfalsetrue で Images SSE に切り替え
response_format任意string—省略してください
input_fidelity任意low / high—互換フィールド。省略してください

size の WIDTHxHEIGHT は幅・高さとも 16 の倍数、1 辺 3840 以下、縦横比 3:1 以下、総ピクセル数 655,360〜8,294,400 である必要があります。1K / 2K / 4K の略記は受け付けず、不正な size は生成前に 400 が返り、課金されません。

quality の段階が上がるほど出力トークンが増え、費用も上がります。response_format は何を指定しても b64_json で返り、user は HopBase のアカウント ID ではなく課金先も変わりません。

編集

POST /v1/images/edits は上表のすべてのパラメータに加え、参照画像とマスクを受け付けます。ローカルファイルは multipart/form-data を推奨し、JSON(URL / Data URL)も使えます。

パラメータ必須型と制限デフォルト説明
image必須1〜16 枚—multipart は image か image[] を繰り返す
mask任意アルファチャンネル付き PNG—透明な領域が編集対象

JSON の image は、URL / Data URL 文字列、文字列配列、{"url": …} オブジェクトのいずれかで指定できます。images は読み取らず、プレフィックスなしの base64 や file_id も受け付けません。

リモート URL は 1 枚 25 MiB 以下、Content-Type が image/* で、内部ネットワークのアドレスは使えません。転送前に 4 MiB まで圧縮される場合があり、リクエストボディ全体の上限は 60 MB(超えると 413)です。

非同期

生成または編集のリクエストに HTTP ヘッダー Prefer: respond-async を付けます。ボディは変わらず、これは JSON パラメータではなくヘッダーです。

非同期タスクで保持されるのは model、prompt、n、size、quality、background、output_format、input_fidelity と編集用の画像 / マスクのみで、その他のフィールドは破棄されます。

レスポンス

同期

フィールド型説明
createdintegerUnix 秒
data[].b64_jsonstringBase64 の画像。デコードして output_format の形式で保存
usage.input_tokensinteger入力トークン(返る場合あり)
usage.output_tokensinteger出力トークン(返る場合あり)
usage.total_tokensinteger合計(返る場合あり)
errorobject失敗時:message、type、code
{
  "created": 1760000000,
  "data": [
    {
      "b64_json": "iVBORw0KGgoAAA..."
    }
  ],
  "usage": {
    "input_tokens": 42,
    "output_tokens": 1760,
    "total_tokens": 1802
  }
}
生成が 40 秒を超える場合:ステータスは 200 のまま、error フィールドを確認:

約 40 秒を超えると、サーバーはまず HTTP 200 を返し、接続を維持するためにボディの先頭へ空白を書き込み続け、完全な JSON は後から書き込まれます。それ以降は生成に失敗しても HTTP ステータスは 200 のままです。成否はボディに error があるかで判断し、読み取りタイムアウトは 300 秒以上にしてください。

ストリーミング(stream: true)

レスポンスは Images SSE に切り替わります。待機中はコロンで始まる keepalive のコメント行が送られ、最後の data: イベントに完全な Images JSON が入り、[DONE] で終わります。これは OpenAI ネイティブの段階的プレビューイベントではありません。

: hopbase-keepalive

data: {"created":1760000000,"data":[{"b64_json":"iVBORw0KGgoAAA..."}]}

data: [DONE]

非同期タスク

送信すると直ちに 202 Accepted が返り、レスポンスヘッダー Location も同じ照会 URL を指します。

{
  "object": "image.task",
  "task_id": "your-task-id",
  "status": "pending",
  "status_url": "/v1/images/tasks?task_id=your-task-id"
}

照会は GET /v1/images/tasks?task_id=… のみで、タスク ID をパスに入れる形式には対応していません。pending / processing / retrying は進行中、completed と failed が終了状態です。

フィールド型説明
task_idstringタスク ID
statusstringタスクの状態
result_contentstring完了時:Markdown、画像ごとに 1 行
errorstringfailed 時のみ:英語の理由、コードなし
usage.costnumberこのタスクで実際に差し引かれた金額
usage.currencystring記帳通貨。現在は CNY
usage.cost_cnynumber人民元建ての金額(照合用)
usage.cost_usdnumber米ドル建ての金額(照合用)
{
  "task_id": "your-task-id",
  "status": "completed",
  "result_content": "![image](/assets-runtime/2026/09/xxxxxxxxxxxx.png)",
  "usage": {
    "cost": 1.36,
    "currency": "CNY",
    "cost_cny": 1.36,
    "cost_usd": 0.2
  }
}

result_content は相対パスなので、https://api.hop-base.com を前に付けてダウンロードします。usage はタスクが completed または failed になると現れ、タスクを作成したキーでのみ確認できます。

例

生成

curl https://api.hop-base.com/v1/images/generations \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-flare",
    "prompt": "桜の木の下に座る柴犬、和風の水彩画",
    "size": "1024x1024",
    "quality": "medium",
    "output_format": "png"
  }' \
  | jq -r '.data[0].b64_json' | base64 --decode > result.png

curl の例では事前に jq をインストールしてください。

編集(複数の参照画像 + マスク)

curl https://api.hop-base.com/v1/images/edits \
  -H "Authorization: Bearer sk-your-key" \
  -F "model=gpt-image-2.5-flare" \
  -F "prompt=マスク部分を花瓶に置き換え、2 枚目の画風に合わせる" \
  -F "image[][email protected]" \
  -F "image[][email protected]" \
  -F "[email protected]" \
  -F "size=1024x1024" \
  -F "quality=high" \
  -F "output_format=png"

JSON で送る場合はファイルを URL に置き換えます:"image": ["https://example.com/scene.png", "https://example.com/style.png"]、"mask": "https://example.com/mask.png"。

非同期

# 1. 送信して 202 + task_id を受け取る
curl -i https://api.hop-base.com/v1/images/generations \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -H "Prefer: respond-async" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "映画のような未来都市の夜景",
    "size": "2048x2048"
  }'

# 2. 最初のレスポンスの task_id でポーリング
curl "https://api.hop-base.com/v1/images/tasks?task_id=your-task-id" \
  -H "Authorization: Bearer sk-your-key"

注意事項

  • 2K / 4K の大きな画像は、長時間のリクエストが CDN のタイムアウトで切断されないよう非同期を推奨します。
  • 同期リクエストでは、クライアントの読み取りタイムアウトを 300 秒以上にしてください。
  • size は auto か WIDTHxHEIGHT のみで、段階の略記を送ると 400 になります。
  • xhigh / max は 2.5 の 2 モデルのみ対応しています。
  • background: "transparent" には png または webp が必要で、gpt-image-2 の透過背景はプレビュー機能です。
  • 公式のストリーミング用フィールド partial_images(0〜3)には対応していないため、省略してください。
  • 公式 SDK では stream をデフォルトの false のままにしてください。
  • ゲートウェイはマスクを 1 枚目の参照画像のサイズに合わせますが、マスク外がピクセル単位で保たれる保証はありません。
  • result_content の URL はキーなしで開けるため公開せず、早めに自分のストレージへダウンロードしてください。

よくあるエラー

パラメータが不正な場合は生成前に 400 が返り、課金されません。コンテンツの安全チェックで拒否された場合も 400 で課金されず、error.code は safety_rejected です。

エラー対処
size must be WIDTHxHEIGHT or auto などの size エラー上記の size 規則に従って修正
prompt must not be empty空でない prompt を指定
n must be 1 for this model in the current groupリクエストを分ける
/v1/images/edits requires at least one image参照画像は images ではなく image に入れる
image download returned HTTP 404サーバーから取得できる公開 URL に変更
Your request was rejected by the safety system.プロンプトを書き換えるか参照画像を変更
Request body exceeds the size limit (60 MB)(413)画像を圧縮するか URL で渡す
HTTP 200 でボディに error があるkeepalive 開始後の失敗。error.message を確認

課金

トークン単位で課金され、quality が高いほど出力トークンが増えます。1024x1024 の実測で low 約 200、high 約 1,760、xhigh 約 3,120、max 約 7,020 出力トークンです。非同期タスクの実際の課金額は照会結果の usage.cost で確認でき(cost_cny / cost_usd は 1 USD = 6.8 CNY の固定換算)、失敗時は通常 0 です。

単価は上表の各モデルカードとログイン後のモデルカタログを参照してください。

次のステップ