curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": true
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": True,
},
)
print(response.json())
const response = await fetch("https://toapis.com/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "viduq3-pro",
prompt: "A cat playing piano, camera slowly zooms in, cinematic quality",
duration: 8,
resolution: "1080p",
aspect_ratio: "16:9",
audio: true
})
});
console.log(await response.json());
{
"id": "<string>",
"object": "<string>",
"model": "<string>",
"status": "<string>",
"created_at": 123
}Vidu Q3
Vidu Q3 Video Generation
Generate videos with Vidu Q3 models, including text-to-video, image-to-video, first-last frame, reference-to-video and subjects generation
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": true
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": True,
},
)
print(response.json())
const response = await fetch("https://toapis.com/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "viduq3-pro",
prompt: "A cat playing piano, camera slowly zooms in, cinematic quality",
duration: 8,
resolution: "1080p",
aspect_ratio: "16:9",
audio: true
})
});
console.log(await response.json());
{
"id": "<string>",
"object": "<string>",
"model": "<string>",
"status": "<string>",
"created_at": 123
}Note for users in mainland China: Please use
https://toapis.cn as the API endpoint (Base URL). Replace https://toapis.com with https://toapis.cn in the examples in this document.- Async task API, returns a task ID after submission
- Supported models:
viduq3-pro,viduq3-turbo,viduq3 viduq3-pro: High quality model, supports audio-video sync and storyboard generationviduq3-turbo: Fast model, intelligent scene switching, fastest generation, best cost-effectivenessviduq3: Best multi-camera consistency, intelligent camera switching, multi-reference generation
Use publicly accessible image URLs. Do not pass base64 image data in
image_urls; upload local images with the Upload Image API first.Authorization
string
required
All endpoints require Bearer Token authentication.
Authorization: Bearer YOUR_API_KEY
Request Parameters
string
required
Vidu Q3 model name.Options:
viduq3-pro- high quality, supports audio-video sync and storyboard generationviduq3-turbo- fastest generation, intelligent scene switchingviduq3- best multi-camera consistency, for multi-reference/subjects generation
string
required
Text prompt, maximum 5000 characters.Describes subject, action, scene, camera movement, and style. When using subjects, reference them via
@name in the prompt.Example: "A cat playing piano, camera slowly zooms in, cinematic quality"integer
default:"5"
Video duration in seconds.
viduq3-pro/viduq3-turbo:1to16viduq3:3to16
string
default:"720p"
Video resolution.Options:
540p720p1080p
string
Video aspect ratio.Common values:
16:9, 9:16, 1:1Q3 models support any aspect ratio. When image_urls is provided, the output ratio is usually determined by the reference image.string[]
Reference image URL array.
viduq3-pro/viduq3-turbo- Omitted: text-to-video
- 1 image: image-to-video, image as first frame
- 2 images: first-last frame
viduq3- Required, up to 7 reference images
["https://example.com/reference.jpg"]boolean
Whether to enable audio-video output.
- All Q3 models default to
true
true, the system generates speech and sound effects based on the prompt.integer
Random seed for more reproducible results with the same parameters.
object
Extended parameters for fields supported by the upstream API but not exposed as top-level fields.
Show Show metadata fields
Show Show metadata fields
array
Subject list (Subjects mode,
viduq3 only). Each subject contains name and images fields.- Up to 7 subjects
- Up to 3 images per subject
- Reference subjects via
@namein the prompt
[
{"name": "cat", "images": ["https://example.com/cat.jpg"]},
{"name": "dog", "images": ["https://example.com/dog.jpg"]}
]
boolean
Whether to use intelligent entity library, defaults to
false.string
Voice ID for specifying the voice character in the video.
string
Audio type, effective when
audio is true.Options:all- sound effects + speech (default)speech_only- speech onlysound-effect_only- sound effects only
boolean
Off-peak mode, defaults to
false.true: off-peak generation, consumes fewer credits- Off-peak tasks will be generated within 48 hours; incomplete tasks are auto-cancelled with credits refunded
- Q3 models support off-peak when
audio=true
string
Transparent passthrough parameter, max 1048576 characters.
string
ToAPIs final Task Webhook. Configure the Token URL and signing secret first; see Task Webhooks.
Model Selection
| Model | Use Case | Image Input | Resolution | Duration |
|---|---|---|---|---|
viduq3-pro | High quality text/image/first-last frame | Optional, up to 2 images | 540p / 720p / 1080p | 1-16s |
viduq3-turbo | Fast text/image/first-last frame | Optional, up to 2 images | 540p / 720p / 1080p | 1-16s |
viduq3 | Multi-reference/Subjects generation | Required, up to 7 images | 540p / 720p / 1080p | 3-16s |
Billing Dimensions
Vidu Q3 is billed by model, resolution, and generation type:viduq3-pro: high quality tier, approximately 2x the price of turboviduq3-turbo: fast tier, best cost-effectivenessviduq3: multi-reference generation, billed at reference generation rate
Response
string
Task ID for querying task status.
string
Object type, usually
generation.task.string
Model used for the request.
string
Task status:
queued, in_progress, completed, or failed.integer
Task creation timestamp.
Examples
Text-to-Video
{
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": true
}
Image-to-Video
{
"model": "viduq3-turbo",
"prompt": "The person in the image slowly turns and smiles",
"image_urls": ["https://example.com/portrait.jpg"],
"duration": 5,
"resolution": "720p"
}
First-Last Frame
{
"model": "viduq3-pro",
"prompt": "The person naturally sits down from standing, smooth motion",
"image_urls": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
],
"duration": 8,
"resolution": "720p"
}
Multi-Reference Image Video
{
"model": "viduq3",
"prompt": "Keep the character consistent from the reference images, walking through a futuristic city street",
"image_urls": [
"https://example.com/character-front.jpg",
"https://example.com/character-side.jpg"
],
"duration": 6,
"resolution": "1080p"
}
Subjects Mode
{
"model": "viduq3",
"prompt": "@cat and @dog are running in the park, sunny day",
"image_urls": ["https://example.com/park-bg.jpg"],
"duration": 8,
"resolution": "720p",
"audio": true,
"metadata": {
"subjects": [
{"name": "cat", "images": ["https://example.com/cat.jpg"]},
{"name": "dog", "images": ["https://example.com/dog.jpg"]}
],
"audio_type": "all"
}
}
Video generation is asynchronous. Use the Get Video Task Status endpoint to query progress and results.
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": true
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "viduq3-pro",
"prompt": "A cat playing piano, camera slowly zooms in, cinematic quality",
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"audio": True,
},
)
print(response.json())
const response = await fetch("https://toapis.com/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "viduq3-pro",
prompt: "A cat playing piano, camera slowly zooms in, cinematic quality",
duration: 8,
resolution: "1080p",
aspect_ratio: "16:9",
audio: true
})
});
console.log(await response.json());