PixVerse V6 Max Image to Video API
pixverse/v6-max/image-to-videoPixVerse V6 Max Image to Video animates one JPEG, PNG or WebP image into a 1–15 second video at 360p to 1080p, with an optional native audio track. The image sets the subject and framing, and a prompt of up to 2,048 characters directs motion, camera and sound.
Drag and drop files, paste from clipboard, or provide a URL. Required. One JPEG, PNG or WebP image.
1/1 files added
REST API
Quick Start
Make your first PixVerse V6 Max image-to-video request in three steps; the example returns a task_id for result retrieval.
Connect to the Vidgo API
Create an API key, keep it on your server, and send it in the Authorization header as a Bearer token.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Run the short example with one public image and a prompt.
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "pixverse/v6-max/image-to-video",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/pixverse/v6-max/image-to-video/v1/01/input-01.png"
],
"prompt": "The sneaker rotates slowly on the pedestal while a soft light sweep travels across the mesh and sole. Keep the background, logo-free design and colors unchanged.",
"duration": 5,
"resolution": "540p",
"audio": false
}
}'Wait for the result
Use the returned task_id to check the same task until it reaches finished or failed. On success, read data.files[].file_url.
Track status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll about every 2 seconds while the status is not_started or running. Stop on finished or failed; on success, read data.files[].file_url. For long-running jobs, increase the interval gradually, or add callback_url to the submit request to receive the final result asynchronously.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "GA90AZQMXE30ZBBI",
"status": "not_started",
"created_time": "2026-11-05T07:09:31"
}
}{
"code": 200,
"data": {
"task_id": "GA90AZQMXE30ZBBI",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/pixverse/v6-max/image-to-video/v2/01/output-01.mp4",
"file_type": "video"
}
],
"created_time": "2026-11-05T07:09:31",
"error_message": null,
"progress": 100
}
}Complete runnable example
Open this after the three-step flow is clear. It combines submission, polling, terminal-state handling, and result extraction in one script.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "pixverse/v6-max/image-to-video",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/pixverse/v6-max/image-to-video/v1/01/input-01.png"
],
"prompt": "The sneaker rotates slowly on the pedestal while a soft light sweep travels across the mesh and sole. Keep the background, logo-free design and colors unchanged.",
"duration": 5,
"resolution": "540p",
"audio": false
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters
model and callback_url belong at the request root; generation parameters belong inside input.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Fixed to pixverse/v6-max/image-to-video. |
| callback_url | string (URL) | No | — | A public HTTP(S) URL for receiving task completion notifications. |
| input | object | Yes | — | Generation parameters: one image in image_urls and a prompt, plus optional duration, resolution and audio. The output follows the image's framing. |
| input.image_urls | string[] | Yes | — | Exactly one public HTTP(S) URL of a JPEG, PNG or WebP image (.jpg, .jpeg, .png or .webp when the URL has an extension). |
| input.prompt | string | Yes | — | Motion, camera and sound description, 1–2,048 characters of non-blank text. |
| input.duration | integer | No | 5 | Output length in whole seconds, 1–15. |
| input.resolution | string | No | 540p | 360p, 540p, 720p or 1080p. The rate per second follows this value and audio. |
| input.audio | boolean | No | false | Set true to add a native audio track with dialogue, effects and music described in the prompt. |
Response Fields
Submission returns the task identity immediately. Status responses add progress, output files, or a failure message as the task advances.
| Field | Type | Description |
|---|---|---|
| code | integer | Application result code. Successful responses use 0 or 200. |
| message | string | Human-readable response or error message when present. |
| data.task_id | string | Task identifier used in the status endpoint path. |
| data.status | string | Current state: not_started, running, finished, or failed. |
| data.created_time | string | Task creation time in date-time format. |
| data.progress | number | Completion percentage when the provider reports progress. |
| data.files[] | array | Generated output files returned after a successful task. |
| data.files[].file_url | string | Public URL of the generated video. |
| data.files[].file_type | string | Generated file type, such as video. |
| data.files[].watermark_url | string | null | Watermarked output URL when one is available. |
| data.error_message | string | null | Failure detail when status is failed. |
Task Lifecycle
Treat not_started and running as non-terminal states. finished and failed are terminal alternatives; stop polling when either is returned.
not_startedThe task has been accepted and is queued to start.
runningThe video is being generated. Continue polling the status endpoint.
finishedThe task is complete. Read the video URL from data.files[].file_url.
failedGeneration failed. Read data.error_message for details and stop polling.
Polling and Errors
- Authentication401 indicates a missing or invalid Bearer API Key. Check your key in the dashboard before retrying.
- Validation400 indicates invalid parameters. Check that image_urls holds one JPEG, PNG or WebP URL, a non-blank prompt of up to 2,048 characters is present and aspect_ratio is not sent.
- Polling intervalPoll the status every 2 seconds. For longer tasks, use exponential backoff to gradually increase the interval to 5 seconds.
- Terminal statesPoll only while the status is not_started or running. Stop immediately on finished or failed.
- Callback optionProvide callback_url to receive an automatic notification when generation finishes, without continuous polling.
Model Specifications
| Specification | Value | Description |
|---|---|---|
| Model | pixverse/v6-max/image-to-video | Model identifier for asynchronous PixVerse V6 Max image-to-video generation. |
| Input mode | 1 JPEG/PNG/WebP image + prompt | The output follows the image's framing. |
| Duration | 1–15 | Whole seconds; defaults to 5. |
| Resolution | 360p | 540p | 720p | 1080p | Defaults to 540p. |
| Audio | audio: true | false | Defaults to false; true adds a native audio track. |
| Pricing | 4.8–22.4 credits/s | By resolution and audio, multiplied by duration. |
Related Models
PixVerse V6 Max Image to Video API FAQ
What is the PixVerse V6 Max Image to Video API?
PixVerse V6 Max Image to Video is a PixVerse model for animating a still image into video. It turns one JPEG, PNG or WebP image into a 1–15 second clip at 360p to 1080p, with an optional native audio track. The image fixes the subject and framing, while the prompt guides the motion, camera and sound added on top. You can call it programmatically or try it from the playground above.
Which image formats does PixVerse V6 Max Image to Video accept?
One JPEG, PNG or WebP image at a public HTTP(S) URL. If the URL ends in a file extension, it should be .jpg, .jpeg, .png or .webp.
Does PixVerse V6 Max Image to Video keep the image framing?
Yes. The clip follows the image, so prepare it in 9:16, 1:1, 16:9 or another shape before uploading.
Is a prompt needed for PixVerse V6 Max Image to Video?
Yes. Every request needs a prompt of up to 2,048 characters alongside the image. Describe the motion, camera path and any sound; a short prompt such as a slow push-in keeps the movement subtle and image-led.
Can PixVerse V6 Max Image to Video add sound?
Yes. Set audio to true for a native audio track; describe effects, ambience or a quoted line in the prompt. The with-audio rate applies, for example 12 credits per second at 720p.
How long can a PixVerse V6 Max Image to Video clip be?
1 to 15 whole seconds, 5 by default, at 360p, 540p, 720p or 1080p.
How much is a 5-second PixVerse V6 Max Image to Video clip?
At the default 540p without audio it costs 36 credits ($0.18); with audio it is 44 credits. At 1080p it is 88 or 112 credits.
Which PixVerse V6 Max endpoint lets me choose the aspect ratio?
PixVerse V6 Max Text to Video offers eight aspect ratios. In Image to Video, the uploaded image decides the shape.















