Appearance
Wan2.6 - image generation and editing
The Wan2.6 image generation and editing model supports multi-image input, image editing, and interleaved text-image output.
Model overview
| Model | Description | Output image specifications |
|---|---|---|
| wan2.6-image | Edits images and generates interleaved text-image output. | Image format: PNG For image resolution and dimensions, see the size parameter . |
Note
Before calling the API, check the model list and pricing supported in each region.
Prerequisites
Create an API key and export the API key as an environment variable. Important
The Singapore, Virginia, and Beijing regions have separate API keys and request endpoints . They cannot be used interchangeably. Cross-region calls lead to authentication failures or service errors. For more information, see Select a region and service deployment scope.
HTTP synchronous
Returns results in a single request. Recommended for most scenarios.
Singapore
POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
Virginia
POST https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
Beijing
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
The global deployment scope (Frankfurt region) only supports asynchronous calls .
Request parameters
## Image editing
curl
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \\
--header 'Content-Type: application/json' \\
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \\
--data '{
"model": "wan2.6-image",
"input": {
"messages": \[
{
"role": "user",
"content": \[
{
"text": "Generate a tomato and egg stir-fry based on the style of image 1 and the background of image 2"
},
{
"image": "https://cdn.wanx.aliyuncs.com/tmp/pressure/umbrella1.png"
},
{
"image": "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"
}
\]
}
\]
},
"parameters": {
"prompt_extend": true,
"watermark": false,
"n": 1,
"enable_interleave": false,
"size": "1K"
}
}'## Interleaved text-image output (streaming only)
When using interleaved text-image output (parameters.enable_interleave = true) with the synchronous interface, streaming is required. Set both conditions:
- Set
X-DashScope-SSEtoenable. - Set
parameters.streamtotrue.
curl
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \\
--header 'Content-Type: application/json' \\
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \\
--header 'X-DashScope-SSE: enable' \\
--data '{
"model": "wan2.6-image",
"input": {
"messages": \[
{
"role": "user",
"content": \[
{
"text": "Give me a three-image tutorial for stir-fried pork with chili peppers"
}
\]
}
\]
},
"parameters": {
"max_images": 3,
"size": "1280*1280",
"stream": true,
"enable_interleave":true
}
}'Request headers
Content-Type *string* (Required) The content type of the request. Must be application/json.
Authorization *string* (Required) Authenticates the request with a Model Studio API key. Example: Bearer sk-xxxx.
**X-DashScope-SSE ***string* (Optional) Enables streaming output.
- When
parameters.enable_interleave=true, set to**enable**. - In other cases, omit this header.
Request body
model *string* (Required) Model name. Set to wan2.6-image.
input *object* (Required) Basic input information. Properties
messages *array* (Required) Request content array. Only single-turn conversations are supported -- provide one role-content pair. Properties
**role ***string* (Required) Message role. Set this parameter to user.
**content ***array* (Required) Array of message content. Properties
text *string* (Required) Positive prompt describing the desired image content, style, and composition. Supports Chinese and English. Maximum is 2,000 characters (each Chinese character, letter, digit, or symbol counts as one). Content is auto-truncated if exceeded. Example: Generate a tomato and egg stir-fry based on this image style. Note: The content array must contain exactly one object with a text field.
**image *string* **(Optional) URL or Base64-encoded string of the input image. Image constraints:
Image formats: JPEG, JPG, PNG (alpha channel not supported), BMP, WebP.
Image resolution: Width and height must each be between 240 and 8,000 pixels.
File size: Must not exceed 10 MB. Image quantity limits:
The number of input images depends on the
parameters.enable_interleaveparameter. <li> Whenenable_interleave=true(interleaved text-image output), you can input 0 to 1 images.When
enable_interleave=false(image editing), you must input 1 to 4 images. </li>When you input multiple images, include multiple
imageobjects in thecontentarray, defining the image order by array sequence. Supported input formats:Use a publicly accessible URL <li> Supports HTTP or HTTPS protocols.
Example:
http://wanx.alicdn.com/material/xxx.jpeg. </li>Provide a Base64-encoded image string <li> Format: data:{MIME_type};base64,
Example: data:image/jpeg;base64,GDU7MtCZzEbTbmRZ... (for illustration only; provide the complete string in practice)
For Base64 encoding guidelines, see Image input methods. </li>
parameters *object* (Optional) Image processing parameters. Properties
negative_prompt *string* (optional) A negative prompt describing what you do not want in the image. Supports Chinese and English. Maximum length is 500 characters. Excess characters are truncated automatically. Example: Low resolution, low quality, distorted limbs, malformed fingers, oversaturated colors, wax-like appearance, no facial details, overly smooth surfaces, AI-generated look. Chaotic composition. Blurry or distorted text.
size *string* (Optional) Output image resolution. Supports two methods: referencing input image proportions or directly specifying dimensions. When enable_interleave=false (image editing mode):
Method 1: Reference input image proportions (recommended) Available output resolution options:
1K(default),2K. <li>1K: Output total pixels close to 1280*1280, maintaining the aspect ratio of the last input image.2K: Output total pixels close to 2048*2048, maintaining the aspect ratio of the last input image. </li>Method 2: Specify output image width and height in pixels Total pixels must be between [768768, 20482048], with an aspect ratio range of [1:4, 4:1]. ** Actual output pixel values are multiples of 16 closest to the specified value. When
enable_interleave=true(interleaved text-image output mode):Method 1: Reference input image proportions (default method) <li> If total input image pixels ≤ 1280*1280, output matches the input's total pixels and aspect ratio.
If total input image pixels > 12801280, output total pixels are close to 12801280, maintaining the input's aspect ratio.
If no input image is provided, the output size is 1280*1280. </li>
Method 2: Specify output image width and height in pixels Total pixels must be between [768768, 12801280], with an aspect ratio range of [1:4, 4:1]. Actual output pixel values are multiples of 16 closest to the specified value.
<b>Recommended resolutions for common aspect ratios**
- 1:1: 1280*1280
- 2:3: 800*1200
- 3:2: 1200*800
- 3:4: 960*1280
- 4:3: 1280*960
- 9:16: 720*1280
- 16:9: 1280*720
- 21:9: 1344*576
enable_interleave *bool* (Optional) Controls image generation mode:
- false (default): Indicates image editing mode (supports multi-image input and subject consistency generation). <li> Use case: Edit, apply style transfer, or generate subject-consistent images based on 1 to 4 input images.
- Input: Must provide at least one reference image.
- Output: Can generate 1 to 4 result images. </li>
- true: Enables interleaved text-image output mode (supports inputting one image or no image). <li> Use case: Generate content combining text and images based on a text description, or perform pure text-to-image generation.
- Input: Can provide no image (text-to-image) or up to one reference image.
- Output: Generates mixed content containing both text and images. </li>
n *integer* (Optional)
**
**Important ** This parameter affects cost (charged per successful image -- see pricing).
Specifies the number of images to generate. Behavior depends on enable_interleave:
- When
enable_interleave=false(image editing mode): <li> Function: Directly controls the number of generated images. - Range: 1 to 4. Default value is 4.
- During testing, set this value to 1 for low-cost validation. </li>
- When
enable_interleave=true(interleaved text-image mode): <li> Restriction: This parameter defaults to 1 and must remain 1. Setting any other value causes an error. - In this mode, use the
max_imagesparameter to control the maximum number of generated images. </li>
max_images *integer* (Optional)
**
**Important ** This parameter affects cost (charged per successful image -- see pricing).
Only effective in interleaved text-image mode (enable_interleave=true).
- Function: Specifies the maximum number of images the model can generate in a single response.
- Range: 1 to 5. Default value is 5.
- This parameter sets the maximum image count. Model may generate fewer (e.g., request 5, get 3).
prompt_extend *bool* (Optional) Only effective in image editing mode (enable_interleave = false). This parameter enables intelligent prompt rewriting (optimizes positive prompt only, leaves negative prompt unchanged).
- true (default)
- false
stream *bool* (Optional) This parameter enables streaming output. Required (set to true) when enable_interleave=true.
- false (default)
- true
watermark *bool* (Optional) Adds a watermark label in the bottom-right corner of the image with fixed text "AI Generated".
- false (default)
- true
seed *integer* (optional) Random number seed. Valid range: \[0,2147483647\]. Using the same seed yields similar outputs. If omitted, the algorithm uses a random seed. Note: Image generation is probabilistic. Even with the same seed, results may vary.
Response parameters
## Successful task execution
Task data (task status and image URLs) is retained for only 24 hours and then automatically purged. Save generated images promptly.
json
{
"output": {
"choices": \[
{
"finish_reason": "stop",
"message": {
"content": \[
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx.png?Expires=xxx",
"type": "image"
}
\],
"role": "assistant"
}
}
\],
"finished": true
},
"usage": {
"image_count": 1,
"input_tokens": 0,
"output_tokens": 0,
"size": "1376*768",
"total_tokens": 0
},
"request_id": "a3f4befe-cacd-49c9-8298-xxxxxx"
}## Successful task execution (streaming output)
Task data (task status and image URLs) is retained for only 24 hours and then automatically purged. Save generated images promptly.
json
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"meat"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":571,"image_count":3,"output_tokens":543,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"fragrant"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":572,"image_count":3,"output_tokens":544,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"intertwine"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":573,"image_count":3,"output_tokens":545,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
......
{"output":{"choices":\[{"message":{"content":\[{"type":"image","image":"https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx.png?Expires=xxxx"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":557,"image_count":3,"output_tokens":529,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"while"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":558,"image_count":3,"output_tokens":530,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"hot"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":559,"image_count":3,"output_tokens":531,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"pinch"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":560,"image_count":3,"output_tokens":532,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"up"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":561,"image_count":3,"output_tokens":533,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"a piece of"}\],"role":"assistant"},"finish_reason":"null"}\],"finished":true},"usage":{"total_tokens":562,"image_count":3,"output_tokens":534,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}
{"output":{"choices":\[{"message":{"content":\[{"type":"text","text":"meat"}\],"role":"assistant"},"finish_reason":"stop"}\],"finished":true},"usage":{"total_tokens":563,"image_count":3,"output_tokens":535,"size":"1280*1280","input_tokens":28},"request_id":"d2dcb952-bf91-4a6a-aad5-xxxxxx"}## Task execution failure
If the task fails, error information is returned. Use the code and message fields to identify the cause. See Error messages for troubleshooting.
json
{
"request_id": "a4d78a5f-655f-9639-8437-xxxxxx",
"code": "InvalidParameter",
"message": "num_images_per_prompt must be 1"
} **output** `*object*` Task output information.
Propertieschoices *array of object * Model-generated output content. Properties
finish_reason *string* Reason for task termination. Non-streaming output scenario: Naturally stops with stop. Streaming output scenario: This parameter indicates whether the data stream has finished transmitting.
- During transmission: Previous data packets continuously return
"finish_reason": "null", indicating content is still being generated. Continue receiving. - At transmission end: Only the last JSON structure returns
"finish_reason":"stop", indicating the streaming request has fully completed. Stop receiving.
message *object* Message returned by the model. Properties
**role ***string* Message role, fixed as assistant.
**content ***array*Properties
type *string* Output type. Enumerated values: text, image.
text *string* Generated text.
image *string* URL of the generated image in PNG format. Link expires after 24 hours. Download and save the image promptly.
finished *bool* Request completion flag.
- true
- false
usage *object* Output statistics. Counts only successful results. Properties
image_count *integer* Number of generated images.
size *string* Resolution of generated images. Example: 1376*768.
input_tokens *integer* Billed per image count.
- In image editing mode, fixed at 0.
- In interleaved text-image mode, this field counts input text tokens (not billed).
output_tokens *integer* Billed per image count.
- In image editing mode, fixed at 0.
- In interleaved text-image mode, this field counts output text tokens (not billed).
**total_tokens ***integer* Billed per image count.
- In image editing mode, fixed at 0.
- In interleaved text-image mode, this field counts total tokens (not billed).
request_id *string* Unique request identifier for tracing and troubleshooting.
code *string* Error code. Returned only for failed requests. See Error messages.
message *string* Detailed error message. Returned only for failed requests. See Error messages.
HTTP asynchronous
Process: Create task → Poll results
Step 1: Create task and get task ID
Singapore
POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Virginia
POST https://dashscope-us.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Beijing
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Frankfurt
POST https://++<u>{WorkspaceId}.eu-central-1.maas.aliyuncs.com</u>++/api/v1/services/aigc/image-generation/generation
When you make a call, replace WorkspaceId with your Workspace ID. Note
After the task is created, use the returned
task_idto query the result. Thetask_idis valid for 24 hours. Do not create duplicate tasks. Instead, use polling to retrieve the result.For guidance for beginners, see Postman.
Request parameters
## Image editing
curl
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/image-generation/generation' \\
--header 'Content-Type: application/json' \\
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \\
--header 'X-DashScope-Async: enable' \\
--data '{
"model": "wan2.6-image",
"input": {
"messages": \[
{
"role": "user",
"content": \[
{
"text": "Generate a tomato and egg stir-fry based on the style of image 1 and the background of image 2"
},
{
"image": "https://cdn.wanx.aliyuncs.com/tmp/pressure/umbrella1.png"
},
{
"image": "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"
}
\]
}
\]
},
"parameters": {
"prompt_extend": true,
"watermark": false,
"n": 1,
"enable_interleave": false,
"size": "1K"
}
}'## Interleaved text-image output
curl
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/image-generation/generation' \\
--header 'Content-Type: application/json' \\
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \\
--header 'X-DashScope-Async: enable' \\
--data '{
"model": "wan2.6-image",
"input": {
"messages": \[
{
"role": "user",
"content": \[
{
"text": "Give me a three-image tutorial for stir-fried pork with chili peppers"
}
\]
}
\]
},
"parameters": {
"max_images": 3,
"size": "1280*1280",
"enable_interleave":true
}
}'Request headers
Content-Type *string* (Required) The content type of the request. Must be application/json.
Authorization *string* (Required) Authenticates the request with a Model Studio API key. Example: Bearer sk-xxxx. **X-DashScope-Async **string* *(Required) Asynchronous processing configuration parameter. Must be set to **enable**.
**
**Important ** Omitting this header returns the error: "current user api does not support synchronous calls".
Request body
model *string* (Required) Model name. Example: wan2.6-image
input *object* (Required) Basic input information. Properties
messages *array* (Required) Array of request content. Currently, only single-turn conversations are supported. Provide one set of role and content parameters. Multi-turn conversations are not supported. Properties
**role ***string* (Required) Message role. Set this parameter to user.
**content ***array* (Required) Array of message content. Properties
text *string* (Required) Positive prompt describing the desired image content, style, and composition. Supports Chinese and English. Maximum is 2,000 characters (each Chinese character, letter, digit, or symbol counts as one). Content is auto-truncated if exceeded. Example: Generate a tomato and egg stir-fry based on this image style. Note: The content array must contain exactly one object with a text field.
**image *string* **(Optional) URL or Base64-encoded string of the input image. Image constraints:
Image formats: JPEG, JPG, PNG (alpha channel not supported), BMP, WebP.
Image resolution: Width and height must each be between 240 and 8,000 pixels.
File size: Must not exceed 10 MB. Image quantity limits:
The number of input images depends on the
parameters.enable_interleaveparameter. <li> Whenenable_interleave=true(interleaved text-image output), you can input 0 to 1 images.When
enable_interleave=false(image editing), you must input 1 to 4 images. </li>When you input multiple images, include multiple
imageobjects in thecontentarray, defining the image order by array sequence. Supported input formats:Use a publicly accessible URL <li> Supports HTTP or HTTPS protocols.
Example:
http://wanx.alicdn.com/material/xxx.jpeg. </li>Provide a Base64-encoded image string <li> Format: data:{MIME_type};base64,
Example: data:image/jpeg;base64,GDU7MtCZzEbTbmRZ... (for illustration only; provide the complete string in practice)
For Base64 encoding guidelines, see Image input methods. </li>
parameters *object* (Optional) Image processing parameters. Properties
negative_prompt *string* (optional) A negative prompt describing what you do not want in the image. Supports Chinese and English. Maximum length is 500 characters. Excess characters are truncated automatically. Example: Low resolution, low quality, distorted limbs, malformed fingers, oversaturated colors, wax-like appearance, no facial details, overly smooth surfaces, AI-generated look. Chaotic composition. Blurry or distorted text.
size *string* (Optional) Output image resolution. Supports two methods: referencing input image proportions or directly specifying dimensions. When enable_interleave=false (image editing mode):
Method 1: Reference input image proportions (recommended) Available output resolution options:
1K(default),2K. <li>1K: Output total pixels close to 1280*1280, maintaining the aspect ratio of the last input image.2K: Output total pixels close to 2048*2048, maintaining the aspect ratio of the last input image. </li>Method 2: Specify output image width and height in pixels Total pixels must be between [768768, 20482048], with an aspect ratio range of [1:4, 4:1]. ** Actual output pixel values are multiples of 16 closest to the specified value. When
enable_interleave=true(interleaved text-image output mode):Method 1: Reference input image proportions (default method) <li> If total input image pixels ≤ 1280*1280, output matches the input's total pixels and aspect ratio.
If total input image pixels > 12801280, output total pixels are close to 12801280, maintaining the input's aspect ratio.
If no input image is provided, the output size is 1280*1280. </li>
Method 2: Specify output image width and height in pixels Total pixels must be between [768768, 12801280], with an aspect ratio range of [1:4, 4:1]. Actual output pixel values are multiples of 16 closest to the specified value.
<b>Recommended resolutions for common aspect ratios**
- 1:1: 1280*1280
- 2:3: 800*1200
- 3:2: 1200*800
- 3:4: 960*1280
- 4:3: 1280*960
- 9:16: 720*1280
- 16:9: 1280*720
- 21:9: 1344*576
enable_interleave *bool* (Optional) Controls image generation mode:
- false (default): Indicates image editing mode (supports multi-image input and subject consistency generation). <li> Use case: Edit, apply style transfer, or generate subject-consistent images based on 1 to 4 input images.
- Input: Must provide at least one reference image.
- Output: Can generate 1 to 4 result images. </li>
- true: Enables interleaved text-image output mode (supports inputting one image or no image). <li> Use case: Generate content combining text and images based on a text description, or perform pure text-to-image generation.
- Input: Can provide no image (text-to-image) or up to one reference image.
- Output: Generates mixed content containing both text and images. </li>
n *integer* (Optional)
**
**Important ** This parameter affects cost (charged per successful image -- see pricing).
Specifies the number of images to generate. Behavior depends on enable_interleave:
- When
enable_interleave=false(image editing mode): <li> Function: Directly controls the number of generated images. - Range: 1 to 4. Default value is 4.
- During testing, set this value to 1 for low-cost validation. </li>
- When
enable_interleave=true(interleaved text-image mode): <li> Restriction: This parameter defaults to 1 and must remain 1. Setting any other value causes an error. - In this mode, use the
max_imagesparameter to control the maximum number of generated images. </li>
max_images *integer* (Optional)
**
**Important ** This parameter affects cost (charged per successful image -- see pricing).
Only effective in interleaved text-image mode (enable_interleave=true).
- Function: Specifies the maximum number of images the model can generate in a single response.
- Range: 1 to 5. Default value is 5.
- This parameter sets the maximum image count. Model may generate fewer (e.g., request 5, get 3).
prompt_extend *bool* (Optional) Only effective in image editing mode (enable_interleave = false). This parameter enables intelligent prompt rewriting (optimizes positive prompt only, leaves negative prompt unchanged).
- true (default)
- false
watermark *bool* (Optional) Adds a watermark label in the bottom-right corner of the image with fixed text "AI Generated".
- false (default)
- true
seed *integer* (optional) Random number seed. Valid range: \[0,2147483647\]. Using the same seed yields similar outputs. If omitted, the algorithm uses a random seed. Note: Image generation is probabilistic. Even with the same seed, results may vary.
Response parameters
Successful response
Save the task_id to query the task status and result.
json
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}Error response
Task creation failed. See Error messages.
json
{
"code": "InvalidApiKey",
"message": "No API-key provided.",
"request_id": "7438d53d-6eb8-4596-8835-xxxxxx"
} **output** `*object*` Task output information.
Properties
task_id *string* The task ID. Valid for queries for 24 hours.
task_status *string* The status of the task. Enumeration values
- PENDING
- RUNNING
- SUCCEEDED
- FAILED
- CANCELED
- UNKNOWN: The task does not exist or its status is unknown.
request_id *string* Unique request identifier for tracing and troubleshooting.
code *string* Error code. Returned only for failed requests. See Error messages.
message *string* Detailed error message. Returned only for failed requests. See Error messages.
Step 2: Query results using task ID
Singapore
GET https://dashscope-intl.aliyuncs.com/api/v1/tasks/{task_id}
Virginia
GET https://dashscope-us.aliyuncs.com/api/v1/tasks/{task_id}
Beijing
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
Frankfurt
GET https://++{WorkspaceId}.eu-central-1.maas.aliyuncs.com++/api/v1/tasks/{task_id}
When you make a call, replace {WorkspaceId} with your actual Workspace ID. Note
Polling recommendation: Image generation is time-consuming. Use a polling mechanism with a reasonable interval, such as 10 seconds.
Task state transition: PENDING → RUNNING → SUCCEEDED or FAILED.
Result link : After a task succeeds, an image URL valid for 24 hours is returned. Download and save the image to permanent storage, such as OSS.
Request parameters
## Query task results
Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.
curl
curl -X GET https://dashscope-intl.aliyuncs.com/api/v1/tasks/{task_id} \\
--header "Authorization: Bearer $DASHSCOPE_API_KEY"Request headers
Authorization *string* (Required) Authenticates the request with a Model Studio API key. Example: Bearer sk-xxxx.
URL path parameters
task_id *string* (Required) The ID of the task.
Response parameters
## Successful task execution
Task data (task status and image URLs) is retained for only 24 hours and then automatically purged. Save generated images promptly.
json
{
"request_id": "43d9e959-25bc-4dc7-9888-xxxxxx",
"output": {
"task_id": "858cad55-4bdc-4ba3-ae6c-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-12-16 04:21:02.275",
"scheduled_time": "2025-12-16 04:21:02.304",
"end_time": "2025-12-16 04:24:46.658",
"finished": true,
"choices": \[
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": \[
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/1xxx.png?Expires=xxx",
"type": "image"
}
\]
}
},
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": \[
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/1xxx.png?Expires=xxx",
"type": "image"
}
\]
}
}
\]
},
"usage": {
"size": "1376*768",
"total_tokens": 0,
"image_count": 2,
"output_tokens": 0,
"input_tokens": 0
}
}## Task execution failure
If the task fails, error information is returned. Use the code and message fields to identify the cause. See Error messages for troubleshooting.
json
{
"request_id": "a4d78a5f-655f-9639-8437-xxxxxx",
"code": "InvalidParameter",
"message": "num_images_per_prompt must be 1"
} **output** `*object*` Task output information.
Properties
task_id *string* The task ID. Valid for queries for 24 hours.
task_status *string* The status of the task. Enumeration values
- PENDING
- RUNNING
- SUCCEEDED
- FAILED
- CANCELED
- UNKNOWN: The task does not exist or its status is unknown.
State transitions during polling:
- PENDING → RUNNING → SUCCEEDED or FAILED.
- The initial query status is usually PENDING or RUNNING.
- When the status changes to SUCCEEDED, the response contains the generated image URL.
- If the status is FAILED, check the error message and retry the task.
submit_time *string* The time when the task was submitted. The time is in UTC+8 and the format is YYYY-MM-DD HH:mm:ss.SSS.
scheduled_time *string* The time when the task was executed. The time is in UTC+8 and the format is YYYY-MM-DD HH:mm:ss.SSS.
end_time *string* The time when the task was completed. The time is in UTC+8 and the format is YYYY-MM-DD HH:mm:ss.SSS.
finished *bool* Request completion flag.
- true
- false
choices *array of object * Model-generated output content. Properties
finish_reason *string* Reason for task termination. Naturally stops with stop.
message *object* Message returned by the model. Properties
**role ***string* Message role, fixed as assistant.
**content ***array*Properties
type *string* Output type. Enumerated values: text, image.
text *string* Generated text.
image *string* URL of the generated image in PNG format. Link expires after 24 hours. Download and save the image promptly.
usage *object* Output statistics. Counts only successful results. Properties
image_count *integer* Number of generated images.
size *string* Resolution of generated images. Example: 1376*768.
input_tokens *integer* Input token count. Billed per image count. Currently fixed at 0.
output_tokens *integer* Output token count. Billed per image count. Currently fixed at 0.
**total_tokens ***integer* Total token count. Billed per image count. Currently fixed at 0.
request_id *string* Unique request identifier for tracing and troubleshooting.
code *string* Error code. Returned only for failed requests. See Error messages.
message *string* Detailed error message. Returned only for failed requests. See Error messages.
DashScope Python SDK
SDK parameters align with the HTTP interface (structures adapted per language).
The SDK handles asynchronous calls internally and supports both synchronous and asynchronous invocation. Actual duration varies by queue length and service load. Important
Ensure your DashScope Python SDK version is at least 1.25.8 before running the following code. For updates, see Install SDK.
The base_url and API key are region-specific. The following example shows a call from the Singapore region:
Singapore
https://dashscope-intl.aliyuncs.com/api/v1
Virginia
https://dashscope-us.aliyuncs.com/api/v1
Beijing
https://dashscope.aliyuncs.com/api/v1
Frankfurt
https://++{WorkspaceId}.eu-central-1.maas.aliyuncs.com++/api/v1
Replace WorkspaceId with your actual Workspace ID.
The global deployment scope (Frankfurt region) only supports asynchronous calls.
Image editing
Synchronous
Request example
HELPCODEESCAPE-python
import os
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# If environment variable is not configured, replace the next line with: api_key="sk-xxx"
# API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
message = Message(
role="user",
# Supports local files, e.g., "image": "file://umbrella1.png"
content=[
{
"text": "Generate a tomato and egg stir-fry based on the style of image 1 and the background of image 2"
},
{
"image": "https://cdn.wanx.aliyuncs.com/tmp/pressure/umbrella1.png"
},
{
"image": "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"
}
]
)
print("----sync call, wait a moment----")
rsp = ImageGeneration.call(
model='wan2.6-image',
api_key=api_key,
messages=[message],
negative_prompt="",
prompt_extend=True,
watermark=False,
n=1,
enable_interleave=False,
size="1K"
)
print(rsp)Response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json
{
"status_code": 200,
"request_id": "b6a4c68d-3a91-4018-ae96-3cf373xxxxxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"finished": true
},
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"characters": 0,
"image_count": 1,
"size": "1376*768",
"total_tokens": 0
}
}Asynchronous
Request example
HELPCODEESCAPE-python
import os
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
from http import HTTPStatus
# Singapore region base_url. Base URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# If environment variable is not configured, replace the next line with: api_key="sk-xxx"
# API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# Create asynchronous task
def create_async_task():
print("Creating async task...")
message = Message(
role="user",
content=[
{'text': 'Generate a tomato and egg stir-fry based on the style of image 1 and the background of image 2'},
{'image': 'https://cdn.wanx.aliyuncs.com/tmp/pressure/umbrella1.png'},
{'image': 'https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp'}
]
)
response = ImageGeneration.async_call(
model="wan2.6-image",
api_key=api_key,
messages=[message],
negative_prompt="",
prompt_extend=True,
watermark=False,
n=1,
enable_interleave=False,
size="1K"
)
if response.status_code == 200:
print("Task created successfully:", response)
return response # Return task ID
else:
raise Exception(f"Failed to create task: {response.code} - {response.message}")
# Wait for task completion
def wait_for_completion(task_response):
print("Waiting for task completion...")
status = ImageGeneration.wait(task=task_response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Task succeeded!")
print("Response:", status)
else:
raise Exception(f"Task failed with status: {status.output.task_status}")
# Fetch asynchronous task info
def fetch_task_status(task):
print("Fetching task status...")
status = ImageGeneration.fetch(task=task, api_key=api_key)
if status.status_code == HTTPStatus.OK:
print("Task status:", status.output.task_status)
print("Response details:", status)
else:
print(f"Failed to fetch status: {status.code} - {status.message}")
# Cancel asynchronous task
def cancel_task(task):
print("Canceling task...")
response = ImageGeneration.cancel(task=task, api_key=api_key)
if response.status_code == HTTPStatus.OK:
print("Task canceled successfully:", response.output.task_status)
else:
print(f"Failed to cancel task: {response.code} - {response.message}")
# Main execution flow
if __name__ == "__main__":
task = create_async_task()
wait_for_completion(task)Response example
Task creation response example
HELPCODEESCAPE-json { "status_code": 200, "request_id": "4fb3050f-de57-4a24-84ff-e37ee5xxxxxx", "code": "", "message": "", "output": { "text": null, "finish_reason": null, "choices": null, "audio": null, "task_id": "127ec645-118f-4884-955d-0eba8dxxxxxx", "task_status": "PENDING" }, "usage": { "input_tokens": 0, "output_tokens": 0, "characters": 0 } }Task result query response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json { "status_code": 200, "request_id": "b2a7fab4-5e00-4b0a-86fe-8b9964xxxxxx", "code": null, "message": "", "output": { "text": null, "finish_reason": null, "choices": [ { "finish_reason": "stop", "message": { "role": "assistant", "content": [ { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" } ] } } ], "audio": null, "task_id": "127ec645-118f-4884-955d-0eba8xxxxxx", "task_status": "SUCCEEDED", "submit_time": "2026-01-09 17:52:04.136", "scheduled_time": "2026-01-09 17:52:04.164", "end_time": "2026-01-09 17:52:25.408", "finished": true }, "usage": { "input_tokens": 0, "output_tokens": 0, "characters": 0, "size": "1376*768", "total_tokens": 0, "image_count": 1 } }
Interleaved text-image output
Synchronous (streaming only)
Request example
HELPCODEESCAPE-python
import os
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
# Singapore region URL. Base URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# If environment variable is not configured, replace the next line with: api_key="sk-xxx"
# API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
def sync_call_with_stream():
print("\n========== Synchronous call - Streaming text-image output ==========")
image_message = Message(
role="user",
content=[
{
"text": "Give me a three-image tutorial for stir-fried pork with chili peppers"
}
]
)
image_stream_res = ImageGeneration.call(
model="wan2.6-image",
api_key=api_key,
messages=[image_message],
stream=True, # Streaming only
negative_prompt="",
enable_interleave=True,
max_images=3,
size="1280*1280"
)
print("Streaming output results:")
for stream_res in image_stream_res:
print(stream_res)
if __name__ == "__main__":
sync_call_with_stream()Response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json
{"status_code": 200, "request_id": "5b98e8f3-aeff-4c20-a26c-499a7525axxx", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": [{"type": "text", "text": "Chili"}]}}], "audio": null, "finished": false}, "usage": {"input_tokens": 28, "output_tokens": 0, "characters": 0, "total_tokens": 28, "image_count": 0, "size": "0*0"}}
{"status_code": 200, "request_id": "5b98e8f3-aeff-4c20-a26c-499a7525axxx", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": [{"type": "text", "text": "Stir-fry"}]}}], "audio": null, "finished": false}, "usage": {"input_tokens": 28, "output_tokens": 1, "characters": 0, "total_tokens": 29, "image_count": 0, "size": "0*0"}}
{"status_code": 200, "request_id": "5b98e8f3-aeff-4c20-a26c-499a7525axxx", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": [{"type": "text", "text": "Pork"}]}}], "audio": null, "finished": false}, "usage": {"input_tokens": 28, "output_tokens": 2, "characters": 0, "total_tokens": 30, "image_count": 0, "size": "0*0"}}
......
{"status_code": 200, "request_id": "5b98e8f3-aeff-4c20-a26c-499a7525axxx", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": [{"type": "text", "text": "."}]}}], "audio": null, "finished": false}, "usage": {"input_tokens": 28, "output_tokens": 398, "characters": 0, "total_tokens": 426, "image_count": 2, "size": "1280*1280"}}
{"status_code": 200, "request_id": "5b98e8f3-aeff-4c20-a26c-499a7525axxx", "code": "", "message": "", "output": {"text": null, "finish_reason": "stop", "choices": [{"finish_reason": "stop", "message": {"role": "assistant", "content": [{"type": "image", "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"}]}}], "audio": null, "finished": true}, "usage": {"input_tokens": 28, "output_tokens": 523, "characters": 0, "total_tokens": 551, "image_count": 3, "size": "1280*1280"}}Asynchronous
Request example
Note: Asynchronous calls do not require the stream parameter
HELPCODEESCAPE-python
import os
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
from http import HTTPStatus
# Singapore region URL. Base URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# If environment variable is not configured, replace the next line with: api_key="sk-xxx"
# API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
def main():
"""Asynchronous call - Text-image output"""
print("========== wan2.6-image Asynchronous call - Text-image output ==========")
image_message = Message(
role="user",
content=[
{
"text": "Give me a three-image tutorial for stir-fried pork with chili peppers"
}
]
)
# Create asynchronous task
print("---async call, creating task----")
response = ImageGeneration.async_call(
model="wan2.6-image",
api_key=api_key,
messages=[image_message],
# Asynchronous calls do not require stream parameter
negative_prompt="",
enable_interleave=True,
max_images=3,
size="1280*1280"
)
if response.status_code == HTTPStatus.OK:
print(f"Task created successfully:")
print(response)
# Wait for task completion
print("\n---waiting for task completion----")
status = ImageGeneration.wait(task=response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Task completed!")
print(f"Results:")
print(status)
else:
print(f"Task failed, status: {status.output.task_status}")
else:
print(f"Task creation failed: {response.code} - {response.message}")
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"Execution error: {str(e)}")
import traceback
traceback.print_exc()Response example
Task creation response example
HELPCODEESCAPE-json { "status_code": 200, "request_id": "4fb3050f-de57-4a24-84ff-e37ee5xxxxxx", "code": "", "message": "", "output": { "text": null, "finish_reason": null, "choices": null, "audio": null, "task_id": "5c67585e-a3be-4943-b04d-c3fbb2xxxxxx", "task_status": "PENDING" }, "usage": { "input_tokens": 0, "output_tokens": 0, "characters": 0 } }Task result query response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json { "status_code": 200, "request_id": "997a759b-fbb9-4b35-9a4d-6dab1xxxxxx", "code": null, "message": "", "output": { "text": null, "finish_reason": null, "choices": [ { "finish_reason": "stop", "message": { "role": "assistant", "content": [ { "text": "Stir-fried pork with chili peppers is a classic Hunan dish and a beloved home-cooked favorite for many. Known for its fresh spiciness and tender meat, it's simple to prepare yet delivers an exceptional flavor experience. Today, we'll learn how to make this dish.\n\nFirst, preparing all ingredients is the key to success. Fresh pork, red and green chili peppers, garlic cloves, and ginger slices are essential. Slice the pork thinly, cut the chilies into segments, and mince the garlic and ginger.", "type": "text" }, { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" }, { "text": "Next comes the crucial stir-frying step. Heat oil in a wok over high heat. Add minced garlic and ginger to release their aroma, then add the sliced pork. Quickly stir-fry until the pork changes color. Once fragrant, add the chili segments and continue stir-frying to fully release the chili aroma, perfectly blending with the pork's tenderness.", "type": "text" }, { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" }, { "text": "Finally, season with light soy sauce, dark soy sauce, oyster sauce, and a pinch of sugar. Stir-fry quickly until evenly coated. Cook until the sauce thickens slightly, then turn off the heat and serve. Your delicious, aromatic stir-fried pork with chili peppers is ready!", "type": "text" }, { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" } ] } } ], "audio": null, "task_id": "5c67585e-a3be-4943-b04d-c3fbb2xxxxxx", "task_status": "SUCCEEDED", "submit_time": "2026-01-16 17:47:39.469", "scheduled_time": "2026-01-16 17:47:39.804", "end_time": "2026-01-16 17:49:46.736", "finished": true }, "usage": { "input_tokens": 29, "output_tokens": 477, "characters": 0, "size": "1280*1280", "total_tokens": 506, "image_count": 3 } }
DashScope Java SDK
SDK parameters align with the HTTP interface. Parameter structures are encapsulated per language conventions.
The SDK handles HTTP asynchronous calls internally and supports both synchronous and asynchronous invocation. Actual duration depends on queue length and service load. Important
Ensure your DashScope Java SDK version is at least 2.22.6 before running the following code.
The base_url and API key are not interchangeable across regions. The following examples show how to make API calls for the Singapore region:
Singapore
https://dashscope-intl.aliyuncs.com/api/v1
Virginia
https://dashscope-us.aliyuncs.com/api/v1
Beijing
https://dashscope.aliyuncs.com/api/v1
Frankfurt
https://++{WorkspaceId}.eu-central-1.maas.aliyuncs.com++/api/v1
Replace WorkspaceId with your actual Workspace ID.
The global deployment scope (Frankfurt region) only supports asynchronous calls.
Image editing
Synchronous
Request example
HELPCODEESCAPE-java
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.util.Arrays;
import java.util.Collections;
/**
* wan2.6-image Image editing - Synchronous call example
*/
public class Main {
static {
// Singapore region URL. Base URLs differ by region.
Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
}
// If environment variable is not configured, replace the next line with: apiKey="sk-xxx"
// API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void basicCall() throws ApiException, NoApiKeyException, UploadFileException {
// Build multi-image input message
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Supports multi-image input; provide multiple reference images
Collections.singletonMap("text", "Generate a tomato and egg stir-fry based on the style of image 1 and the background of image 2"),
Collections.singletonMap("image", "https://cdn.wanx.aliyuncs.com/tmp/pressure/umbrella1.png"),
Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp")
)).build();
// Image editing uses standard synchronous call; no need to set stream or enable_interleave
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.6-image")
.messages(Collections.singletonList(message))
.n(1)
.size("1K")
.negativePrompt("")
.promptExtend(true)
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---sync call for image editing, wait a moment----");
result = imageGeneration.call(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println(JsonUtils.toJson(result));
}
public static void main(String[] args) {
try {
basicCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
}
}Response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json
{
"requestId": "b148327e-830f-414c-a8df-724dec28exxx",
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"total_tokens": 0,
"image_count": 1,
"size": "1376*768"
},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx",
"type": "image"
}
]
}
}
],
"finished": true
},
"status_code": 200,
"code": "",
"message": ""
}Asynchronous
Request example
HELPCODEESCAPE-java
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.util.Arrays;
import java.util.Collections;
/**
* wan2.6-image Image editing - Asynchronous call example
*/
public class Main {
static {
// Singapore region URL. Base URLs differ by region.
Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
}
// If environment variable is not configured, replace the next line with: apiKey="sk-xxx"
// API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void asyncCall() throws ApiException, NoApiKeyException, UploadFileException {
// Build multi-image input message
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Supports multi-image input; provide multiple reference images
Collections.singletonMap("text", "Generate a tomato and egg stir-fry based on the style of image 1 and the background of image 2"),
Collections.singletonMap("image", "https://cdn.wanx.aliyuncs.com/tmp/pressure/umbrella1.png"),
Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp")
)).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.6-image")
.n(1)
.size("1K")
.negativePrompt("")
.promptExtend(true)
.messages(Arrays.asList(message))
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---async call for image editing, creating task----");
result = imageGeneration.asyncCall(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("Task creation result:");
System.out.println(JsonUtils.toJson(result));
String taskId = result.getOutput().getTaskId();
// Wait for task completion
waitTask(taskId);
}
public static void waitTask(String taskId) throws ApiException, NoApiKeyException {
ImageGeneration imageGeneration = new ImageGeneration();
System.out.println("\n---waiting for task completion----");
ImageGenerationResult result = imageGeneration.wait(taskId, apiKey);
System.out.println("Task completion result:");
System.out.println(JsonUtils.toJson(result));
}
public static void main(String[] args) {
try {
asyncCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
}
}Response example
Task creation response example
HELPCODEESCAPE-json { "status_code": 200, "request_id": "9cd85950-2e26-4b2c-b562-1694cf928xxx", "code": "", "message": "", "output": { "task_id": "4c861fbe-af89-4a2f-8fc5-4bb15c313xxx", "task_status": "PENDING" }, "usage": null }Task result query response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json { "status_code": 200, "request_id": "cbdf1424-306e-4a52-82f3-8bf5d8a99xxx", "code": "", "message": "", "output": { "choices": [ { "finish_reason": "stop", "message": { "role": "assistant", "content": [ { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" } ] } } ], "task_id": "4c861fbe-af89-4a2f-8fc5-4bb15c3139ba", "task_status": "SUCCEEDED", "submit_time": "2026-01-16 16:36:06.556", "scheduled_time": "2026-01-16 16:36:06.591", "end_time": "2026-01-16 16:36:25.190", "finished": true }, "usage": { "input_tokens": 0, "output_tokens": 0, "size": "1376*768", "total_tokens": 0, "image_count": 1 } }
Interleaved text-image output
Synchronous call (streaming only)
Request example
HELPCODEESCAPE-java
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import io.reactivex.Flowable;
import java.util.Collections;
/**
* wan2.6-image Text-image output - Streaming call example
*/
public class Main {
static {
// Singapore region URL. Base URLs differ by region.
Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
}
// If environment variable is not configured, replace the next line with: apiKey="sk-xxx"
// API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void streamCall() throws ApiException, NoApiKeyException, UploadFileException {
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Collections.singletonList(
Collections.singletonMap("text", "Give me a three-image tutorial for stir-fried pork with chili peppers")
)).build();
// Text-image output requires streaming call
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.6-image")
.messages(Collections.singletonList(message))
.stream(true) // Must enable streaming output
.enableInterleave(true)
.size("1280*1280")
.negativePrompt("")
.maxImages(3)
.build();
ImageGeneration imageGeneration = new ImageGeneration();
try {
System.out.println("---stream call for image interleave----");
Flowable<ImageGenerationResult> resultFlowable = imageGeneration.streamCall(param);
resultFlowable.blockingForEach(result -> {
System.out.println(JsonUtils.toJson(result));
});
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
}
public static void main(String[] args) {
try {
streamCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}Response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":0,"total_tokens":28,"image_count":0,"size":"0*0"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"Chili"}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":1,"total_tokens":29,"image_count":0,"size":"0*0"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"stir-fry"}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":2,"total_tokens":30,"image_count":0,"size":"0*0"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"pork"}]}}],"finished":false},"status_code":200,"code":"","message":""}
......
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":73,"total_tokens":101,"image_count":0,"size":"0*0"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"."}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":198,"total_tokens":226,"image_count":1,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"image","image":"https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":199,"total_tokens":227,"image_count":1,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"Next"}]}}],"finished":false},"status_code":200,"code":"","message":""}
......
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":245,"total_tokens":273,"image_count":1,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"."}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":368,"total_tokens":396,"image_count":2,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"image","image":"https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":369,"total_tokens":397,"image_count":2,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"Finally"}]}}],"finished":false},"status_code":200,"code":"","message":""}
......
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":416,"total_tokens":444,"image_count":2,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"pot"}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":417,"total_tokens":445,"image_count":2,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":[{"type":"text","text":"."}]}}],"finished":false},"status_code":200,"code":"","message":""}
{"requestId":"12c7432c-8028-4289-a97c-4e22df98bxxx","usage":{"input_tokens":28,"output_tokens":541,"total_tokens":569,"image_count":3,"size":"1280*1280"},"output":{"choices":[{"finish_reason":"stop","message":{"role":"assistant","content":[{"type":"image","image":"https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"}]}}],"finished":true},"status_code":200,"code":"","message":""}Asynchronous call
Request example
Note: Asynchronous calls do not require the stream parameter
HELPCODEESCAPE-java
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.util.Collections;
/**
* wan2.6-image Text-image output - Asynchronous call example
*/
public class Main {
static {
// Singapore region URL. Base URLs differ by region.
Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
}
// If environment variable is not configured, replace the next line with: apiKey="sk-xxx"
// API keys differ by region. Get API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void asyncCall() throws ApiException, NoApiKeyException, UploadFileException {
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Collections.singletonList(
Collections.singletonMap("text", "Give me a three-image tutorial for stir-fried pork with chili peppers")
)).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.6-image")
.size("1280*1280")
.enableInterleave(true)
.maxImages(3)
.negativePrompt("")
.messages(Collections.singletonList(message))
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---async call for image interleave, creating task----");
result = imageGeneration.asyncCall(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("Task creation result:");
System.out.println(JsonUtils.toJson(result));
String taskId = result.getOutput().getTaskId();
// Wait for task completion
waitTask(taskId);
}
public static void waitTask(String taskId) throws ApiException, NoApiKeyException {
ImageGeneration imageGeneration = new ImageGeneration();
System.out.println("\n---waiting for task completion----");
ImageGenerationResult result = imageGeneration.wait(taskId, apiKey);
System.out.println("Task completion result:");
System.out.println(JsonUtils.toJson(result));
}
public static void main(String[] args) {
try {
asyncCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
}
}Response example
Task creation response example
HELPCODEESCAPE-json { "requestId": "7d6c5760-334b-48c4-9b1e-08ee9c7fexxx", "output": { "task_id": "1bb9d9fa-bf1a-43dc-b5fe-366c1dc70xxx", "task_status": "PENDING" }, "status_code": 200, "code": "", "message": "" }Task result query response example
URL expires after 24 hours. Download images promptly.
HELPCODEESCAPE-json { "requestId": "6ed62b00-2225-4fc3-8ee3-2aed0b484xxx", "usage": { "input_tokens": 29, "output_tokens": 471, "total_tokens": 500, "image_count": 3, "size": "1280*1280" }, "output": { "choices": [ { "finish_reason": "stop", "message": { "role": "assistant", "content": [ { "text": "Stir-fried pork with chili peppers is a classic Hunan dish and a beloved home-cooked favorite for many. Known for its fresh spiciness and tender meat, it's simple to prepare yet delivers an exceptional flavor experience. Today, we'll learn how to make this dish.\n\nFirst, preparing all ingredients is the key to success. Fresh pork, red and green chili peppers, garlic cloves, and ginger slices are essential. Slice the pork thinly, cut the chilies into segments, and mince the garlic and ginger.", "type": "text" }, { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" }, { "text": "Next, marinate the pork. Place the sliced pork in a bowl, add a little light soy sauce, cooking wine, starch, and cooking oil. Mix well by hand and marinate for 10 to 15 minutes. This treatment makes the pork slices more tender and flavorful.", "type": "text" }, { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" }, { "text": "Finally, heat oil in a wok over high heat. Add the marinated pork slices and quickly stir-fry until they change color, then remove and set aside. Leave some oil in the wok, add minced garlic and ginger to release their aroma, then add chili segments and stir-fry until fragrant. Add the pork back in, season with light soy sauce, dark soy sauce, a pinch of sugar, and oyster sauce. Stir-fry quickly until evenly coated, sprinkle with chopped scallions, and serve.", "type": "text" }, { "image": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx", "type": "image" } ] } } ], "task_id": "1bb9d9fa-bf1a-43dc-b5fe-366c1dc70836", "task_status": "SUCCEEDED", "finished": true, "submit_time": "2026-01-16 18:26:32.082", "scheduled_time": "2026-01-16 18:26:32.133", "end_time": "2026-01-16 18:28:41.748" }, "status_code": 200, "code": "", "message": "" }
Limitations
Data validity : The task
task_idand imageurlare retained for only 24 hours. After this period, they cannot be queried or downloaded.Content moderation : Both the input
promptand output image undergo content moderation. Non-compliant content returns anIPInfringementSuspectorDataInspectionFailederror. See Error messages.
Billing and rate limiting
For model free quotas and pricing, see Model pricing.
For model rate limits, see Wan.
Billing: You are charged per successfully generated image. Failed calls incur no charge and don't consume free quota.
Error codes
If the model call fails and returns an error message, see Error messages for resolution.
FAQ
Q: How do I view a model's inference costs and call volume?
A: See Bill inquiry and cost management.
Q: Why can't I run the code examples?
A: Upgrade your SDK to the latest version. For updates, see Install SDK.