
Kling API — ruble pricing and a 5-minute setup
Kling API with ruble billing: every Kling version (V3, O3, 2.6, 2.5) through one Zerocoder key. Per-second video pricing, code samples, limits and refunds.
What Kling models do
Kling is a family of video generation models from Kuaishou. You send a text prompt, or a prompt plus a reference frame, and get back a short generated video clip. The family is strong at turning a single still image into motion (image-to-video) and at following a scene description closely enough for product shots, social clips and quick storyboards.
The lineup spans several generations and tiers, from the base kling-v3 line up through motion-focused and pro/edit variants, so you can pick a model by how much detail and control the task needs.
What Zerocoder adds
Zerocoder gives every model in the family one API key and one ruble wallet, so you don't juggle separate accounts per model. Top up with a Russian card or a company invoice, no VPN or foreign card involved. The same key works across the whole catalog, docs describe the request format once, and the SDK follows plain HTTP, so any client that can send JSON over HTTPS can call it.
How a request works
You start a job by posting the model id, your prompt, the clip length in seconds and, for image-to-video, a reference frame URL. The API answers right away with a job id and a queued status. From there you poll that id until the status flips to completed, when a video URL appears, or to failed. Each model's price is listed in the models endpoint before you commit to a run.
Available models and prices
Built from the live GET /v1/models price list: prices include our margin, in rubles and in dollars at the internal rate. Anything missing is temporarily not served by the gateway.
| Model | Unit | ₽ | $ | Cost examples | Endpoint |
|---|---|---|---|---|---|
kling-v3recommendedalso: kling-30 | per second | 7.32 ₽ | $0.081 | 5-second clip: 36.6 ₽ · $0.407 10-second clip: 73.2 ₽ · $0.813 | /v1/videos |
kling-v3-prorecommended | per second | 9.72 ₽ | $0.108 | 5-second clip: 48.6 ₽ · $0.540 10-second clip: 97.2 ₽ · $1.08 | /v1/videos |
kling-v2.6recommended | per second | 14.4 ₽ | $0.160 | 5-second clip: 72 ₽ · $0.800 10-second clip: 144 ₽ · $1.60 | /v1/videos |
kling-o3recommended | per second | 13.2 ₽ | $0.147 | 5-second clip: 66 ₽ · $0.733 10-second clip: 132 ₽ · $1.47 | /v1/videos |
kling-o3-prorecommended | per second | 16.8 ₽ | $0.187 | 5-second clip: 84 ₽ · $0.933 10-second clip: 168 ₽ · $1.87 | /v1/videos |
kling-v2.5-standardrecommended | per second | 8.4 ₽ | $0.093 | 5-second clip: 42 ₽ · $0.467 10-second clip: 84 ₽ · $0.933 | /v1/videos |
kling-v2.5-prorecommended | per second | 8.4 ₽ | $0.093 | 5-second clip: 42 ₽ · $0.467 10-second clip: 84 ₽ · $0.933 | /v1/videos |
kling-v2.6-motion-720p | per second | 8.4 ₽ | $0.093 | 5-second clip: 42 ₽ · $0.467 10-second clip: 84 ₽ · $0.933 | /v1/videos |
kling-o1-edit | per second | 9 ₽ | $0.100 | 5-second clip: 45 ₽ · $0.500 10-second clip: 90 ₽ · $1.00 | /v1/videos |
kling-o1 | per second | 9.6 ₽ | $0.107 | 5-second clip: 48 ₽ · $0.533 10-second clip: 96 ₽ · $1.07 | /v1/videos |
kling-v2.6-motion-1080p | per second | 16.8 ₽ | $0.187 | 5-second clip: 84 ₽ · $0.933 10-second clip: 168 ₽ · $1.87 | /v1/videos |
kling-v2.1-master | per second | 27.6 ₽ | $0.307 | 5-second clip: 138 ₽ · $1.53 10-second clip: 276 ₽ · $3.07 | /v1/videos |
Cost calculator
Pick a model and a volume — the calculator uses the same formulas as API billing.
Prices from GET /v1/models, internal exchange rate. Failed generations are not charged.
First request
One zc-sk-… key, the x-api-key header (or Authorization: Bearer), base URL https://zerocoder.com/api/v1. Samples are generated from the real route contracts.
Create a key
Account → API: top up the balance in rubles and create a zc-sk-… key
Send a request
Copy the sample below — the model id is already taken from the price list.
Check the charge
GET /v1/balance shows the balance; the call price comes back in the response.
# 1) start the render — price_rub is charged up front, refunded if the render fails
curl https://zerocoder.com/api/v1/videos \
-H "x-api-key: zc-sk-…" -H "content-type: application/json" \
-d '{"model": "kling-30", "prompt": "A drone shot over a foggy pine forest at sunrise, slow dolly in", "seconds": 5, "aspect": "16:9"}'
# → {"id":"vid_…","object":"video","model":"kling-30","status":"queued","seconds":5,"price_rub":…,"balance_rub":…,"poll":"/api/v1/videos?id=vid_…"}
# 2) poll until status is "completed" (url) or "failed" (refunded: true)
curl "https://zerocoder.com/api/v1/videos?id=vid_…" -H "x-api-key: zc-sk-…"
# image-to-video: add "image": "https://…/frame.jpg" to the bodyimport time, requests
API = "https://zerocoder.com/api/v1"
H = {"x-api-key": "zc-sk-…"}
job = requests.post(f"{API}/videos", headers=H, json={
"model": "kling-30",
"prompt": "A drone shot over a foggy pine forest at sunrise, slow dolly in",
"seconds": 5, # 4–10
"aspect": "16:9", # or 9:16 / 1:1; "image": "https://…" for image-to-video
}).json()
print("charged", job["price_rub"], "RUB, balance", job["balance_rub"])
while True:
st = requests.get(f"{API}/videos", headers=H, params={"id": job["id"]}).json()
if st["status"] == "completed":
print(st["url"]); break
if st["status"] == "failed":
print("failed, refunded:", st.get("refunded")); break
time.sleep(4)const API = "https://zerocoder.com/api/v1";
const H = { "x-api-key": "zc-sk-…", "content-type": "application/json" };
const job = await fetch(`${API}/videos`, {
method: "POST", headers: H,
body: JSON.stringify({ model: "kling-30", prompt: "A drone shot over a foggy pine forest at sunrise, slow dolly in", seconds: 5, aspect: "16:9" }),
}).then((r) => r.json());
console.log("charged", job.price_rub, "RUB");
for (;;) {
const st = await fetch(`${API}/videos?id=${job.id}`, { headers: H }).then((r) => r.json());
if (st.status === "completed") { console.log(st.url); break; }
if (st.status === "failed") { console.log("failed, refunded:", st.refunded); break; }
await new Promise((r) => setTimeout(r, 4000));
}Inputs, limits and refunds
- Text → video and image → video (image: public https URL)
- Duration seconds: 4–10 (default 5)
- aspect 16:9 / 9:16 / 1:1 or an explicit size
- Charged up front by price_rub, refunded if the render fails (refunded: true)
- A job stuck in the queue over 30 minutes is refunded automatically
- 30 requests per minute per key (all endpoints combined)
Error responses and refunds
# 401 {"type":"error","error":{"type":"authentication_error","message":"Invalid or revoked API key."}}
# 402 {"type":"error","error":{"type":"billing_error","message":"Not enough API balance: …"}}
# 429 {"type":"error","error":{"type":"rate_limit_error","message":"…"}} ← 30 requests/min per key
# 400 {"type":"error","error":{"type":"invalid_request_error","message":"Unknown model \"…\". See GET /v1/models."}}
# 502 {"type":"error","error":{"type":"api_error","message":"… Charge refunded."}} ← start failed → money back
# GET ?id → {"id":"vid_…","status":"failed","refunded":true} ← render failed → money backUse cases
Generate short product demo clips from a single hero image for an e-commerce listing
Turn blog post illustrations into looping teaser videos for social media automation
Build a Telegram bot that animates a user's photo into a short clip on request
Prototype storyboards for ad creatives before booking a real video shoot
Auto-generate background video loops for a SaaS landing page builder
Add a video preview step to an internal content pipeline that already produces images
Prompting tips
- Name the shot type and camera move directly: close-up, wide shot, slow pan, dolly-in, handheld — vague prompts give static results
- State the light and time of day (soft morning light, harsh noon sun, neon night) so the clip's mood matches your use case
- Describe what changes over the clip, not just the starting pose: an action, an expression shift, an object entering frame
- For image-to-video, make the reference frame match the described scene exactly — mismatched framing or lighting confuses the motion
- Pick aspect ratio and length for where the clip will run, and avoid on-screen text, crowds and close-up hands — the model tends to distort them
FAQ
Which Kling versions are available via the API?
Every version in the live price list shown in the table above — it updates automatically from GET /v1/models. If a version disappears from the table, the gateway is temporarily not serving it.
How is Kling Pro different from the standard tier?
Pro tiers deliver steadier physics and more detailed faces and fabrics at a higher per-second price; standard tiers are faster and suit backgrounds and bulk variations.
How do I get a Kling API key?
Sign up at Zerocoder, open the API section of your account and create a zc-sk-… key. The same key unlocks Kling and every other model in the catalogue — no separate Kling key needed.
How is Kling API billed?
Top up the API balance in rubles (Russian bank card or invoice for companies). Usage is charged per second or per clip of Kling video at the price returned by GET /v1/models; Kling prices already include our margin, there are no hidden fees.
What if Kling fails to generate the clip?
If the provider fails a Kling generation, the charge is refunded automatically and the response carries refunded: true. You only pay for a finished clip.
What are the Kling API rate limits?
A shared limit of 30 requests per minute per key across all generation endpoints, Kling included. Above that you get 429 rate_limit_error; for higher Kling volumes contact us and we raise it individually.
Do I need a VPN or a foreign card for Kling API?
No. Kling requests go to zerocoder.com, payment is in rubles, and accounting documents are available on request.
Can I try Kling without code?
Yes: Kling is available in the Zerocoder studio and in the free tools catalogue — check the quality by hand, then wire up the Kling API.

AI API for your product
70% cheaper than the official APIs — one key for GPT, Claude, Gemini, images and video