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[] | edits | multipart による参照画像 |
images[].image_url | edits | JSON による参照画像 URL または data URL |
mask / mask.image_url | edits | オプションのマスク |
input_fidelity | edits | 参照画像の忠実度;上流画像ツールへ透過 |
応答
非ストリーミングリクエストは 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 が記録されます。デフォルトではプロンプトや画像内容は保存しません。
よくあるエラー
| HTTP | code | 対処 |
|---|---|---|
| 400 | invalid_request_error | prompt、model、画像フィールド、multipart 形式を確認 |
| 401 | unauthorized | Authorization: Bearer sk-4ai-... を確認 |
| 429 | insufficient_quota / rate_limit | ウォレットにチャージするか同時実行を減らす |
| 503 | model_unavailable | 管理者に選択画像モデルのリクエスト単価の有効化を依頼 |
| 502 | upstream_error | 後で再試行;継続する場合は trace ID を添えてサポートに連絡 |