API リファレンス

POST /v1/images/*

LLMs Text

POST /v1/images/

GPT Image モデルで画像を生成したり、参照画像に基づいて編集する OpenAI Images 互換 API です。OpenAI SDK とほぼ同様に、base_url を 4AICode に向け、api_key を sk-4ai-... トークンに置き換えます。

画像生成はリクエストごとにウォレット残高から課金されます。コンソールの画像生成ページは手動利用向け、API は自社アプリ、ワークフロー、自動化スクリプトへの組み込み向けです。

新規プロジェクトでは GPT Image 2.5 を推奨:gpt-image-2.5-sunburst は高品質生成と精密編集向けの最上位、gpt-image-2.5-flare は高品質な日常画像生成向けの最速選択です。既存連携は gpt-image-2 を継続利用できます。

エンドポイント

POST https://relay.4aicode.com/v1/images/generations
POST https://relay.4aicode.com/v1/images/edits

サポートモデル

モデル用途課金
gpt-image-2.5-sunburst高品質生成と精密編集向け最上位 GPT Image 2.5リクエストごとにウォレット残高から課金
gpt-image-2.5-flare高品質な日常画像生成向け高速 GPT Image 2.5リクエストごとにウォレット残高から課金
gpt-image-2テキストから画像生成と参照ベースの画像編集リクエストごとにウォレット残高から課金

各モデルは、管理者がリクエスト単価を設定・有効化し、上流モデル一覧で選択した後に利用可能です。モデルが有効でない場合、API は 503 model_unavailable を返します。

テキストから画像生成

curl

curl https://relay.4aicode.com/v1/images/generations \
  -H "Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-sunburst",
    "prompt": "A clean product shot of a black mechanical keyboard on a white desk",
    "size": "1024x1024",
    "quality": "medium",
    "response_format": "b64_json"
  }'

Python

import base64
from openai import OpenAI

client = OpenAI(
    base_url="https://relay.4aicode.com/v1",
    api_key="sk-4ai-xxxxxxxxxxxxxxxx",
)

resp = client.images.generate(
    model="gpt-image-2.5-sunburst",
    prompt="A clean product shot of a black mechanical keyboard on a white desk",
    size="1024x1024",
    quality="medium",
    response_format="b64_json",
)

image_base64 = resp.data[0].b64_json
with open("keyboard.png", "wb") as f:
    f.write(base64.b64decode(image_base64))

TypeScript

import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://relay.4aicode.com/v1",
  apiKey: process.env.OPENAI_API_KEY,
});

const resp = await client.images.generate({
  model: "gpt-image-2.5-sunburst",
  prompt: "A clean product shot of a black mechanical keyboard on a white desk",
  size: "1024x1024",
  quality: "medium",
  response_format: "b64_json",
});

const image = resp.data[0]?.b64_json;
if (!image) throw new Error("image generation failed");
fs.writeFileSync("keyboard.png", Buffer.from(image, "base64"));

参照ベースの画像編集

/v1/images/edits は 2 つの入力方法をサポートします。

  • multipart/form-data:image または image[] フィールドでファイルをアップロード。各ファイル最大 20 MB。
  • application/json:images[].image_url に base64 data URL またはアクセス可能な画像 URL を渡す。

multipart curl

curl https://relay.4aicode.com/v1/images/edits \
  -H "Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx" \
  -F model="gpt-image-2.5-sunburst" \
  -F prompt="Keep the product, replace the background with a bright studio setup" \
  -F size="1024x1024" \
  -F quality="medium" \
  -F response_format="b64_json" \
  -F image="@./product.png"

複数参照画像:

curl https://relay.4aicode.com/v1/images/edits \
  -H "Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx" \
  -F model="gpt-image-2.5-sunburst" \
  -F prompt="Combine these references into one cohesive hero image" \
  -F image[]="@./subject.png" \
  -F image[]="@./style.png"

JSON Data URL

IMAGE_B64="$(base64 < product.png | tr -d '\n')"

curl https://relay.4aicode.com/v1/images/edits \
  -H "Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d "{
    \"model\": \"gpt-image-2.5-sunburst\",
    \"prompt\": \"Put this product in a premium ecommerce scene\",
    \"size\": \"1024x1024\",
    \"quality\": \"medium\",
    \"response_format\": \"b64_json\",
    \"images\": [
      { \"image_url\": \"data:image/png;base64,${IMAGE_B64}\" }
    ]
  }"

file_id は現在明示的なエラーを返します。マスクを使う場合は mask ファイルフィールド、または JSON で mask.image_url を指定してください。

パラメータ

パラメータ対象エンドポイント説明
modelすべて上表の有効なモデル ID
promptすべて必須の生成または編集指示
sizeすべてauto、1024x1024、1536x1024、1024x1536
qualityすべてauto、low、medium、high;GPT Image 2.5 は xhigh と max もサポート
response_formatすべてb64_json または url;url は data URL を返す
output_formatすべてpng、jpeg、webp
backgroundすべて上流画像ツールへ透過
output_compressionすべて圧縮対応形式の出力圧縮率
streamすべてtrue で SSE を返す
partial_imagesすべてストリーミングモードで部分画像イベントを要求
image / image[]editsmultipart による参照画像
images[].image_urleditsJSON による参照画像 URL または data URL
mask / mask.image_urleditsオプションのマスク
input_fidelityedits参照画像の忠実度;上流画像ツールへ透過

応答

非ストリーミングリクエストは OpenAI Images 形式の応答を返します。

{
  "created": 1770000000,
  "data": [
    {
      "b64_json": "iVBORw0KGgo...",
      "revised_prompt": "..."
    }
  ],
  "size": "1024x1024",
  "quality": "medium",
  "output_format": "png",
  "usage": {
    "images": 1
  }
}

response_format=url のとき、data[].url には data:image/png;base64,... URL が含まれ、画像内容が応答内に直接返されます。

ストリーミング応答

"stream": true で SSE を返します。

テキストから画像生成のイベント:

event: image_generation.partial_image
data: {"type":"image_generation.partial_image","partial_image_index":0,"b64_json":"..."}

event: image_generation.completed
data: {"type":"image_generation.completed","b64_json":"...","usage":{"images":1}}

参照ベース画像編集のイベントは image_edit プレフィックスを使用:

event: image_edit.completed
data: {"type":"image_edit.completed","b64_json":"...","usage":{"images":1}}

課金と記録

成功した生成ごとに、選択モデルの現在のリクエスト単価で課金されます。利用ページ、ウォレット取引履歴、バックエンド利用ログにモデル、リクエスト数、コスト、ステータス、trace ID が記録されます。デフォルトではプロンプトや画像内容は保存しません。

よくあるエラー

HTTPcode対処
400invalid_request_errorprompt、model、画像フィールド、multipart 形式を確認
401unauthorizedAuthorization: Bearer sk-4ai-... を確認
429insufficient_quota / rate_limitウォレットにチャージするか同時実行を減らす
503model_unavailable管理者に選択画像モデルのリクエスト単価の有効化を依頼
502upstream_error後で再試行;継続する場合は trace ID を添えてサポートに連絡