Seedream 5.0 Pro API, Seedream 5.0 Lite API, Seedream 4.5 API, Seedream 4.0 API: Pricing, Documentation
by BytePlus
Seedream 5.0 Pro API, developers can access text-to-image generation and advanced image editing features including multi-image editing. The API leverages ByteDance's extensive AI research to deliver high-quality visuals suitable for content creation and commercial applications.
Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Seedream 5 Pro API Documentation
- Premium retouching: background swaps, relighting and cleanup at the highest quality tier.
- Photorealistic object insertion: composite products or elements seamlessly into scenes.
- Multi-reference composition: combine up to 10 reference images (e.g. place a product into a new setting).
- Brand-consistent variations: produce style-matched edits of hero imagery for campaigns.
Base URL
https://gateway.pixazo.ai/seedream-5-pro/v1/edit-image
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 5 Pro Edit generate request - Seedream 5 Pro Image Edit API
Request Code
POST https://gateway.pixazo.ai/seedream-5-pro/v1/edit-image
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "add sunglasses to the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"
],
"size": "2K"
}
import requests
url = "https://gateway.pixazo.ai/seedream-5-pro/v1/edit-image"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "add sunglasses to the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"
],
"size": "2K"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/seedream-5-pro/v1/edit-image';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'add sunglasses to the cat',
image: [
'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg'
],
size: '2K'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/seedream-5-pro/v1/edit-image" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "add sunglasses to the cat",
"image": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"],
"size": "2K"
}'
Output
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "seedream-5-pro",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-pro",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - Seedream 5 Pro Edit generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | up to ~600 English words (recommended) | Text instruction describing the edit to apply to the source image(s). The provider recommends keeping prompts under ~600 English words. |
| image | Yes | string | array | — | URL or array of up to 10 URLs | Source image(s) to edit — a single public image URL or an array of up to 10 reference-image URLs. Each image: JPEG, PNG, WEBP, BMP, TIFF, GIF or HEIC/HEIF; max 30 MB per file; width and height each > 14 px; total size up to 6000×6000 px; aspect ratio between 1:16 and 16:1. |
| size | No | string | 2K | 1K, 2K; or WIDTHxHEIGHT in pixels | Output resolution. Pass a tier (1K or 2K) and the model chooses the exact dimensions to fit your prompt, or pass explicit pixel dimensions such as 2048x1024. Explicit dimensions must have total pixels between 1280x720 (921,600) and 4,624,220, width and height that are multiples of 16, and an aspect ratio between 1:16 and 16:1. |
| watermark | No | boolean | false | true, false | Set to true to add a small AI-generated watermark to the output image. Off by default. |
| output_format | No | string | jpeg | png, jpeg | Encoding of the generated image. Note: the gateway-hosted result URL always ends in .jpg regardless of format; the encoded bytes match your output_format choice. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | — | JPG, PNG, WEBP | Image(s) to edit. |
Example Request
{
"prompt": "add sunglasses to the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"
],
"size": "2K"
}
Response
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.035"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'seedream-5-pro' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-pro",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "seedream-5-pro",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-04-17T11:41:07.503Z",
"updated_at": "2026-04-17T11:42:15.000Z",
"completed_at": "2026-04-17T11:42:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg or image/png) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Seedream 5 Pro API Pricing
| Resolution | Price (USD) |
|---|---|
| 1K | $0.0675 |
| 2K | $0.135 |
Seedream 5 Pro API Documentation
- High-fidelity hero images: landing pages, campaigns and key art where detail matters most.
- Photorealistic product renders: packaging mockups and premium product visuals.
- Editorial illustration: magazine-quality art for articles and features.
- Print-ready visuals: 2K output suitable for high-quality print and large display.
Base URL
https://gateway.pixazo.ai/seedream-5-pro/v1/text-to-image
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 5 Pro Text to Image generate request - Seedream 5 Pro Text to Image API
Request Code
POST https://gateway.pixazo.ai/seedream-5-pro/v1/text-to-image
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}
import requests
url = "https://gateway.pixazo.ai/seedream-5-pro/v1/text-to-image"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/seedream-5-pro/v1/text-to-image';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'a majestic lion in a field of flowers, golden hour lighting, cinematic',
size: '2K'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/seedream-5-pro/v1/text-to-image" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}'
Output
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "seedream-5-pro",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-pro",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - Seedream 5 Pro Text to Image generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | up to ~600 English words (recommended) | Text prompt describing the image to generate. Be specific and descriptive for best results. The provider recommends keeping prompts under ~600 English words. |
| size | No | string | 2K | 1K, 2K; or WIDTHxHEIGHT in pixels | Output resolution. Pass a tier (1K or 2K) and the model chooses the exact dimensions to fit your prompt, or pass explicit pixel dimensions such as 2048x1024. Explicit dimensions must have total pixels between 1280x720 (921,600) and 4,624,220, width and height that are multiples of 16, and an aspect ratio between 1:16 and 16:1. |
| watermark | No | boolean | false | true, false | Set to true to add a small AI-generated watermark to the output image. Off by default. |
| output_format | No | string | jpeg | png, jpeg | Encoding of the generated image. Note: the gateway-hosted result URL always ends in .jpg regardless of format; the encoded bytes match your output_format choice. |
Example Request
{
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}
Response
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.035"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'seedream-5-pro' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "seedream-5-pro_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-pro",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/seedream-5-pro_019d9b3e-9e95-75e3-7533-a5f1149cd9f94"
Response (Completed)
{
"request_id": "seedream-5-pro_019d9b3e-9e95-75e3-7533-a5f1149cd9f94",
"status": "COMPLETED",
"model_id": "seedream-5-pro",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-pro_019d9b3e-9e95-75e3-7533-a5f1149cd9f94/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-04-17T11:41:06.171Z",
"updated_at": "2026-04-17T11:41:57.000Z",
"completed_at": "2026-04-17T11:41:57.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg or image/png) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Seedream 5 Pro API Pricing
| Resolution | Price (USD) |
|---|---|
| 1K | $0.0675 |
| 2K | $0.135 |
Seedream 5 Lite API Documentation
- Background replacement: swap or clean up backgrounds with one instruction.
- Add / remove objects: insert or erase elements described in plain text.
- Style transfer & relighting: restyle photos or change lighting and mood.
- Product variants: recolor or restyle a product shot for e-commerce listings.
- Multi-reference composition: blend up to 14 reference images into one coherent scene (refs + outputs ≤ 15).
Base URL
https://gateway.pixazo.ai/seedream-5-lite/v1/edit-image
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 5 Lite Edit generate request - Seedream 5 Lite Image Edit API
Request Code
POST https://gateway.pixazo.ai/seedream-5-lite/v1/edit-image
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "add sunglasses to the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"
],
"size": "2K"
}
import requests
url = "https://gateway.pixazo.ai/seedream-5-lite/v1/edit-image"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "add sunglasses to the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"
],
"size": "2K"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/seedream-5-lite/v1/edit-image';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'add sunglasses to the cat',
image: [
'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg'
],
size: '2K'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/seedream-5-lite/v1/edit-image" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "add sunglasses to the cat",
"image": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"],
"size": "2K"
}'
Output
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "seedream-5-lite",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-lite",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - Seedream 5 Lite Edit generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | up to ~600 English words (recommended) | Text instruction describing the edit to apply to the source image(s). The provider recommends keeping prompts under ~600 English words. |
| image | Yes | string | array | — | URL or array of up to 14 URLs | Source image(s) to edit — a single public image URL or an array of up to 14 reference-image URLs. Each image: JPEG, PNG, WEBP, BMP, TIFF, GIF or HEIC/HEIF; max 30 MB per file; width and height each > 14 px; total size up to 6000×6000 px; aspect ratio between 1:16 and 16:1. Reference images + generated output images ≤ 15 per request. |
| size | No | string | 2K | 2K, 3K, 4K; or WIDTHxHEIGHT in pixels | Output resolution. Pass a tier (2K, 3K or 4K) and the model chooses the exact dimensions to fit your prompt, or pass explicit pixel dimensions such as 3840x2160. Explicit dimensions must have total pixels between 2560x1440 (3,686,400) and 4096x4096 (16,777,216) and an aspect ratio between 1:16 and 16:1. |
| watermark | No | boolean | false | true, false | Set to true to add a small AI-generated watermark to the output image. Off by default. |
| output_format | No | string | jpeg | png, jpeg | Encoding of the generated image. Note: the gateway-hosted result URL always ends in .jpg regardless of format; the encoded bytes match your output_format choice. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | — | JPG, PNG, WEBP | Image(s) to edit. |
Example Request
{
"prompt": "add sunglasses to the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg"
],
"size": "2K"
}
Response
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.035"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'seedream-5-lite' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-lite",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "seedream-5-lite",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-04-17T11:41:07.503Z",
"updated_at": "2026-04-17T11:42:15.000Z",
"completed_at": "2026-04-17T11:42:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg or image/png) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Seedream 5 Lite API Pricing
Seedream 5 Lite API Documentation
- Rapid concept art & mood boards: iterate visual ideas quickly (~30–40s per image).
- Marketing & social creatives at scale: generate campaign and post imagery from copy.
- E-commerce visuals: product lifestyle shots and category imagery without a studio.
- Storyboards & keyframes: pre-visualise scenes for video and animation pipelines.
- Blog & hero illustrations: headers and section art generated from the article brief.
Base URL
https://gateway.pixazo.ai/seedream-5-lite/v1/text-to-image
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 5 Lite Text to Image generate request - Seedream 5 Lite Text to Image API
Request Code
POST https://gateway.pixazo.ai/seedream-5-lite/v1/text-to-image
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}
import requests
url = "https://gateway.pixazo.ai/seedream-5-lite/v1/text-to-image"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/seedream-5-lite/v1/text-to-image';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'a majestic lion in a field of flowers, golden hour lighting, cinematic',
size: '2K'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/seedream-5-lite/v1/text-to-image" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}'
Output
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "seedream-5-lite",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-lite",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - Seedream 5 Lite Text to Image generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | up to ~600 English words (recommended) | Text prompt describing the image to generate. Be specific and descriptive for best results. The provider recommends keeping prompts under ~600 English words. |
| size | No | string | 2K | 2K, 3K, 4K; or WIDTHxHEIGHT in pixels | Output resolution. Pass a tier (2K, 3K or 4K) and the model chooses the exact dimensions to fit your prompt, or pass explicit pixel dimensions such as 3840x2160. Explicit dimensions must have total pixels between 2560x1440 (3,686,400) and 4096x4096 (16,777,216) and an aspect ratio between 1:16 and 16:1. |
| watermark | No | boolean | false | true, false | Set to true to add a small AI-generated watermark to the output image. Off by default. |
| output_format | No | string | jpeg | png, jpeg | Encoding of the generated image. Note: the gateway-hosted result URL always ends in .jpg regardless of format; the encoded bytes match your output_format choice. |
Example Request
{
"prompt": "a majestic lion in a field of flowers, golden hour lighting, cinematic",
"size": "2K"
}
Response
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.035"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'seedream-5-lite' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "seedream-5-lite_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "seedream-5-lite",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/seedream-5-lite_019d9b3e-9e95-75e3-7533-a5f1149cd9f94"
Response (Completed)
{
"request_id": "seedream-5-lite_019d9b3e-9e95-75e3-7533-a5f1149cd9f94",
"status": "COMPLETED",
"model_id": "seedream-5-lite",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/seedream-5-lite_019d9b3e-9e95-75e3-7533-a5f1149cd9f94/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-04-17T11:41:06.171Z",
"updated_at": "2026-04-17T11:41:57.000Z",
"completed_at": "2026-04-17T11:41:57.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg or image/png) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Seedream 5 Lite API Pricing
Seedream 4.5 API Documentation
https://gateway.pixazo.ai/byteplus/v1/getEditImage
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 4.5 Image to Image (Edit Image)
Request Code
POST https://gateway.pixazo.ai/byteplus/v1/getEditImage
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "seedream-4-5-251128",
"prompt": "Make the cat eye blue",
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"size": "2K",
"guidance_scale": 6,
"seed": 42
}
import requests
url = "https://gateway.pixazo.ai/byteplus/v1/getEditImage"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "seedream-4-5-251128",
"prompt": "Make the cat eye blue",
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"size": "2K",
"guidance_scale": 6,
"seed": 42
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/byteplus/v1/getEditImage';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
model: "seedream-4-5-251128",
prompt: "Make the cat eye blue",
image: "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
size: "2K",
guidance_scale: 6,
seed: 42
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/byteplus/v1/getEditImage" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"model": "seedream-4-5-251128",
"prompt": "Make the cat eye blue",
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"size": "2K",
"guidance_scale": 6,
"seed": 42
}'
Output
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Seedream 4.5 Image to Image (Edit Image)
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| model | Yes | string | — | seedream-4-5-251128, seededit-3-0-i2i-250628 | Model ID. Use seedream-4-5-251128 for Seedream 4.5, or seededit-3-0-i2i-250628 for Seededit 3.0. |
| prompt | Yes | string | — | up to ~600 English words (recommended) | Text prompt describing the edit to apply to the image. The provider recommends keeping prompts under ~600 English words. |
| image | Yes | string or array | — | URL or data:image/<format>;base64,... | The image(s) to edit — an accessible URL or a Base64 data URL (format name lowercase). Seedream 4.5 accepts jpeg, png, webp, bmp, tiff, gif, heic and heif; each image up to 30 MB, aspect ratio between 1/16 and 16, total pixels up to 6000x6000. Pass an array to use multiple reference images (up to 14). |
| size | No | string | 2048x2048 | 2K, 4K; adaptive (Seededit); or WIDTHxHEIGHT in pixels | Output size. For Seedream 4.5 pass a tier (2K or 4K) or explicit pixel dimensions with total pixels between 2560x1440 (3,686,400) and 4096x4096 (16,777,216) and an aspect ratio between 1/16 and 16. Seededit 3.0 supports adaptive. |
| seed | No | integer | -1 | [-1, 2147483647] | Random seed controlling output randomness. -1 (or unset) picks a random seed. Note: BytePlus lists seed as officially supported only on Seedream 3.0 (seedream-3-0-t2i); Seedream 4.5 may ignore it, and identical seeds are not guaranteed to reproduce identical images. |
| guidance_scale | No | float | — | [1, 10] | Controls how closely the output follows your prompt (prompt adherence); higher values stick more strictly to the prompt. Note: per BytePlus this parameter is not supported by Seedream 4.5/4.0 — it applies to Seedream 3.0 (default 2.5) and Seededit models only. |
| sequential_image_generation | No | string | disabled | auto, disabled | Batch image generation (Seedream 4.5 only). auto lets the model decide whether to return a set of thematically related images (and how many) based on your prompt; disabled generates a single image. |
| sequential_image_generation_options | No | object | {"max_images": 15} | max_images: [1, 15] | Options for batch generation; effective only when sequential_image_generation is auto. max_images caps how many images are generated in one request (input reference images plus generated images must total 15 or fewer). |
| stream | No | boolean | false | true, false | Provider streaming mode — each output image is returned as soon as it is generated. Leave false on the gateway; results are delivered via the polling URL or webhook. |
| response_format | No | string | url | url, b64_json | Provider-side return format (url links expire after 24 hours). Deprecated for the queue flow — the gateway response always contains permanent R2 URL(s) in output.media_url. |
| watermark | No | boolean | true | true, false | When true (provider default), adds an "AI generated" watermark to the bottom-right corner of the image. Set false for clean output. |
| optimize_prompt_options | No | object | {"mode": "standard"} | mode: standard | Prompt-optimization settings (Seedream 4.5 only). Seedream 4.5 supports only standard mode (higher quality, longer generation time); fast is not supported for this model. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP · < 10 MB | Image to edit. |
Example Request
{
"model": "seedream-4-5-251128",
"prompt": "Make the cat eye blue",
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"size": "2K",
"guidance_scale": 6,
"seed": 42
}
Response
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.04"
}
Error via Status/Webhook
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "byteplus",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "byteplus",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1776429228529-aq8fsc3s5k7-1.jpg"
],
"media_type": "image/jpeg"
},
"created_at": "2026-04-17T12:33:13.000Z",
"updated_at": "2026-04-17T12:33:13.000Z",
"completed_at": "2026-04-17T12:33:13.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a request to the API endpoint above
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use the X-Webhook-URL header to receive a callback instead of polling.
Seedream 4.5 API Pricing
Seedream 4.5 API Documentation
https://gateway.pixazo.ai/byteplus/v1/getTextToImage
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 4.5 Text to Image
Request Code
POST https://gateway.pixazo.ai/byteplus/v1/getTextToImage
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "seedream-4-5-251128",
"prompt": "a fisheye close-up of a cat face, playful dramatic effect",
"size": "2K",
"seed": 42
}
import requests
url = "https://gateway.pixazo.ai/byteplus/v1/getTextToImage"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "seedream-4-5-251128",
"prompt": "a fisheye close-up of a cat face, playful dramatic effect",
"size": "2K",
"seed": 42
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/byteplus/v1/getTextToImage';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
model: "seedream-4-5-251128",
prompt: "a fisheye close-up of a cat face, playful dramatic effect",
size: "2K",
seed: 42
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/byteplus/v1/getTextToImage" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"model": "seedream-4-5-251128",
"prompt": "a fisheye close-up of a cat face, playful dramatic effect",
"size": "2K",
"seed": 42
}'
Output
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Seedream 4.5 Text to Image
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| model | Yes | string | — | seedream-4-5-251128 | Model ID. Use seedream-4-5-251128 for Seedream 4.5. |
| prompt | Yes | string | — | up to ~600 English words (recommended) | Text prompt describing the image to generate. The provider recommends keeping prompts under ~600 English words — overly long prompts can scatter detail. |
| size | No | string | 2048x2048 | 2K, 4K; or WIDTHxHEIGHT in pixels | Output resolution. Pass a tier (2K or 4K) and the model picks the exact dimensions to fit your prompt, or pass explicit pixel dimensions such as 3840x2160. Explicit dimensions must have total pixels between 2560x1440 (3,686,400) and 4096x4096 (16,777,216) and an aspect ratio between 1/16 and 16. |
| seed | No | integer | -1 | [-1, 2147483647] | Random seed controlling output randomness. -1 (or unset) picks a random seed. Note: BytePlus lists seed as officially supported only on Seedream 3.0 (seedream-3-0-t2i); Seedream 4.5 may ignore it, and identical seeds are not guaranteed to reproduce identical images. |
| sequential_image_generation | No | string | disabled | auto, disabled | Batch image generation. auto lets the model decide whether to return a set of thematically related images (and how many) based on your prompt; disabled generates a single image. |
| sequential_image_generation_options | No | object | {"max_images": 15} | max_images: [1, 15] | Options for batch generation; effective only when sequential_image_generation is auto. max_images caps how many images are generated in one request (input reference images plus generated images must total 15 or fewer). |
| stream | No | boolean | false | true, false | Provider streaming mode — each output image is returned as soon as it is generated. Leave false on the gateway; results are delivered via the polling URL or webhook. |
| response_format | No | string | url | url, b64_json | Provider-side return format (url links expire after 24 hours). Deprecated for the queue flow — the gateway response always contains permanent R2 URL(s) in output.media_url. |
| watermark | No | boolean | true | true, false | When true (provider default), adds an "AI generated" watermark to the bottom-right corner of the image. Set false for clean output. |
| optimize_prompt_options | No | object | {"mode": "standard"} | mode: standard | Prompt-optimization settings. Seedream 4.5 supports only standard mode (higher quality, longer generation time); fast is not supported for this model. |
Example Request
{
"model": "seedream-4-5-251128",
"prompt": "a fisheye close-up of a cat face, playful dramatic effect",
"size": "2K",
"seed": 42
}
Response
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.04"
}
Error via Status/Webhook
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "byteplus",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "byteplus",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1776429228529-aq8fsc3s5k7-1.jpg"
],
"media_type": "image/jpeg"
},
"created_at": "2026-04-17T12:33:13.000Z",
"updated_at": "2026-04-17T12:33:13.000Z",
"completed_at": "2026-04-17T12:33:13.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a request to the API endpoint above
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use the X-Webhook-URL header to receive a callback instead of polling.
Seedream 4.5 API Pricing
Seedream 4 API Documentation
https://gateway.pixazo.ai/byteplus/v1/getEditMultiImage
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Seedream 4 Multi-Image Edit
Request Code
POST https://gateway.pixazo.ai/byteplus/v1/getEditMultiImage
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Girl holding the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/model.png"
]
}
import requests
url = "https://gateway.pixazo.ai/byteplus/v1/getEditMultiImage"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Girl holding the cat",
"image": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg","https://pub-582b7213209642b9b995c96c95a30381.r2.dev/model.png"]
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/byteplus/v1/getEditMultiImage';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: "Girl holding the cat",
image: ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg","https://pub-582b7213209642b9b995c96c95a30381.r2.dev/model.png"]
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/byteplus/v1/getEditMultiImage" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "Girl holding the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/model.png"
]
}'
Output
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Seedream 4 Multi-Image Edit
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt describing how to combine or edit the reference images. Keep it under 600 English words; overly long prompts may lose detail. |
| image | Yes | array<string> | — | 2-10 images | Array of 2-10 reference images, each a publicly accessible URL or a Base64 data URL (data:image/<format>;base64,...). Formats: jpeg, png, webp, bmp, tiff, gif, heic, heif; up to 30 MB per image. |
| model | No | string | Seedream 4.0 | — | Model ID. Defaults to Seedream 4.0 multi-image editing (seedream-4-0-250828). |
| size | No | string | — | 1K, 2K, 4K, or <width>x<height> | Output size. Use a resolution preset (describe the aspect ratio in your prompt) or exact pixels (e.g. 2048x2048). Total output pixels must fall within [1280x720, 4096x4096]. |
| seed | No | integer | -1 | [-1, 2147483647] | Random seed for reproducibility. Note: current BytePlus docs list seed as effective only for seedream-3-0-t2i; Seedream 4.0 may ignore it. |
| sequential_image_generation | No | string | disabled | auto, disabled | Batch (image-set) generation. auto lets the model return a set of related images based on your prompt; disabled generates a single image. |
| sequential_image_generation_options | No | object | — | max_images: [1, 15] | Options for batch generation (used when sequential_image_generation is auto). max_images (default 15) caps the generated images; reference images + generated images must total 15 or fewer. |
| optimize_prompt_options | No | object | — | mode: standard, fast | Prompt-optimization settings. mode defaults to standard (higher quality, slower); fast is quicker with more average quality. |
| response_format | No | string | url | url, b64_json | Deprecated for queue flow — the final image is always returned as an R2 URL in output.media_url. |
| watermark | No | boolean | true | true, false | When true, adds an "AI generated" watermark to the bottom-right corner. Set false to disable. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | — | JPG, PNG, WEBP · < 10 MB | Images to edit (2+). |
Example Request
{
"prompt": "Girl holding the cat",
"image": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1757499948018-hntkjsg9kj.jpg",
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/model.png"
]
}
Response
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.04"
}
Error via Status/Webhook
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "byteplus",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "byteplus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "byteplus",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/byteplus/1776429228529-aq8fsc3s5k7-1.jpg"
],
"media_type": "image/jpeg"
},
"created_at": "2026-04-17T12:33:13.000Z",
"updated_at": "2026-04-17T12:33:13.000Z",
"completed_at": "2026-04-17T12:33:13.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (image/jpeg) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a request to the API endpoint above
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use the X-Webhook-URL header to receive a callback instead of polling.
