Seedream 4.5
Overview
Use Seedream 4.5 through the unified image generation API with a narrower, model-focused request shape.
Authentication
All API requests require a Bearer token in the request header.
Authorization: Bearer YOUR_API_KEYCreate and manage API keys from API Keys or use https://www.apimall.ai/api-keys.
1. Create Generation Task
API Information
- URL:
POST https://gateway.apimall.ai/api/v1/images/generate - Content-Type:
application/json
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | stringseedream-4-5 | Required | Model identifier for this endpoint. Default: |
type | stringtext-to-image | Optional | Task mode for the selected model. Default: |
prompt | string | Required | Prompt or edit instruction for the generation task. |
image_urls | array | Optional | Reference image URLs for edit, upscale, or multi-image workflows. |
image_resolution | string | Optional | Output resolution tier combined with `image_size` to determine final pixel dimensions. |
aspect_ratio | string | Optional | Target aspect ratio when supported by the selected model. |
Request Example
{
"model": "seedream-4-5",
"type": "text-to-image",
"prompt": "A jewelry campaign shot with glossy reflections and a soft studio gradient.",
"aspect_ratio": "1:1",
"image_resolution": "2K"
}Response Example
{
"success": true,
"data": {
"task_id": "img_01HQ9M7XJQ7PZ3GQ9F6C5W3N2M",
"request_id": "provider_req_01HQ9M87A5Y2QZW0S1R3T6YQ2C",
"credits_used": 8,
"remaining_credits": 112,
"model": "seedream-4-5"
},
"request_id": "req_01HQ9M7J7X9P7Y8T6W5V4U3S2R"
}cURL Example
curl --request POST 'https://gateway.apimall.ai/api/v1/images/generate' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedream-4-5",
"type": "text-to-image",
"prompt": "A jewelry campaign shot with glossy reflections and a soft studio gradient.",
"aspect_ratio": "1:1",
"image_resolution": "2K"
}'JavaScript Example
const API_KEY = process.env.APIMALL_API_KEY;
const CREATE_URL = 'https://gateway.apimall.ai/api/v1/images/generate';
const payload = {
"model": "seedream-4-5",
"type": "text-to-image",
"prompt": "A jewelry campaign shot with glossy reflections and a soft studio gradient.",
"aspect_ratio": "1:1",
"image_resolution": "2K"
};
async function createTask() {
const response = await fetch(CREATE_URL, {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(`Create task failed: ${response.status} ${response.statusText}`);
}
const json = await response.json();
const taskId = json.data?.task_id;
if (!taskId) {
throw new Error('Missing task_id in create response');
}
return taskId;
}
async function getTask(taskId) {
const response = await fetch(`https://gateway.apimall.ai/api/v1/images/${encodeURIComponent(String(taskId))}`, {
headers: {
Authorization: `Bearer ${API_KEY}`,
},
});
if (!response.ok) {
throw new Error(`Query task failed: ${response.status} ${response.statusText}`);
}
const json = await response.json();
return {
...json,
};
}
async function waitForTask(taskId) {
while (true) {
const task = await getTask(taskId);
const state = task.data?.status;
if (state === 'completed') {
return task;
}
if (state === 'failed') {
throw new Error(task.data?.failMsg || 'Task failed');
}
await new Promise((resolve) => setTimeout(resolve, 3000));
}
}
(async () => {
const taskId = await createTask();
const result = await waitForTask(taskId);
console.log(result);
})().catch(console.error);Response Parameters
| Parameter | Type | Description |
|---|---|---|
success | boolean | Whether the request completed successfully. |
data.task_id | string | Task ID used to query task status and results. |
data.request_id | string | Provider-side request identifier for tracing. |
data.credits_used | integer | Credits consumed by this request. |
data.remaining_credits | integer | Credits remaining after the request. |
data.model | string | Model name used for the task. |
request_id | string | Request identifier for debugging and support. |
Error Response Example
{
"success": false,
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits"
},
"request_id": "req_01HQ9M7J7X9P7Y8T6W5V4U3S2R"
}2. Query Task Status
API Information
- URL:
GET https://gateway.apimall.ai/api/v1/images/{task_id}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id | string | Required | Image task identifier returned by `POST /api/v1/images/generate`. |
Request Example
GET https://gateway.apimall.ai/api/v1/images/img_01HQ9M7XJQ7PZ3GQ9F6C5W3N2McURL Example
curl --request GET 'https://gateway.apimall.ai/api/v1/images/img_01HQ9M7XJQ7PZ3GQ9F6C5W3N2M' \
--header 'Authorization: Bearer YOUR_API_KEY'Response Example
{
"success": true,
"data": {
"task_id": "img_01HQ9M7XJQ7PZ3GQ9F6C5W3N2M",
"model": "seedream-4-5",
"status": "completed",
"output": {
"resultUrls": [
"https://cdn.apimall.ai/generated/image-01.webp"
]
},
"primary_url": "https://cdn.apimall.ai/generated/result.webp",
"image_url": "https://cdn.apimall.ai/generated/cover.webp",
"error_message": null,
"credits_used": 8,
"credits_refunded": 0,
"created_at": "2026-03-12T09:30:00.000Z",
"updated_at": "2026-03-12T09:31:06.000Z",
"completed_at": "2026-03-12T09:31:06.000Z"
},
"request_id": "req_01HQ9M7J7X9P7Y8T6W5V4U3S2R"
}Response Parameters
| Parameter | Type | Description |
|---|---|---|
success | boolean | Whether the request completed successfully. |
data.task_id | string | Task ID used to query task status and results. |
data.model | string | Model name used for the task. |
data.status | string | Current status value returned by the API. Generation task endpoints use normalized values such as `pending`, `processing`, `completed`, `failed`, or `unknown`; management endpoints may return resource states such as `created`, `revoked`, or `active`. |
data.output.resultUrls | array | Generated result URLs returned by the upstream provider payload. |
data.primary_url | string | Primary hosted image URL for image tasks. |
data.image_url | string | Hosted image result URL. |
data.error_message | string | Failure reason returned when the music task does not complete successfully. |
data.credits_used | integer | Credits consumed by this request. |
data.credits_refunded | integer | Credits refunded after failure or partial refund handling. |
data.created_at | string | Creation timestamp for the returned resource or task record. |
data.updated_at | string | Last update timestamp for the returned resource or task record. |
data.completed_at | string | Completion timestamp for the task when available. |
request_id | string | Request identifier for debugging and support. |
Usage Flow
- Create a generation task by calling `POST https://gateway.apimall.ai/api/v1/images/generate`.
- Persist `data.task_id` from the create response so you can resume polling later.
- Poll `GET https://gateway.apimall.ai/api/v1/images/{task_id}` until `data.status` reaches `completed` or `failed`.
- Read the generated image URLs from the final task payload.
Integration Notes
- Store your API key on the server side only.
- Persist the returned `data.task_id` immediately so you can resume polling after restarts.
- Use an `Idempotency-Key` header when retrying create requests from your backend.
- Poll the task endpoint every few seconds with backoff until `data.status` reaches `completed` or `failed`.
- Use `data.primary_url` or `data.image_url` as the final hosted asset URL.
Error Codes
Common Error Codes
| Status Code | Description |
|---|---|
| 200 | Request successful |
| 400 | Invalid request parameters |
| 401 | API key required or invalid API key |
| 402 | Insufficient credits |
| 403 | API access not approved or request made on a non-gateway host |
| 409 | Idempotency-Key conflict |
| 429 | Rate limit exceeded or too many concurrent jobs |
| 503 | Upstream provider is busy or temporarily unavailable |
| 451 | Prompt blocked by content moderation |
| 500 | Internal server error |