Skip to main content
POST
/
v1
/
tasks
Vidu Q3 Series
curl --request POST \
  --url https://www.qingbo.dev/v1/tasks \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "<string>",
  "action": "<string>",
  "prompt": "<string>",
  "aspect_ratio": "<string>",
  "resolution": "<string>",
  "duration": 123,
  "image_urls": [
    "<string>"
  ],
  "first_frame_image": "<string>",
  "last_frame_image": "<string>",
  "callback_url": "<string>",
  "callback_events": [
    "<string>"
  ]
}
'
import requests

url = "https://www.qingbo.dev/v1/tasks"

payload = {
"model": "<string>",
"action": "<string>",
"prompt": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"duration": 123,
"image_urls": ["<string>"],
"first_frame_image": "<string>",
"last_frame_image": "<string>",
"callback_url": "<string>",
"callback_events": ["<string>"]
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
action: '<string>',
prompt: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
duration: 123,
image_urls: ['<string>'],
first_frame_image: '<string>',
last_frame_image: '<string>',
callback_url: '<string>',
callback_events: ['<string>']
})
};

fetch('https://www.qingbo.dev/v1/tasks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://www.qingbo.dev/v1/tasks"

payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"action\": \"<string>\",\n \"prompt\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"duration\": 123,\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"callback_events\": [\n \"<string>\"\n ]\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://www.qingbo.dev/v1/tasks")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"action\": \"<string>\",\n \"prompt\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"resolution\": \"<string>\",\n \"duration\": 123,\n \"image_urls\": [\n \"<string>\"\n ],\n \"first_frame_image\": \"<string>\",\n \"last_frame_image\": \"<string>\",\n \"callback_url\": \"<string>\",\n \"callback_events\": [\n \"<string>\"\n ]\n}")
.asString();
{
  "task_id": "task-wave1775285160b950328499",
  "model": "viduq3-pro",
  "action": "generate",
  "status": "queued",
  "created_at": 1775285160040,
  "progress": 0
}
ShengShu Vidu Q3 video generation series. Reference-to-video (R2V) is the flagship capability — accepts 1-7 public images as subject / style references, with the prompt focused on motion and camera while the appearance comes from the reference images. Best fit for character consistency / style continuity / multi-shot transitions. Four tiers:
  • viduq3-pro — flagship tier, auto-routes T2V / I2V / first-last frame by image_urls count, audio output enabled by default (dialog + SFX)
  • viduq3-mix — overall quality king, supports multi-clip video / image remix for coherent video output, joint audio generation, 720P / 1080P, ideal for short-drama re-cutting and ad creative remix
  • viduq3 — standard tier, the default daily choice, smarter shot transitions, 540p / 720p / 1080p, 3-16 sec
  • viduq3-turbo — lightweight fast tier, fastest generation and lowest unit price, slightly lower quality than standard, ideal for previews / batch / A/B testing
Billed by resolution × duration, per-second pricing, any integer 1-16 sec.

Pricing

Model540P720P1080P
viduq3-pro$0.0595 / sec$0.1275 / sec$0.136 / sec
viduq3-mix$0.10625 / sec$0.1275 / sec
viduq3$0.0425 / sec$0.085 / sec$0.10625 / sec
viduq3-turbo$0.034 / sec$0.051 / sec$0.0595 / sec

Examples

curl -X POST https://www.qingbo.dev/v1/tasks \
  -H "Authorization: Bearer $WAVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "viduq3-pro",
    "prompt": "Sunset on the beach, a girl runs toward the setting sun with hair flowing, cinematic lighting",
    "duration": 5,
    "resolution": "1080p",
    "aspect_ratio": "16:9"
  }'
curl -X POST https://www.qingbo.dev/v1/tasks \
  -H "Authorization: Bearer $WAVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "viduq3-pro",
    "prompt": "The character slowly turns around, camera zooms in",
    "image_urls": ["https://cdn.example.com/portrait.jpg"],
    "duration": 5,
    "resolution": "1080p"
  }'
curl -X POST https://www.qingbo.dev/v1/tasks \
  -H "Authorization: Bearer $WAVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "viduq3-pro",
    "action": "first_last_frame",
    "prompt": "Smooth transition from day to night with natural lighting changes",
    "first_frame_image": "https://cdn.example.com/day.jpg",
    "last_frame_image": "https://cdn.example.com/night.jpg",
    "duration": 8,
    "resolution": "1080p"
  }'
