CheaperGen

Vidu Q3 Pro API documentation

Everything you need to call Vidu Q3 Pro from your code. Base URL https://cheapergen.com/api/v1. Try it first in the playground.

Using a coding agent?

Paste this into Claude Code, Cursor, Codex or any coding agent. It adds the API to your project, keeps the key in CHEAPERGEN_API_KEY and tests with a free quote before anything is spent.

Add Vidu Q3 Pro (CheaperGen endpoint shengshu/vidu-q3-pro/text-to-video) to this project by following https://cheapergen.com/agents/integrate.md
What your agent reads

Authentication

Create a key in Dashboard → API keys and send it as a bearer token. Keep keys server-side.

export CHEAPERGEN_API_KEY="cg_live_…"

# every request
Authorization: Bearer $CHEAPERGEN_API_KEY

Vidu Q3 Pro Text to Video API

POST/api/v1/run/shengshu/vidu-q3-pro/text-to-video

Submits an asynchronous job and returns 202 with a generation id. Poll GET /api/v1/generations/{id} or pass webhook_url. See job lifecycle.

Input parameters

NameTypeDescriptionAffects price
promptrequiredstringDescribe the shot: subject, action, camera movement, lighting and style.No
aspect_ratiostring (enum)Output frame shape.
Values: 16:9 · 9:16 · 1:1 · 4:3 · 3:4
Default: 16:9
Yes
resolutionstring (enum)Output resolution. Higher resolutions cost more per second.
Values: 540p · 720p · 1080p
Default: 720p
Yes
durationintegerLength of the generated clip in seconds (1–16s). You pay per second.
Range: 1–16s
Default: 5
Yes
generate_audiobooleanGenerate synchronized dialogue and sound effects. Included in the price.
Default: true
No
seedintegerUse the same seed and settings to reproduce a result. Leave empty for random.No
webhook_urlstring (URL)Optional. We POST the finished generation here, signed with your webhook secret. WebhooksNo

Request

const API = "https://cheapergen.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Submit the job
let job = await fetch(`${API}/run/shengshu/vidu-q3-pro/text-to-video`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A lighthouse keeper climbs the spiral stairs during a storm, lightning through the windows, the beam sweeping the waves; cut to the lamp room as she lights it",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  }),
}).then((r) => r.json());

// 2. Poll until it finishes (or pass webhook_url and skip polling)
while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 3000));
  job = await fetch(`${API}/generations/${job.id}`, { headers }).then((r) => r.json());
}

console.log(job.status === "succeeded" ? job.output.video.url : job.error);

Response

{
  "id": "gen_8c2QmX1nq0k4",
  "object": "generation",
  "model": "shengshu/vidu-q3-pro",
  "endpoint": "shengshu/vidu-q3-pro/text-to-video",
  "mode": "text-to-video",
  "status": "queued",
  "input": {
    "prompt": "A lighthouse keeper climbs the spiral stairs during a storm, lightning through the windows, the beam sweeping the waves; cut to the lamp room as she lights it",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0.2255,
    "currency": "usd",
    "estimated": true,
    "official_usd": null,
    "list_price_source": "official",
    "list_price_label": "Official",
    "saved_usd": null
  },
  "source": "api",
  "started_at": null,
  "completed_at": null,
  "urls": {
    "get": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4",
    "cancel": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4/cancel"
  },
  "created_at": "2026-10-15T09:21:04Z"
}

Vidu Q3 Pro Image to Video API

POST/api/v1/run/shengshu/vidu-q3-pro/image-to-video

Submits an asynchronous job and returns 202 with a generation id. Poll GET /api/v1/generations/{id} or pass webhook_url. See job lifecycle.

Input parameters

NameTypeDescriptionAffects price
promptrequiredstringDescribe the shot: subject, action, camera movement, lighting and style.No
image_urlrequiredstring (URL)Image used as the opening frame. JPG/PNG/WebP, URL or upload.No
end_image_urlstring (URL)Optional closing frame — the model animates between the two.No
resolutionstring (enum)Output resolution. Higher resolutions cost more per second.
Values: 540p · 720p · 1080p
Default: 720p
Yes
durationintegerLength of the generated clip in seconds (1–16s). You pay per second.
Range: 1–16s
Default: 5
Yes
generate_audiobooleanGenerate synchronized dialogue and sound effects. Included in the price.
Default: true
No
seedintegerUse the same seed and settings to reproduce a result. Leave empty for random.No
webhook_urlstring (URL)Optional. We POST the finished generation here, signed with your webhook secret. WebhooksNo

Request

const API = "https://cheapergen.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Submit the job
let job = await fetch(`${API}/run/shengshu/vidu-q3-pro/image-to-video`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "The dancer spins once and freezes in a pose as the stage lights flare; slow push-in, applause rises",
    "image_url": "https://cdn.cheapergen.com/samples/portrait.jpg",
    "resolution": "720p",
    "duration": 5
  }),
}).then((r) => r.json());

// 2. Poll until it finishes (or pass webhook_url and skip polling)
while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 3000));
  job = await fetch(`${API}/generations/${job.id}`, { headers }).then((r) => r.json());
}

console.log(job.status === "succeeded" ? job.output.video.url : job.error);

Response

{
  "id": "gen_8c2QmX1nq0k4",
  "object": "generation",
  "model": "shengshu/vidu-q3-pro",
  "endpoint": "shengshu/vidu-q3-pro/image-to-video",
  "mode": "image-to-video",
  "status": "queued",
  "input": {
    "prompt": "The dancer spins once and freezes in a pose as the stage lights flare; slow push-in, applause rises",
    "image_url": "https://cdn.cheapergen.com/samples/portrait.jpg",
    "resolution": "720p",
    "duration": 5
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0.2255,
    "currency": "usd",
    "estimated": true,
    "official_usd": null,
    "list_price_source": "official",
    "list_price_label": "Official",
    "saved_usd": null
  },
  "source": "api",
  "started_at": null,
  "completed_at": null,
  "urls": {
    "get": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4",
    "cancel": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4/cancel"
  },
  "created_at": "2026-10-15T09:21:04Z"
}

Get the result

Generations are asynchronous. Poll until status is succeeded, failed or canceled — or pass webhook_url when you submit. Failed generations are refunded automatically.

curl https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4 \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"

More: job lifecycle · webhooks · errors

Vidu Q3 Pro pricing

Pay per second of video as you go, with no subscription required (monthly plans are optional). Failed generations are refunded automatically.

TierOfficial priceCheaperGen
540p
audio included
$0.045/s$0.0337/s
720p
audio included
$0.10/s$0.0748/s
1080p
audio included
$0.12/s$0.0897/s
  • Official price: Vidu international API list price for viduq3-pro (text / image / first-and-last-frame to video), platform.vidu.com/pricing at $0.005 per credit, checked 2026-10-19 (540p 9 credits = $0.045 / s, 720p 20 = $0.10, 1080p 24 = $0.12; audio included). Prices verified October 18, 2026.