Kuaishou · Video · API

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.

ModelUnit₽$Cost examplesEndpoint
kling-v3recommendedalso: kling-30per second7.32 ₽$0.081
5-second clip: 36.6 ₽ · $0.407
10-second clip: 73.2 ₽ · $0.813
/v1/videos
kling-v3-prorecommendedper second9.72 ₽$0.108
5-second clip: 48.6 ₽ · $0.540
10-second clip: 97.2 ₽ · $1.08
/v1/videos
kling-v2.6recommendedper second14.4 ₽$0.160
5-second clip: 72 ₽ · $0.800
10-second clip: 144 ₽ · $1.60
/v1/videos
kling-o3recommendedper second13.2 ₽$0.147
5-second clip: 66 ₽ · $0.733
10-second clip: 132 ₽ · $1.47
/v1/videos
kling-o3-prorecommendedper second16.8 ₽$0.187
5-second clip: 84 ₽ · $0.933
10-second clip: 168 ₽ · $1.87
/v1/videos
kling-v2.5-standardrecommendedper second8.4 ₽$0.093
5-second clip: 42 ₽ · $0.467
10-second clip: 84 ₽ · $0.933
/v1/videos
kling-v2.5-prorecommendedper second8.4 ₽$0.093
5-second clip: 42 ₽ · $0.467
10-second clip: 84 ₽ · $0.933
/v1/videos
kling-v2.6-motion-720pper second8.4 ₽$0.093
5-second clip: 42 ₽ · $0.467
10-second clip: 84 ₽ · $0.933
/v1/videos
kling-o1-editper second9 ₽$0.100
5-second clip: 45 ₽ · $0.500
10-second clip: 90 ₽ · $1.00
/v1/videos
kling-o1per second9.6 ₽$0.107
5-second clip: 48 ₽ · $0.533
10-second clip: 96 ₽ · $1.07
/v1/videos
kling-v2.6-motion-1080pper second16.8 ₽$0.187
5-second clip: 84 ₽ · $0.933
10-second clip: 168 ₽ · $1.87
/v1/videos
kling-v2.1-masterper second27.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.

per call36.6 ₽ $0.407
per month · 501830 ₽ $20.33

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.

1

Create a key

Account → API: top up the balance in rubles and create a zc-sk-… key

2

Send a request

Copy the sample below — the model id is already taken from the price list.

3

Check the charge

GET /v1/balance shows the balance; the call price comes back in the response.

model: kling-30
# 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 body
import 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 back

Use cases

1

Generate short product demo clips from a single hero image for an e-commerce listing

2

Turn blog post illustrations into looping teaser videos for social media automation

3

Build a Telegram bot that animates a user's photo into a short clip on request

4

Prototype storyboards for ad creatives before booking a real video shoot

5

Auto-generate background video loops for a SaaS landing page builder

6

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