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

$0.02per second of output, from
~$0.10for a 5-second clip at base rate
4Koutput on supported models
15parallel generations, top plan

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.

Text to video Image to video Motion control

LTX-2.3 Fast

The latency option. Meaningfully quicker turnaround at 4K output, in both text-to-video and image-to-video variants.

Fastest 4K output

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.

Image to video 1–16 sec

WAN

Open-source video generation, covered by the unlimited open-source plan rather than per-second wallet billing.

Open source Unlimited plan

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.

EndpointDoes whatKey parameters
/v6/video/text2videoPrompt to clipprompt, num_frames, fps
/v6/video/img2videoAnimate a still imageinit_image, prompt, num_frames
/v6/video/video2videoRestyle existing footageinit_video, prompt, strength
/v6/video/fetch/{id}Poll a queued jobkey

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