curl --request POST \
--url https://api.apiyi.com/v1/images/edits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form model=gpt-image-2 \
--form 'prompt=Place subject from image 1 into scene from image 2, using color style from image 3' \
--form 'image=<string>' \
--form image.items='@example-file' \
--form mask='@example-file'{
"created": 1776832476,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"usage": {
"input_tokens": 1280,
"output_tokens": 6240,
"total_tokens": 7520
}
}Image Edit API Reference
gpt-image-2 image edit API reference and live testing — upload reference images (up to 16) + instructions for single-image edit, multi-image fusion, or mask inpainting
curl --request POST \
--url https://api.apiyi.com/v1/images/edits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form model=gpt-image-2 \
--form 'prompt=Place subject from image 1 into scene from image 2, using color style from image 3' \
--form 'image=<string>' \
--form image.items='@example-file' \
--form mask='@example-file'{
"created": 1776832476,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"usage": {
"input_tokens": 1280,
"output_tokens": 6240,
"total_tokens": 7520
}
}Documentation Index
Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt
Use this file to discover all available pages before exploring further.
Bearer sk-xxx), select image / mask files, fill in prompt and model, and send.multipart/form-data. For pure text-to-image, use the Text-to-Image endpoint.请求时发生错误: unable to complete request after the response arrives — the request actually succeeded; the browser just can’t render such a long base64 string.Recommended workflow (beginner-friendly):- Copy the Python / Node.js / cURL sample below and run it locally. The code automatically
base64.b64decodes the response and writes the image to a file. - If you must use the in-browser Playground, use a tiny reference image (< 50KB), set
sizeto the smallest tier (e.g.1024x1024), andqualitytolow.
- Do not pass
input_fidelity—gpt-image-2forces high-fidelity; passing it returns 400 - Edit requests have noticeably higher input tokens — references convert to many tokens via Vision pricing; budget accordingly
background: transparentnot supported — useopaqueor post-process- Multi-image fusion: max 16 — repeat the
image[]field; more than 16 errors out
image[] field accepts multiple reference images. Upload order maps to “image 1 / image 2 / image 3” references in the prompt. Reference them explicitly:Place subject from image 1 into scene from image 2, using color style from image 3Recommended ≤ 10MB per image, formats:
png / jpg / webp.Code Examples
Python (OpenAI SDK · single-image edit)
from openai import OpenAI
import base64
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.apiyi.com/v1"
)
resp = client.images.edit(
model="gpt-image-2",
image=open("photo.png", "rb"),
prompt="Replace the background with a seaside sunset, preserve subject details",
size="1536x1024",
quality="high"
)
# b64_json is raw base64 (no prefix) — decode manually
with open("edited.png", "wb") as f:
f.write(base64.b64decode(resp.data[0].b64_json))
Python (OpenAI SDK · multi-image fusion)
resp = client.images.edit(
model="gpt-image-2",
image=[
open("person.png", "rb"),
open("scene.png", "rb"),
open("style.png", "rb"),
],
prompt="Place subject from image 1 into scene from image 2, using color style from image 3, keep lighting consistent",
size="1536x1024",
quality="high"
)
with open("fused.png", "wb") as f:
f.write(base64.b64decode(resp.data[0].b64_json))
cURL (multi-image fusion)
curl -X POST "https://api.apiyi.com/v1/images/edits" \
-H "Authorization: Bearer sk-your-api-key" \
-F "model=gpt-image-2" \
-F "prompt=Place subject from image 1 into scene from image 2, using color style from image 3" \
-F "size=1536x1024" \
-F "quality=high" \
-F "image[]=@person.png" \
-F "image[]=@scene.png" \
-F "image[]=@style.png"
cURL (mask inpainting)
curl -X POST "https://api.apiyi.com/v1/images/edits" \
-H "Authorization: Bearer sk-your-api-key" \
-F "model=gpt-image-2" \
-F "prompt=Replace the sky with pink sunset clouds" \
-F "size=1024x1024" \
-F "quality=high" \
-F "image[]=@photo.png" \
-F "mask=@mask.png" \
| jq -r '.data[0].b64_json' | base64 -d > photo_edited.png
Node.js (Native fetch + FormData · multi-image fusion)
import fs from 'node:fs';
const form = new FormData();
form.append('model', 'gpt-image-2');
form.append('prompt', 'Place subject from image 1 into scene from image 2');
form.append('size', '1536x1024');
form.append('quality', 'high');
form.append('image[]', new Blob([fs.readFileSync('./person.png')]), 'person.png');
form.append('image[]', new Blob([fs.readFileSync('./scene.png')]), 'scene.png');
const resp = await fetch('https://api.apiyi.com/v1/images/edits', {
method: 'POST',
headers: { 'Authorization': 'Bearer sk-your-api-key' },
body: form
});
const { data } = await resp.json();
fs.writeFileSync('fused.png', Buffer.from(data[0].b64_json, 'base64'));
Parameter Reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
model | text | Yes | — | Fixed: gpt-image-2 |
prompt | text | Yes | — | Edit / fusion instruction |
image[] | file | Yes | — | Reference images, can repeat (max 16) |
mask | file | No | — | Mask image (only applies to first image, alpha channel required) |
size | text | No | auto | Output size, same as text-to-image |
quality | text | No | auto | low / medium / high / auto |
output_format | text | No | png | png / jpeg / webp |
output_compression | text | No | — | 0–100, only for jpeg / webp |
background | text | No | auto | auto / opaque (not supported: transparent) |
Mask Inpainting Requirements
- Same size and format as original, ≤ 50MB
- Must have alpha channel: transparent (alpha=0) = inpaint area, opaque = preserve
- Mask only applies to the first image
- Mask is a “soft guide” — the model may extend or contract around the masked region
image[] with a new instruction to incrementally refine. Each round is independently token-billed — watch cumulative cost.Response Format
{
"created": 1776832476,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"usage": {
"input_tokens": 1280,
"output_tokens": 6240,
"total_tokens": 7520
}
}
b64_json is raw base64, without the data:image/...;base64, prefix — different from gpt-image-2-all. Decode it client-side to write a file, or prepend the prefix for browser rendering.input_tokens are typically significantly higher than text-to-image at the same size, because reference images are billed per Vision pricing rules. Multi-image fusion adds proportionally more input tokens per image.Authorizations
API Key obtained from APIYI Console
Body
Model name, fixed as gpt-image-2
gpt-image-2 Edit/fusion instruction. For multi-image, use 'image 1 / image 2 / image 3' to reference upload order
"Place subject from image 1 into scene from image 2, using color style from image 3"
Reference images. For a single image, send the field once; for multiple images, repeat the same image field (e.g., -F image=@a.png -F image=@b.png, max 16) — upload order maps to image 1 / image 2 / ... in the prompt. Each ≤ 10MB, formats: png/jpg/webp
Mask image (optional, only applies to first image). Requirements:
- Same size and format as original
- Must have alpha channel (alpha=0 = inpaint area, opaque = preserve)
- Single file ≤ 50MB
Output size (same as text-to-image). Preset or constraint-satisfying custom size
"1536x1024"
Quality tier
auto, low, medium, high Output format
png, jpeg, webp Output compression (0–100), only effective for jpeg/webp
0 <= x <= 100Background mode. auto or opaque. Not supported: transparent
auto, opaque Was this page helpful?