Text to video · Image to video · Video to video
Video generation API
from $0.02 per second
Kling, LTX, Vidu and WAN behind one endpoint. Prompt or still frame in, MP4 out.
Commercial usage rights on every plan · 100% refund within 24 hours
Video models worth calling
Each is priced as a multiplier on the $0.02/second base rate. Swap between them with
the model_id field.
Kling V2.5
Strong motion coherence and camera control. The default pick when the shot needs to hold together over several seconds rather than just look good frame by frame.
LTX-2.3 Fast
The latency option. Meaningfully quicker turnaround at 4K output, in both text-to-video and image-to-video variants.
Vidu Q3 Turbo
Animates a still image into a 1–16 second clip. Useful when you already have art direction locked and only need motion added.
WAN
Open-source video generation, covered by the unlimited open-source plan rather than per-second wallet billing.
Generating your first clip
Video generation is asynchronous by nature. Every request returns a
fetch_result URL and an eta — poll it until the MP4 is ready.
# 1. submit the job curl -X POST "$API_BASE/api/v6/video/text2video" \ -H "Content-Type: application/json" \ -d '{ "key": "YOUR_API_KEY", "model_id": "kling-v2.5", "prompt": "drone shot rising over a pine forest at dawn, volumetric fog", "negative_prompt": "blurry, warped, flickering", "num_frames": 121, "fps": 24, "width": 1280, "height": 720 }' # 2. poll the fetch_result URL from the response curl -X POST "$API_BASE/api/v6/video/fetch/REQUEST_ID" \ -H "Content-Type: application/json" \ -d '{ "key": "YOUR_API_KEY" }'
import requests, time def generate_video(prompt, model_id="kling-v2.5", seconds=5, fps=24): res = requests.post( API_BASE + "/api/v6/video/text2video", json={ "key": "YOUR_API_KEY", "model_id": model_id, "prompt": prompt, "num_frames": seconds * fps + 1, "fps": fps, "width": 1280, "height": 720, }, timeout=120, ).json() # video almost always queues — budget for a real wait while res.get("status") == "processing": time.sleep(res.get("eta", 10)) res = requests.post(res["fetch_result"], json={"key": "YOUR_API_KEY"}).json() return res["output"] # -> ["https://.../clip.mp4"]
const KEY = process.env.FLUX3_API_KEY; async function generateVideo(prompt, { modelId = "kling-v2.5", seconds = 5, fps = 24 } = {}) { let data = await fetch( `${API_BASE}/api/v6/video/text2video`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: KEY, model_id: modelId, prompt, num_frames: seconds * fps + 1, fps, width: 1280, height: 720, }), } ).then((r) => r.json()); while (data.status === "processing") { await new Promise((r) => setTimeout(r, (data.eta ?? 10) * 1000)); data = await fetch(data.fetch_result, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ key: KEY }), }).then((r) => r.json()); } return data.output; }
API_BASE is issued with your API key.
Video endpoints
All video endpoints share the submit-then-poll pattern above.
| Endpoint | Does what | Key parameters |
|---|---|---|
/v6/video/text2video | Prompt to clip | prompt, num_frames, fps |
/v6/video/img2video | Animate a still image | init_image, prompt, num_frames |
/v6/video/video2video | Restyle existing footage | init_video, prompt, strength |
/v6/video/fetch/{id} | Poll a queued job | key |
Things worth knowing before you build
Video generation behaves differently from image generation in ways that tend to surface late.
Budget for queue time
A 5-second clip takes substantially longer to produce than an image. Design the job as a background task with a webhook or polling worker, not an inline request inside a page load.
Cost scales with duration
At the $0.02/second base rate, a 5-second clip is about $0.10 and a 30-second clip about $0.60. Generate short and extend, rather than generating long and trimming.
Image-to-video is more controllable
Generating a still first with FLUX or SDXL, then animating it, gives far tighter control over composition than describing everything in one text prompt.
Frame count drives everything
num_frames and fps together determine duration, cost, and
queue time. 121 frames at 24fps is roughly 5 seconds.
Frequently asked
How much does a video generation API call cost?
Billing is per second of output, starting at $0.02. A 5-second clip is roughly $0.10 at the base rate. Premium models apply a multiplier on top, and open-source video models such as WAN are covered by the $149/mo unlimited plan.
How long does generation take?
Longer than images — expect tens of seconds to minutes depending on model,
duration, and resolution. Every response includes an eta in seconds;
poll fetch_result rather than blocking a request thread.
Can I animate an image I already have?
Yes, via /v6/video/img2video. Pass your still as
init_image plus a prompt describing the motion. Vidu Q3 Turbo and
Kling both support this path.
Is there a maximum clip length?
It varies by model. Vidu Q3 Turbo covers 1–16 seconds. For longer sequences,
generate consecutive clips and stitch them, keeping the last frame of one as the
init_image of the next.
Do I get commercial rights to generated video?
Yes, commercial usage rights are included on all plans.
Start generating video
Pick a plan, grab your API key, and submit your first job in under five minutes.
View pricing & get API key