PixVerse V6 Max Text to Video API
pixverse/v6-max/text-to-videoPixVerse V6 Max Text to Video turns a prompt into 1–15 second videos at 360p to 1080p, with eight aspect ratios and an optional native audio track for dialogue, effects and music. Describe subjects, actions and sound in one prompt, then pick the length and format for each placement.
REST API
Quick Start
Make your first PixVerse V6 Max text-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 a prompt; audio is turned on so the dialogue line is spoken.
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/text-to-video",
"input": {
"prompt": "A late-night ramen stall in a narrow alley. The cook lifts noodles from the steaming pot, shakes them twice and lays them into a bowl as a customer at the counter says, \"That smells perfect.\" Neon reflections on wet pavement, sizzling broth and distant traffic. Handheld medium shot, slow push toward the bowl.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": true
}
}'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": "GDQ2FNCL1HB9O7TU",
"status": "not_started",
"created_time": "2026-11-05T07:08:09"
}
}{
"code": 200,
"data": {
"task_id": "GDQ2FNCL1HB9O7TU",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/pixverse/v6-max/text-to-video/v2/01/output-01.mp4",
"file_type": "video"
}
],
"created_time": "2026-11-05T07:08:09",
"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/text-to-video",
"input": {
"prompt": "A late-night ramen stall in a narrow alley. The cook lifts noodles from the steaming pot, shakes them twice and lays them into a bowl as a customer at the counter says, \"That smells perfect.\" Neon reflections on wet pavement, sizzling broth and distant traffic. Handheld medium shot, slow push toward the bowl.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": true
}
}
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/text-to-video. |
| callback_url | string (URL) | No | — | A public HTTP(S) URL for receiving task completion notifications. |
| input | object | Yes | — | Generation parameters: a required prompt plus optional duration, resolution, aspect ratio and audio. |
| input.prompt | string | Yes | — | Scene, action and sound description, up to 5,000 characters, not blank. |
| 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.aspect_ratio | string | No | — | 16:9, 9:16, 4:3, 3:4, 1:1, 2:3, 3:2 or 21:9. |
| 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 the prompt is present and within 5,000 characters and that image_urls 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/text-to-video | Model identifier for asynchronous PixVerse V6 Max text-to-video generation. |
| Aspect ratio | 16:9 | 9:16 | 4:3 | 3:4 | 1:1 | 2:3 | 3:2 | 21:9 | Optional. |
| 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 Text to Video API FAQ
What is the PixVerse V6 Max Text to Video API?
PixVerse V6 Max Text to Video is a PixVerse model for generating video from text prompts. It creates 1–15 second clips at 360p to 1080p in eight aspect ratios, with an optional native audio track for dialogue, effects and music. Everything in the shot, from characters and setting to camera and sound, comes from the prompt you write. You can call it programmatically or try it from the playground above.
How do I add dialogue to PixVerse V6 Max Text to Video?
Set audio to true and write the line in quotes with the speaker, plus any ambience or music. With audio on, 540p costs 8.8 credits per second instead of 7.2.
Which aspect ratios does PixVerse V6 Max Text to Video support?
16:9, 9:16, 4:3, 3:4, 1:1, 2:3, 3:2 and 21:9 through aspect_ratio.
How long can a PixVerse V6 Max Text to Video clip be?
1 to 15 whole seconds, 5 by default. A 15-second 1080p clip with audio costs 336 credits.
What does 1080p cost on PixVerse V6 Max Text to Video?
17.6 credits per second silent or 22.4 with audio, multiplied by duration; 5 silent seconds come to 88 credits.
Is 360p useful on PixVerse V6 Max Text to Video?
Use it for fast, low-cost prompt tests at 4.8 credits per second, then re-run the chosen prompt at 720p or 1080p.
How long can a PixVerse V6 Max Text to Video prompt be?
Up to 5,000 characters. Both endpoints need a prompt: up to 5,000 characters here, and up to 2,048 characters in Image to Video.
When should I use PixVerse V6 Max Image to Video instead?
When the first frame must match an existing image such as a packshot or artwork. The image endpoint keeps the image's framing and uses the same rates.