curl -X POST https://www.qingbo.dev/v1/tasks \
  -H "Authorization: Bearer $WAVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "viduq3",
    "action": "reference",
    "prompt": "Keep the character look, run through the forest, camera follows",
    "image_urls": [
      "https://cdn.example.com/char-1.jpg",
      "https://cdn.example.com/char-2.jpg",
      "https://cdn.example.com/style-ref.jpg"
    ],
    "duration": 6,
    "resolution": "1080p",
    "aspect_ratio": "16:9"
  }'
{
  "task_id": "task-wave1775285160b950328499",
  "model": "viduq3-pro",
  "action": "generate",
  "status": "queued",
  "created_at": 1775285160040,
  "progress": 0
}
After submission, poll status with GET /v1/tasks/{task_id}; see Task System for details.

Available Models

Model IDResolutionDurationSupported actionsNotes
viduq3-pro540p / 720p / 1080p1-16 secgenerate / image2video / first_last_frameFlagship tier, audio output
viduq3-mix720P / 1080P1-16 secreference / image2videoOverall quality king, multi-asset remix
viduq3540p / 720p / 1080p1-16 secreference / image2videoStandard tier, default daily choice
viduq3-turbo540p / 720p / 1080p1-16 secreference / image2videoLightweight fast tier, fastest generation, lowest price

Common Parameters

model
string
required
Model ID; see the Available Models table
action
string
Operation type. Pro tier may be omitted (auto-routed by image_urls count); other tiers should specify it explicitly. Allowed values:
  • generate — text-to-video (Pro only)
  • image2video — image-to-video
  • reference — reference-to-video (default for standard / Mix / Turbo)
  • first_last_frame — first/last frame (Pro only)
prompt
string
required
Video description text. Focus on motion / camera / atmosphere — character appearance is determined by image_urls
aspect_ratio
string
default:"16:9"
Frame aspect ratio. Allowed values:
  • 16:9 — landscape widescreen
  • 9:16 — portrait
  • 4:3 — landscape
  • 3:4 — portrait
  • 1:1 — square
resolution
string
default:"720p"
Output resolution; see Available Models for per-model support
duration
integer
default:"5"
Video duration in seconds, any integer 1-16. Mix tier supports 1-second short videos
image_urls
string[]
Reference image URL array, 1-7 images:
  • Standard / Mix / Turbo: subject / style references (R2V)
  • Pro tier: 0 = T2V / 1 = I2V / 2 = first-last frame; see Auto-routing
first_frame_image
string
First-frame image URL, required for Pro first_last_frame mode
last_frame_image
string
Last-frame image URL, required for Pro first_last_frame mode
callback_url
string
Webhook callback URL, invoked when the task reaches a terminal state. See Callback Mechanism
callback_events
string[]
Subscribed callback events; defaults to terminal events (succeeded / failed / cancelled)

Model-specific Parameters

audio
boolean
default:"true"
Whether to generate audio (default true). Pro tier enables audio output by default (dialog + SFX); set false for silent output
Pro tier auto-routes the generation mode by image_urls count; see Auto-routing.

Auto-routing

viduq3-pro auto-selects the generation mode by image_urls array length, so you usually don’t need to pass action explicitly:
image_urls countRouted modeEquivalent actionNotes
0 (or omitted)Text-to-videogeneratePure prompt-driven
1Image-to-videoimage2videoThe image serves as the starting frame
2First-last framefirst_last_frameFirst image = first frame, second image = last frame
When first_frame_image + last_frame_image are passed explicitly, they take precedence and override the first-last-frame routing from image_urls.
Other tiers (viduq3 / viduq3-mix / viduq3-turbo) default to R2V reference-to-video mode, with image_urls providing 1-7 subject / style references.

Resource Limits

ItemLimit
Reference imagesUp to 7, each ≤ 30MB, JPG / PNG / WEBP
First/last-frame imagesJPG / PNG / WEBP, public download URL required
Prompt length≤ 2000 characters recommended
Video durationAny integer 1-16 sec (Mix supports 1-second short videos)
OutputMP4, link valid for 24 hours