Kling v3.0 text-to-video, image-to-video and motion control through one REST endpoint — with the price of every host that serves it, side by side.
| Endpoint | POST https://videorouter.sh/api/v1/videos |
| Authentication | Authorization: Bearer llmr_sk_live_... |
| Lifecycle | Async job: queued → in_progress → completed | failed. Polling is free. |
| Model ids | kling-o3, kling-v3, kling-v2.6, kling-motion-control, kling-v3-turbo |
| Billing | Per requested second, charged once at job creation; failed-upstream jobs are not billed. Flat 2% platform fee. |
| Provider choice | Unpinned requests route to the cheapest healthy host and fail over; append /<host> to prefer one. |
kling-o34 hosts · 720p
kling-v38 hosts · 720p
kling-v2.62 hosts · std
kling-motion-control2 hosts · std
kling-v3-turbo5 hosts · 720p
| Host | 720p | 1080p | 2160p |
|---|---|---|---|
| SandBase | $0.0588 | $0.0784 | $0.294 |
| MachGen | $0.067 | $0.09 | $0.336 |
| Tencent TokenHub | $0.084 | $0.112 | $0.42 |
| WaveSpeedAI | $0.084 | $0.112 | $0.42 |
USD per second, before the 2% platform fee. Bold = cheapest at that tier.
curl https://videorouter.sh/api/v1/videos \
-H "Authorization: Bearer $VIDEOROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "kling-v3.0-std", "prompt": "a paper airplane gliding over a city", "duration_secs": 5}'
# -> {"id": "video_...", "status": "queued"}
curl https://videorouter.sh/api/v1/videos/$ID -H "Authorization: Bearer $VIDEOROUTER_API_KEY"import time, requests
H = {"Authorization": "Bearer llmr_sk_live_..."}
job = requests.post("https://videorouter.sh/api/v1/videos", headers=H, json={
"model": "kling-v3.0-std", "prompt": "a paper airplane gliding over a city", "duration_secs": 5}).json()
while job["status"] not in ("completed", "failed"):
time.sleep(5)
job = requests.get(f"https://videorouter.sh/api/v1/videos/{job['id']}", headers=H).json()
print(job["data"][0]["url"] if job["status"] == "completed" else job["error"])const H = { Authorization: "Bearer llmr_sk_live_...", "Content-Type": "application/json" };
let job = await (await fetch("https://videorouter.sh/api/v1/videos", { method: "POST", headers: H,
body: JSON.stringify({ model: "kling-v3.0-std", prompt: "a paper airplane gliding over a city", duration_secs: 5 }) })).json();
while (!["completed", "failed"].includes(job.status)) {
await new Promise(r => setTimeout(r, 5000));
job = await (await fetch(`https://videorouter.sh/api/v1/videos/${job.id}`, { headers: H })).json();
}
console.log(job.data?.[0]?.url ?? job.error);Model id used: kling-v3.0-std. More in examples.
kling-v3.0-std, -pro, -4k — so promoting a draft to a final render is a one-word change.Yes, but it is also resold by several third-party hosts. Prices and reliability differ, which is why comparing hosts matters.
Change the model field: kling-v3.0-std, kling-v3.0-pro or kling-v3.0-4k. There is no separate quality parameter.
Yes — suffix the model with a host, e.g. kling-v3.0-std/novita, as a preference; add provider.only with allow_fallbacks: false for a hard pin. Without a suffix, requests route to the cheaper healthy host.
Kling 4.0 was announced on September 28, 2026 but is not yet available through any host in the VideoRouter catalog; Kling v3.0 is the current generation.
VideoRouter puts it next to dozens of other video and image models behind one API key, so you can compare providers, prices and fail over automatically. Compare providers on VideoRouter →