https://clawrouter.com/v1/videosVideo generation is always asynchronous — jobs run for minutes, not seconds. Submitting returns a task ID; you poll that task, and once it succeeds you download the result from the content endpoint.
Submit a job
modelstringrequiredVideo model to use, e.g. kling-v3 or viduq2-pro.
promptstringrequiredDescription of the video to generate.
secondsintegerLength in whole seconds; duration works too. Defaults to 5. Supported lengths vary by model.
modestringKling: std (720p), pro (1080p) or 4k (kling-v3 and kling-v3-omni only). Defaults to std.
metadata.soundstringKling v2.6 and later: "on" for a video with sound, "off" for silent. Defaults to "off".
metadata.resolutionstringVidu: 540p, 720p or 1080p. Defaults to 720p. A size such as 1280x720 works too.
sizestringKling: aspect ratio, e.g. 1920x1080 or 1080x1920.
imagestringImage URL for image-to-video. Send two in images for a first and last frame.
input_referencestringVidu: reference image URL; makes the job reference-to-video.
curl https://clawrouter.com/v1/videos \
-H "Authorization: Bearer $CLAWROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3",
"prompt": "A paper boat drifting down a rain gutter",
"mode": "pro",
"seconds": "10",
"metadata": { "sound": "on" }
}'Poll the task
https://clawrouter.com/v1/videos/{task_id}curl https://clawrouter.com/v1/videos/$TASK_ID \ -H "Authorization: Bearer $CLAWROUTER_API_KEY"
Download the result
https://clawrouter.com/v1/videos/{task_id}/contentReturns the video bytes once the task has succeeded. Calling it earlier will not wait for the job — poll the task first.
curl https://clawrouter.com/v1/videos/$TASK_ID/content \ -H "Authorization: Bearer $CLAWROUTER_API_KEY" \ --output result.mp4
Alternative path
An older pair of routes does the same thing and remains available: POST /v1/video/generations to submit, GET /v1/video/generations/{task_id} to poll. New integrations should use /v1/videos.
