Create Seedream image
Last updated October 21, 2026
Generate images synchronously in Volcengine Ark's native shape. Supports image-to-image and layer decomposition; billed per image × tier.
Synchronous image generation in the native Volcengine Ark v3 format; requests and responses match the
official /api/v3/images/generations. If you already have Volcengine Ark code, point its base_url here.
https://gateway.amux.ai/api/v3/images/generationsAuthorization
headerAuthorizationstringRequiredBearer <your Amux AI key> An Amux key created in the console. If you lose it, you can view it again on the keys page.
Request
application/jsonmodelstringRequiredModel ID on Amux. Append :provider to pin a provider.
promptstringThe prompt. Optional for layer decomposition
(layer_decomposition: true), where the model detects subjects, text and
background on its own. Required otherwise.
imagestring | array<string>Reference images, optional — leave it out for text-to-image, give it
for image-to-image. A string for one image, an array of strings for several,
up to 10, each ≤ 30 MB.
Each item is an https URL or data:image/<format>;base64,…. URLs must be
publicly reachable; private addresses or plain http are rejected with 400.
sizestringOutput size. Generation accepts the tiers 1K / 1.5K / 2K (default 2K,
no 4K) or a WxH pixel string (roughly 0.92–4.62 MP total, forwarded as-is).
Layer decomposition accepts only 1K / 1.5K / 2K / auto (default auto)
— no pixel strings.
Billing uses each output image's actual pixels: ≤ 1.7 MP is 1K,
≤ 2.61 MP is 1.5K, anything larger is 2K. We reserve the upper bound at
submission and refund the difference once the actual tier is known.
output_format"jpeg" | "png"Default "jpeg"Output encoding. With layer decomposition it applies to the base image only — layers are always png.
background"opaque" | "transparent"Default "opaque"transparent produces a transparent png. Image-to-image only: it needs
exactly one input image with an alpha channel and cannot be combined
with output_format: jpeg. Breaking either rule returns 400.
watermarkbooleanDefault falseThe "AI generated" mark in the bottom-right corner. On by default upstream;
off by default here — pass true to add it.
layer_decompositionbooleanDefault falseLayer decomposition: split one image into a base image plus layers. **Only
bytedance/seedream-5.0-pro and bytedance/seedream-5.0-flash support it today.**
Requires exactly one image (png / jpeg, ideally ≥ 512×512). The base
image and every layer are billed per image; at most 16 layers come back,
so the reservation covers 17 images.
optimize_prompt_optionsobjectPrompt optimization settings. Omit it for the upstream default, standard.
›optimize_prompt_optionsobject
mode"standard" | "fast"Default "standard"standard gives higher quality and takes longer; fast is quicker with slightly
lower quality and only 5.0 pro supports it (flash returns 400). Both are priced the same.
response_format"url" | "b64_json"Default "url"How images come back. With b64_json, each data[] item carries the base64 and no url,
as upstream does; outputs are stored either way and remain visible in logs and the Playground.
Response
200responseImages are ready.
400responseInvalid parameters: layer decomposition with zero or several images, a pixel
size in decomposition mode, more than 10 reference images, the transparent
background rules not met, or an unusable image URL.
402responseAvailable balance does not cover the reservation.
502responseUpstream generation failed. Nothing is charged and the reservation is released.
Supported models
| Model | Size | Reference images | Layer decomposition | Prompt optimization | Pricing |
|---|---|---|---|---|---|
bytedance/seedream-5.0-pro | 1K / 1.5K / 2K or WxH | Up to 10 | Supported | standard / fast | Per image, two tiers |
bytedance/seedream-5.0-flash | 1K / 1.5K / 2K or WxH | Up to 10 | Supported | standard only | Per image, single price |
See the model docs for every parameter and example: seedream-5.0-pro, seedream-5.0-flash.
How it differs from /v1/images/generations
Both endpoints serve these models, and Volcengine Ark parameters such as size, watermark,
layer_decomposition and optimize_prompt_options take effect as-is on both. Only the request and
response format differs:
/v1/images/generations | This endpoint | |
|---|---|---|
| Request and response format | OpenAI | Volcengine Ark |
model in the response | Our model ID | Upstream model ID |
amux block | Yes (cost and task ID) | No |
| Suits | OpenAI ecosystem clients | Volcengine Ark SDKs |
Watermark
Volcengine Ark adds an "AI generated" mark in the bottom-right corner by default. The watermark is off
by default here; pass watermark: true to add it.
Parameter constraints
The following return 400 at submission, before any task or reservation is created:
- layer decomposition (
layer_decomposition: true) without exactly oneimage, or with a pixelsize; - more than 10 reference images;
background: "transparent"without exactly oneimage, or combined withoutput_format: "jpeg".
Layer decomposition response
The first item in data is the base image (z_index: 0), followed by one item per layer with z_index
counting up from 1:
{
"data": [
{ "url": "https://…/task_x-0.jpg", "size": "800x1424", "output_format": "jpeg", "z_index": 0 },
{
"url": "https://…/task_x-1.png",
"size": "799x613",
"output_format": "png",
"z_index": 1,
"bounding_box": { "absolute": [222, 638, 684, 993], "normalized": [278, 448, 854, 697] },
"name": "Coffee cup",
"description": "White ceramic cup of espresso"
}
],
"usage": { "generated_images": 2, "input_images": 1 }
}- the base image follows
output_format; layers are always png with an alpha channel; bounding_box.normalizedholds integers from 0 to 1000; preferabsolutewhen placing layers on the base image;- the base image and each layer are billed separately, and
usage.generated_imagesis the billed count.
Response format
response_format defaults to url, which returns addresses in our storage; with b64_json only base64
is returned, without url. Outputs are stored in our storage either way.
Billing
Billed per image, not per token. flash has one price for every tier; pro has two tiers by each output image's actual pixel count:
| Actual pixels | Tier |
|---|---|
| ≤ 2.61 MP (1K, 1.5K) | Lower |
| > 2.61 MP (2K) | Higher |
The upper bound is reserved at submission (17 images for layer decomposition) and settled on actual usage, with the difference refunded; if the available balance cannot cover the reservation you get 402. Failed requests are not charged.
output_tokens and total_tokens in the response are upstream's area-based reference figures and are
not billed. This endpoint's response has no cost field; check the console logs, or submit through
/v1/tasks and read cost from the retrieved result.
curl https://gateway.amux.ai/api/v3/images/generations \
-H "Authorization: Bearer $AMUX_API_KEY" \
-d '{
"model": "bytedance/seedream-5.0-pro",
"prompt": "一只红色的纸船漂在雨后的街道上,电影感光影",
"size": "2K",
"watermark": false
}'{
"model": "doubao-seedream-5-0-pro-260628",
"created": 1792511123,
"data": [
{
"size": "2048x2048",
"url": "https://cdn.amux.ai/gen/20261021/task_01M5CWPZEAJ6FRGPDM1G7G1V29-0.jpg",
"output_format": "jpeg"
}
],
"usage": {
"generated_images": 1,
"output_tokens": 16384,
"total_tokens": 16384
}
}