
Kling O3 (Kling 3.0 Omni) API: access, pricing and code
Summary
Runway Dev gives you the official Kling O3 API, also called Kling 3.0 Omni, in two main tiers, Kling O3 Pro and Kling O3 4K, plus a smaller Standard tier. Kling O3 is Kling’s omni video model: it edits a video from a text prompt, and it generates clips with sound from text or from a first frame and reference images. The tiers take the same inputs at different output sizes. This page covers access, pricing, inputs and code, and how your coding agent can build the integration for you.
What is Kling O3?
Kling O3, also called Kling 3.0 Omni, is Kling’s video model for editing and generating in one model. Send it a clip and a prompt, and it rewrites the clip (the light, the weather, the style or what is in the frame) while the framing and the motion stay as they were. Send it text, or a first frame with reference images, and it makes a new clip of 3 to 15 seconds, with sound generated in the same pass and, if you ask for it, several shots in one clip.
Prompt
Change <<<video_1>>> to blue hour just after sunset: a deep blue sky, warm light glowing in the windows of the houses, the street lamps and the tram headlights on, their light reflecting on the cobblestones. Keep the street, the houses, the tram and its motion exactly the same.
What is the difference between Kling O3 and Kling 3.0?
Kling O3 and Kling 3.0 both generate video with sound on Runway Dev, from a text prompt on POST /v1/text_to_video or from a first frame on POST /v1/image_to_video, with the same tiers, durations and multi-shot prompts. What sets Kling O3 apart is editing: it takes a clip you already have and rewrites it from a prompt on POST /v1/video_to_video, keeping its framing, motion and sound. Kling 3.0 has no video-to-video endpoint.
| On Runway Dev | Kling O3 | Kling 3.0 |
|---|---|---|
Edit a video (POST /v1/video_to_video) |
Yes, keeping the clip’s sound | No |
Generate from text (POST /v1/text_to_video) |
Yes | Yes |
Generate from images (POST /v1/image_to_video) |
A first frame, a last frame and reference images | A first and a last frame |
cfgScale |
Not taken | Taken |
| Price with audio off | The same rate as with audio | Lower on Standard and Pro |
For new clips without reference images, the Kling 3.0 API page covers that model. Kling O3 is the one to call when the job starts from a video you already have.
What are the ways to use Kling O3 on Runway Dev?
Kling O3 runs on Runway Dev four ways, all from one account:
| Way in | Best for | What you need |
|---|---|---|
| Playground | Trying a prompt, then copying the request as code | A Runway Dev account |
| API and SDKs | Calling Kling O3 from your own code | An API key, plus the Node or Python SDK if you want one |
| Coding agent | Having Claude Code, Codex or Cursor build the API integration into your product, tool or pipeline | The Runway Dev MCP and skills, and an API key for live calls |
| Workflows | A Kling O3 edit as one step with other models, run with one API call | A workflow built in the Runway app and published as an endpoint |
Kling O3 is also available in Model Router, a saved config you send with the request instead of a model ID. You set what to optimize for (cost, quality or latency), a maximum cost per generation and the models allowed, and the router picks one for each request sent to POST /v1/generate/video.
How do you get API access to Kling O3?
You get API access to Kling O3 with a Runway Dev account and an API key:
- Create an account at https://dev.runway.com.
- Create an API key in your project’s dashboard.
- Add credits to your project’s balance.
- Store the key in your environment as
RUNWAYML_API_SECRET. - Send a request with
"model": "klingO3_pro"(orklingO3_4k,klingO3_standard) and theX-Runway-Versionheader to one of its endpoints. The code below is ready to run.
How much does the Kling O3 API cost?
The Kling O3 API on Runway Dev is billed per second of video, at one rate per tier whether you edit a clip or generate one, with or without audio: 17 credits ($0.17) per second on Kling O3 Pro and 43 credits ($0.43) per second on Kling O3 4K. An edit is billed by the length of the clip you send, because Kling O3 returns the whole clip edited. Kling O3 Standard costs 13 credits ($0.13) per second.
Kling O3 Pro
| Credits | USD |
|---|---|
| 17 credits per second | $0.17 per second |
Kling O3 4K
| Credits | USD |
|---|---|
| 43 credits per second | $0.43 per second |
Kling O3 Standard
| Credits | USD |
|---|---|
| 13 credits per second | $0.13 per second |
Prices current as of October 22, 2026. 1 credit = $0.01.
Prompt
Slow aerial drift over water-filled rice terraces on a hillside at sunrise, mist lying in the valley below, the terraces reflecting the pink and gold sky, thin streams of water spilling from one terrace to the next. No people, no text. Audio: trickling water, morning birds, a soft wind.
How the billing works:
- Audio doesn’t change the price. Every tier bills the same rate whether
audiois on or off. - An edit bills the length of its source. A video-to-video request takes no
duration: the clip inpromptVideosets how many seconds are billed. - Input images add nothing to the price. Only the seconds of video Kling O3 returns are billed.
- A task that fails input moderation (
SAFETY.INPUT.*) is still charged. See task failures for what each failure means.
Every rate is also listed in the docs pricing guide.
What inputs does Kling O3 accept?
Kling O3 accepts a prompt of up to 2,500 characters and makes clips of 3 to 15 seconds. Images and video go in as a first frame, references or the clip to edit, and each endpoint uses them its own way.
On POST /v1/video_to_video Kling O3 edits the clip in promptVideo from a promptText, which is required, and returns the whole clip at its own length and framing, so the request takes no duration or ratio. The clip can run up to 10 seconds, with each side at least 720 pixels. Add up to 4 reference images for something the edit should bring in. In the prompt, <<<video_1>>> stands for the clip and <<<image_1>>> for the first reference image. The edit keeps the clip’s own sound unless you send keepOriginalSound: false in providerSettings, and the request takes no audio field.
On POST /v1/image_to_video the clip starts from the image in promptImage, which needs a first frame and can add a last one. references adds images of a subject, an object or a style to bring into the clip, up to 7 images in all, keyframes included. The prompt names each image as <<<image_1>>>, <<<image_2>>> and so on, in the order the request sends them: the first frame, the last frame if there is one, then the references. The clip takes the first frame’s shape.
Inputs
First frame, image_1
Reference, image_2
Prompt
The kite from <<<image_2>>> flies above the clifftop in <<<image_1>>>, held on a taut thin string that runs down out of the bottom of the frame. The wind tugs it up and to the side and its ribbon tail streams out behind it, while the long grass and wildflowers bend the same way. The camera tilts up slightly to keep the kite in frame. Audio: strong gusts of wind, the kite fabric fluttering, waves breaking far below.
On POST /v1/text_to_video the prompt alone makes the clip, at the ratio you pick from the tier’s list.
The tier sets the size, and ratio picks the shape. Kling O3 Pro takes One of 1920:1080, 1080:1920 or 1440:1440, Kling O3 4K takes One of 3840:2160, 2160:3840 or 2880:2880 and Kling O3 Standard takes One of 1280:720, 720:1280 or 960:960. A ratio copied from another tier fails validation.
providerSettings carries Kling’s own options:
multiPromptis a list of shots, each with its ownpromptandduration, that Kling O3 makes into one multi-shot clip on text-to-video and image-to-video. The shot durations add up to the clip’s length, within 3 to 15 seconds, andpromptTextbecomes optional. It doesn’t combine with alastframe, and video-to-video doesn’t take it.shotTypeiscustomizeby default withmultiPrompt, which follows your list of shots.intelligencehas Kling plan the shots frompromptText, which is then required.keepOriginalSound, on video-to-video only, keeps the sound of the clip you edit. It defaults totrue.
Here is every field, by tier and endpoint:
Kling O3 Pro
POST /v1/image_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_pro |
audio |
true or false. Default true |
providerSettings |
See the API reference |
promptText |
Text, 2 to 2,500 characters |
promptImage (required) |
One image, or a list of up to 2 images, each with an optional position of first or last |
ratio |
One of 1920:1080, 1080:1920 or 1440:1440 |
duration |
Whole number from 3 to 15 |
references |
One image, or a list of images |
POST /v1/text_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_pro |
audio |
true or false. Default true |
providerSettings |
See the API reference |
promptText |
Text, 2 to 2,500 characters |
ratio (required) |
One of 1920:1080, 1080:1920 or 1440:1440 |
duration |
Whole number from 3 to 15 |
POST /v1/video_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_pro |
providerSettings |
See the API reference |
promptText (required) |
Text, 2 to 2,500 characters |
promptVideo (required) |
One video |
references |
One image, or a list of images |
Kling O3 4K
POST /v1/image_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_4k |
audio |
true or false. Default true |
providerSettings |
See the API reference |
promptText |
Text, 2 to 2,500 characters |
promptImage (required) |
One image, or a list of up to 2 images, each with an optional position of first or last |
ratio |
One of 3840:2160, 2160:3840 or 2880:2880 |
duration |
Whole number from 3 to 15 |
references |
One image, or a list of images |
POST /v1/text_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_4k |
audio |
true or false. Default true |
providerSettings |
See the API reference |
promptText |
Text, 2 to 2,500 characters |
ratio (required) |
One of 3840:2160, 2160:3840 or 2880:2880 |
duration |
Whole number from 3 to 15 |
POST /v1/video_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_4k |
providerSettings |
See the API reference |
promptText (required) |
Text, 2 to 2,500 characters |
promptVideo (required) |
One video |
references |
One image, or a list of images |
Kling O3 Standard
POST /v1/image_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_standard |
audio |
true or false. Default true |
providerSettings |
See the API reference |
promptText |
Text, 2 to 2,500 characters |
promptImage (required) |
One image, or a list of up to 2 images, each with an optional position of first or last |
ratio |
One of 1280:720, 720:1280 or 960:960 |
duration |
Whole number from 3 to 15 |
references |
One image, or a list of images |
POST /v1/text_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_standard |
audio |
true or false. Default true |
providerSettings |
See the API reference |
promptText |
Text, 2 to 2,500 characters |
ratio (required) |
One of 1280:720, 720:1280 or 960:960 |
duration |
Whole number from 3 to 15 |
POST /v1/video_to_video
| Field | Accepts |
|---|---|
model (required) |
klingO3_standard |
providerSettings |
See the API reference |
promptText (required) |
Text, 2 to 2,500 characters |
promptVideo (required) |
One video |
references |
One image, or a list of images |
Images and videos go in as an HTTPS URL, a runway:// URI from an upload or a data URI; inputs lists sizes and formats. Each table shows what a field accepts on its own. Rules that combine fields are checked when the task is submitted, and the API reference has them in full.
Two more rules change what you send:
- Reference images take no
position. Keyframes go inpromptImage, and apositioninreferencesfails validation. - Audio is generated unless you turn it off. On text-to-video and image-to-video,
audiodefaults totrue; sendfalsefor a silent clip. The price stays the same.
How do you call Kling O3 from curl, Node and Python?
You call Kling O3 by sending klingO3_pro as the model to one of its endpoints. This request restyles a clip with POST /v1/video_to_video, and the other fields keep their defaults:
curl
curl -X POST https://api.dev.runwayml.com/v1/video_to_video \
-H "Authorization: Bearer $RUNWAYML_API_SECRET" \
-H "X-Runway-Version: 2024-11-06" \
-H "Content-Type: application/json" \
-d '{
"model": "klingO3_pro",
"promptText": "Restyle <<<video_1>>> as a hand-painted watercolor animation on textured paper, with soft washes of color and visible brush strokes. Keep the composition, the boats and their motion the same.",
"promptVideo": "https://d3phaj0sisr2ct.cloudfront.net/devportal/learn/kling-o3-api-code-harbor-source-7fde11f5.mp4"
}'
# The response carries the task id. Poll the task until it finishes:
curl https://api.dev.runwayml.com/v1/tasks/$TASK_ID \
-H "Authorization: Bearer $RUNWAYML_API_SECRET" \
-H "X-Runway-Version: 2024-11-06"
Node.js
import RunwayML, { TaskFailedError } from '@runwayml/sdk';
// Reads your API key from RUNWAYML_API_SECRET.
const client = new RunwayML();
try {
const task = await client.videoToVideo
.create({
model: 'klingO3_pro',
promptText: 'Restyle <<<video_1>>> as a hand-painted watercolor animation on textured paper, with soft washes of color and visible brush strokes. Keep the composition, the boats and their motion the same.',
promptVideo: 'https://d3phaj0sisr2ct.cloudfront.net/devportal/learn/kling-o3-api-code-harbor-source-7fde11f5.mp4',
})
.waitForTaskOutput();
console.log(task.output);
} catch (error) {
if (error instanceof TaskFailedError) {
console.error(error.taskDetails);
} else {
throw error;
}
}
Python
from runwayml import RunwayML, TaskFailedError
# Reads your API key from RUNWAYML_API_SECRET.
client = RunwayML()
try:
task = client.video_to_video.create(
model="klingO3_pro",
prompt_text="Restyle <<<video_1>>> as a hand-painted watercolor animation on textured paper, with soft washes of color and visible brush strokes. Keep the composition, the boats and their motion the same.",
prompt_video="https://d3phaj0sisr2ct.cloudfront.net/devportal/learn/kling-o3-api-code-harbor-source-7fde11f5.mp4",
).wait_for_task_output()
print(task.output)
except TaskFailedError as error:
print(error.task_details)
To edit on another tier, send klingO3_4k or klingO3_standard as the model. The rest of the request stays the same.
Generation is asynchronous:
- The create request returns a task ID right away, and the video is made in the background.
- Poll
GET /v1/tasks/{id}with backoff until the status isSUCCEEDED,FAILEDorCANCELLED.THROTTLEDmeans the task is waiting in a queue, not rejected. - Output URLs are temporary, so download the video when the task succeeds. See outputs.
- The SDKs poll for you.
waitForTaskOutput()andwait_for_task_output()raiseTaskFailedErrorwith the task’s details when it fails. They also stop waiting after a default timeout while the task keeps running, so for long clips pass a longer timeout or keep polling the task ID. - To use your own rules instead of one fixed model, send a Model Router’s
configIdtoPOST /v1/generate/videoin place of the model. AdddryRunto see which model it picks without creating a task.
Why does a Kling O3 API request fail?
A Kling O3 task fails with a failure code that names the cause, and a request that breaks an input rule is rejected before a task is made. The common ones:
SAFETY.INPUT.*: content moderation rejected an input. The suffix hints at which one but may not match. The task is charged and shouldn’t be retried as is: change the inputs first.SAFETY.OUTPUT.*: the generated video was rejected by moderation. Change the prompt or references before you try again.ASSET.INVALID: an input file’s dimensions, duration or another property is outside what the model takes. Check it against inputs and fix it before retrying.- A
promptVideorejected for its length or size: the clip to edit runs over 10 seconds, or a side is under 720 pixels. Trim it or export it at a larger size. INTERNAL.BAD_OUTPUT.01: the output failed a quality check, often because of logos, watermarks or text in the input images. Remove them and retry.THIRD_PARTY.UNAVAILABLE: the model’s provider didn’t return the video, because of an outage or load. Wait, then retry.- A validation error on
ratio: the ratio belongs to another tier or another model. Pick one from the tier’s list above. - A request rejected for a missing prompt: text-to-video and image-to-video need a
promptTextor amultiPrompt, and video-to-video always needs apromptText. - Too many images on image-to-video: the first frame, the last frame and the references count together, up to 7.
- An output link that stopped working: output URLs expire. Download the video when the task succeeds.
What does Runway Dev add when you call Kling O3?
Runway Dev serves Kling O3 next to Runway’s own models and other labs’ models, behind one API key and one credit balance: you build with a single key and pay a single bill, instead of an account, a key and an invoice per lab.
A coding agent can do the Kling O3 integration for you on Runway Dev, end to end. Connect the Runway Dev MCP and the agent works from your live account: the models your project can call with their current prices and input limits, your credit balance and the record behind any task. It writes the integration against what the API accepts today, and when a task fails it looks up the reason and fixes it. The Runway Dev skills show the agent how to integrate with the official SDKs and how to build with models, Model Routers, Recipes and Workflows.
With Workflows, a Kling O3 edit becomes one step of a larger pipeline: chain it with Runway’s own models and other labs’ models, for images, video and audio, and run the whole pipeline with a single API call. Workflows don’t need to be built by a developer. A creative or marketing teammate builds and tests one visually in the Runway app (how Workflows work), then publishes it as an endpoint that your code calls. When the team updates the workflow, your code keeps calling the same endpoint.
FAQ
How do I get API access to Kling O3?
Create a Runway Dev account at dev.runway.com, make an API key and add credits. Then send klingO3_pro, klingO3_4k or klingO3_standard as the model to any of its endpoints: POST /v1/image_to_video, POST /v1/text_to_video and POST /v1/video_to_video. To have a coding agent write the integration instead, connect the Runway Dev MCP and install the Runway Dev skills: the agent builds it from your live account, with the prices and input limits your project has today.
Can Kling O3 edit a video through an API?
Kling O3 edits a video through POST /v1/video_to_video on Runway Dev. Send the clip as promptVideo and describe the change in promptText; Kling O3 returns the whole clip edited, at its own length and framing, with its original sound kept by default. Reference images can bring a subject or an object into the edit.
How much does the Kling O3 API cost?
On Runway Dev, Kling O3 Pro costs 17 credits ($0.17) per second, Kling O3 4K 43 credits ($0.43) per second and Kling O3 Standard 13 credits ($0.13) per second, with or without audio. An edit is billed by the length of the clip you send. Prices are current as of October 22, 2026.
What is the difference between Kling O3 and Kling 3.0?
Kling O3 and Kling 3.0 both generate video with sound from text or a first frame on Runway Dev, in the same tiers, durations and multi-shot prompts. Kling O3 adds video editing on POST /v1/video_to_video, which Kling 3.0 doesn’t offer, and takes reference images next to the first frame. Kling 3.0 Standard and Pro have a lower rate with audio off, while Kling O3 bills one rate per tier.
Is the Kling O3 API on Runway Dev the official model?
Runway Dev’s Kling O3 API runs the official Kling 3.0 Omni model from Kling, in all three tiers. You call it with your Runway Dev API key and the model IDs klingO3_pro, klingO3_4k and klingO3_standard, like every other model on Runway Dev.
Can I use Kling O3 without writing code?
You can use Kling O3 on Runway Dev without writing code yourself. The playground sends a request from a form and gives it back as code, and a coding agent connected to the Runway Dev MCP writes the integration for you. A creative or marketing teammate can also build a workflow around Kling O3 in the Runway app and publish it as an endpoint your app calls.
Does the same Runway Dev API key work for Kling O3 and other models?
One Runway Dev API key calls Kling O3 and every other model your project can use, Runway’s own and other labs’, with the same SDKs, task flow and credit balance. Switching models means changing the model field, or the rules of a Model Router.
What are the Kling O3 model IDs on Runway Dev?
The model IDs are klingO3_pro for Kling O3 Pro, klingO3_4k for Kling O3 4K and klingO3_standard for Kling O3 Standard. Each works on the same three endpoints: POST /v1/image_to_video, POST /v1/text_to_video and POST /v1/video_to_video.
How long can a Kling O3 video be, and at what sizes?
A Kling O3 clip generated on Runway Dev runs 3 to 15 seconds, and an edit keeps the length of the clip you send. The tier sets the size: Kling O3 Pro renders One of 1920:1080, 1080:1920 or 1440:1440, and Kling O3 4K One of 3840:2160, 2160:3840 or 2880:2880.
Does Kling O3 generate audio through the API?
Kling O3 generates audio with the video by default on text-to-video and image-to-video; send audio: false for a silent clip. An edit keeps the sound of the clip you send instead, unless keepOriginalSound is false.
Can Kling O3 make multi-shot videos through the API?
Kling O3 makes a multi-shot clip when you send multiPrompt in providerSettings: a list of shots, each with its own prompt and duration, on text-to-video or image-to-video. Set shotType to intelligence to have Kling plan the shots from your promptText instead.
Why did my Kling O3 request fail with SAFETY.INPUT.TEXT?
SAFETY.INPUT.TEXT means content moderation rejected an input of your request; the suffix hints at the prompt but may not match. The task is charged and shouldn’t be retried as is, so change the prompt or inputs before you send it again.
Can I switch from Kling O3 to another video model without changing my code?
A Model Router lets you change models without touching your code. Send its configId to POST /v1/generate/video, and change the models it may use, its priority or its cost cap in the router.


