Video model
Kling V3.0 Omni
kwaivgi/kling-v3.0-omni
kwaivgi/kling-v3.0-omni is a video generation model from Kuaishou you can call on the OceanToken API.
Price card, similar models and questions answered: Kling V3.0 Omni on oceantoken.ai.
At a glance
| Model ID | kwaivgi/kling-v3.0-omni |
|---|---|
| Type | Video |
| Publisher | Kuaishou |
| Price | On oceantoken.ai |
| Endpoint | /v1/videos |
| API shape | OpenAI-compatible |
| In the catalog since | 2026-10-30 |
API
POST /v1/videos. Base URL https://api.oceantoken.ai, your OceanToken key as the bearer token. The OpenAI SDKs work unchanged; see the Quickstart.
Download this spec (JSON) · llms.txt for AI assistants
The call starts a job: poll GET /v1/videos/{video_id}, then download GET /v1/videos/{video_id}/content.
Text to video
- curl
- Python
- JavaScript
curl https://api.oceantoken.ai/v1/videos \
-H "Authorization: Bearer $OCEANTOKEN_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"model": "kwaivgi/kling-v3.0-omni",
"prompt": "A paper boat drifting down a rain-soaked street",
"duration": 5,
"resolution": "720p"
}'
# then poll GET https://api.oceantoken.ai/v1/videos/{id} until "status" is "completed"
import os, time, uuid
import requests
BASE = "https://api.oceantoken.ai/v1"
headers = {"Authorization": f"Bearer {os.environ['OCEANTOKEN_API_KEY']}"}
job = requests.post(
f"{BASE}/videos",
headers={**headers, "Idempotency-Key": str(uuid.uuid4())},
json={
"model": "kwaivgi/kling-v3.0-omni",
"prompt": "A paper boat drifting down a rain-soaked street",
"duration": 5,
"resolution": "720p",
},
).json()
while job["status"] in ("queued", "in_progress"):
time.sleep(15)
job = requests.get(f"{BASE}/videos/{job['id']}", headers=headers).json()
print(job["status"], job.get("content_url")) # the MP4, valid for 24 hours
const BASE = 'https://api.oceantoken.ai/v1';
const headers = {Authorization: `Bearer ${process.env.OCEANTOKEN_API_KEY}`, 'Content-Type': 'application/json'};
let job = await (await fetch(`${BASE}/videos`, {
method: 'POST',
headers: {...headers, 'Idempotency-Key': crypto.randomUUID()},
body: JSON.stringify({
"model": "kwaivgi/kling-v3.0-omni",
"prompt": "A paper boat drifting down a rain-soaked street",
"duration": 5,
"resolution": "720p"
}),
})).json();
while (job.status === 'queued' || job.status === 'in_progress') {
await new Promise((r) => setTimeout(r, 15000));
job = await (await fetch(`${BASE}/videos/${job.id}`, {headers})).json();
}
console.log(job.status, job.content_url); // the MP4, valid for 24 hours
Request parameters
Only what this model takes. Anything else in the request is left out before it reaches the model.
| Parameter | Type | Description |
|---|---|---|
modelrequired | string | This model's ID. |
promptrequired | string | What happens in the clip. |
duration | integer 3 to 15 default 5 | Length in whole seconds. seconds is accepted too. |
resolution | string 720p, 1080p | Output resolution; lower is faster and cheaper. |
aspect_ratio | string 16:9, 9:16, 1:1 | Output aspect ratio. |
generate_audio | boolean | true for a clip with sound, false for a silent one. |
multi_shot | boolean default false | Make a multi-shot video (up to 6 shots in one clip). With multi_prompt it is implied. |
shot_type | string customize, intelligence | customize: you list the shots in multi_prompt. intelligence: the model cuts the shots from prompt. Defaults to customize when multi_prompt is sent, intelligence otherwise. With a reference video, intelligence only. |
multi_prompt | array up to 6 items | The shots, in order: [{"prompt": "...", "duration": 2}, ...] (index 1, 2, 3... optional). Each shot is at least 1 second with a prompt of at most 512 characters; the shots' seconds must add up to duration (left out, duration is their sum). |
frame_images | array up to 2 items | The first frame and last frame: {"type": "image_url", "frame_type": "first_frame", "image_url": {"url": ...}}. |
input_references | array | Reference media the clip is built from: up to 7 images, up to 1 videos. Each {"type": "image_url" | "video_url" | "audio_url", ...: {"url": ...}}. |
Response
| Field | Type | Description |
|---|---|---|
id | string | The job's ID; poll it. |
status | string queued, in_progress, completed, failed | Where the job is. |
seconds | string | Length of the clip. |
size | string | Width x height of the clip. |
content_url | string | Once completed: the MP4, valid for 24 hours. |
error | object | On a failed job: code and message. |
Example response
{
"id": "video_...",
"object": "video",
"status": "completed",
"model": "kwaivgi/kling-v3.0-omni",
"seconds": "5",
"size": "1280x720",
"created_at": 1792000000,
"completed_at": 1792000095,
"content_url": "https://...",
"error": null
}
More examples and how errors and billing work: Video.
Compared with similar models
Video models on OceanToken in the same price range as kwaivgi/kling-v3.0-omni. Compare their prices on oceantoken.ai.
| Model | Publisher | Context |
|---|---|---|
Kling V3.0 Omnikwaivgi/kling-v3.0-omni | Kuaishou | — |
Gen 4.5runway/gen-4.5 | Runway | — |
Seedance 2.0 Upscaledbytedance/seedance-2.0-upscaled | ByteDance | — |
Seedance 2.5bytedance/seedance-2.5 | ByteDance | — |
More from Kuaishou
- Kling V3.0 Pro
kwaivgi/kling-v3.0-pro - Kling V3.0 Std
kwaivgi/kling-v3.0-std - Kling Video o1
kwaivgi/kling-video-o1
All Kuaishou models on OceanToken
Use it
Create an account Price on oceantoken.ai
The facts on this page were read from the live OceanToken catalog on 2026-11-05 (UTC), when the documentation was built. Prices are published on oceantoken.ai.