Animate a portrait (image-to-video)
The person slowly turns their head toward the camera and smiles, natural blink, soft studio light, keep identity, hairstyle and clothing from the reference
seconds: 5aspect: 9:16image: https://…/portrait.jpgKling 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.
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.
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.
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.
The live GET /v1/models price list in rubles and dollars. Where we are cheaper, the vendor's official price for the same unit is struck through. Endpoint: /v1/videos
| Model | Price | Unit | Discount |
|---|---|---|---|
Kling V3recommended kling-v3 · Kuaishoualso: kling-30 | Official price: | per second of videoofficial: $0.126/s · 720P · with audio | -35% |
Kling V3 Pro kling-v3-pro · Kuaishou | Official price: | per second of videoofficial: $0.168/s · 1080P · with audio | -35% |
Kling V2.6 kling-v2.6 · Kuaishou | 14.4 ₽$0.160 | per second of video | — |
Kling O3 kling-o3 · Kuaishou | 13.2 ₽$0.147 | per second of video | — |
Kling O3 Pro kling-o3-pro · Kuaishou | 16.8 ₽$0.187 | per second of video | — |
Kling V2.5 Standard kling-v2.5-standard · Kuaishou | 8.4 ₽$0.093 | per second of video | — |
Kling V2.5 Pro kling-v2.5-pro · Kuaishou | 8.4 ₽$0.093 | per second of video | — |
Kling V2.6 Motion 720p kling-v2.6-motion-720p · Kuaishou | 8.4 ₽$0.093 | per second of video | — |
Kling O1 Edit kling-o1-edit · Kuaishou | 9 ₽$0.100 | per second of video | — |
Kling O1 kling-o1 · Kuaishou | 9.6 ₽$0.107 | per second of video | — |
Kling V2.6 Motion 1080p kling-v2.6-motion-1080p · Kuaishou | 16.8 ₽$0.187 | per second of video | — |
Kling V2.1 Master kling-v2.1-master · Kuaishou | 27.6 ₽$0.307 | per second of video | — |
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.
POST /v1/videos starts the render and returns the job id and price_rub right away; GET /v1/videos?id=… returns the status and the clip URL. If the render fails, the money goes back to the balance automatically.
Base URLhttps://zerocoder.com /api/v1Key — in the x-api-key or Authorization: Bearer header
Model in the samples — kling-30; any text‑to‑video or image‑to‑video model from the table works
import time, requests API = "https://zerocoder.com/api/v1"H = {"x-api-key": "zc-sk-…"} r = requests.post(f"{API}/videos", headers=H, json={ "model": "kling-30", "prompt": "Drone shot over a foggy forest at dawn", "seconds": 5, # 4–10 "aspect": "16:9", # image-to-video: "image": "https://…"})r.raise_for_status()job = r.json() # status "queued", price_rub charged st = {}while st.get("status") not in ("completed", "failed"): time.sleep(4) r = requests.get(f"{API}/videos", headers=H, params={"id": job["id"]}) st = r.json() if r.ok else {} # 502 → poll againprint(st) # "url", or "refunded": true on failureconst API = "https://zerocoder.com/api/v1";const H = { "x-api-key": "zc-sk-…", "content-type": "application/json",}; const res = await fetch(`${API}/videos`, { method: "POST", headers: H, body: JSON.stringify({ model: "kling-30", seconds: 5, aspect: "16:9", prompt: "Drone shot over a foggy forest at dawn", }), // image-to-video: add image: "https://…"});const job = await res.json(); // "queued", price_rubif (!res.ok) throw new Error(job.error.message); const poll = `${API}/videos?id=${job.id}`;let st = {};while (st.status !== "completed" && st.status !== "failed") { await new Promise((go) => setTimeout(go, 4000)); const r = await fetch(poll, { headers: H }); st = r.ok ? await r.json() : {}; // 502 → poll again}console.log(st); // url, or refunded: true# 1) start the render: price_rub is charged up front,# refunded if the render failscurl https://zerocoder.com/api/v1/videos \ -H "x-api-key: zc-sk-…" \ -H "content-type: application/json" \ -d '{"model": "kling-30", "seconds": 5, "aspect": "16:9", "prompt": "Drone shot over a foggy forest at dawn"}'# → {"id":"…","object":"video","status":"queued",# "seconds":5,"price_rub":…,"balance_rub":…,# "poll":"/api/v1/videos?id=…"}# image-to-video: add "image": "https://…/frame.jpg"# 2) poll every few seconds: "completed" or "failed"curl "https://zerocoder.com/api/v1/videos?id=…" \ -H "x-api-key: zc-sk-…"# rendering → "status": "queued" | "running" | …# done → "status": "completed", "url": "https://…"# failed → "status": "failed", "refunded": true# HTTP 502 "Status check failed" → just poll again;# a render that never finishes is refundedKuaishou list price (Kling 3.0 · 720P, with audio); checked 4 October 2026

From a key to production — six steps based on the real /api/v1 contracts. Each step links to the relevant docs section.
Sign up, open the API section of your account, top up the balance in rubles and create a zc-sk-… key. One key unlocks Kling and every other model in the catalogue.
Read more →POST /v1/videos with model, prompt, seconds and aspect: the response carries the job id, status queued and price_rub — the amount is charged before the Kling render starts.
Read more →GET /v1/videos?id=… every few seconds until status is completed (url field) or failed (refunded: true — the money is already back on the balance). The file URL is temporary — download right away.
Read more →30 requests per minute per key: on 429 wait and retry with a growing pause; 402 — top up the balance; 400 — check model against GET /v1/models. Failed generations are not charged, so retrying is safe.
Read more →GET /v1/balance returns the balance and 30-day spend; every call's price comes back in the response — write it to your logs and set an alert threshold in your own monitoring.
Read more →Keep the key in server secrets, never in the frontend. For high Kling volumes contact us — the limit is raised individually and companies can pay by invoice. Check the observed stability on the status page.
Read more →HTTP Request node: POST to the /api/v1 endpoint, x-api-key header and a JSON body built from workflow fields. For video add a Wait node and a second HTTP Request on GET ?id= in a loop until completed.
HTTP “Make a request” module: POST, Body type JSON, x-api-key header. The response is parsed automatically — the image url or the answer text flows into the next modules.
Webhooks by Zapier → Custom Request action: POST, Data — JSON with model and prompt, Headers — x-api-key. Response fields are available to the following Zap steps.
In Apps Script use UrlFetchApp.fetch with method post, contentType application/json and a payload from the cells: prompts in one column, results written to the next one.
A bot on aiogram, grammY or Telegraf calls the same HTTP API: user message → model request → reply in the chat. For video — poll the status and send the file from the finished URL.
For text models the official OpenAI and Anthropic SDKs work with a swapped base URL and our key — your application code stays the same. Images and video are a plain HTTP call from any language.

More than a key: we help wire Kling and other models into your workflows — from audit to production, with invoice payment.
# 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
Numbers come from the public /status summary: the share of successful requests over a period for the whole API and for the category as a whole (the summary has no per-model breakdown), no SLA promises. Failed generations are not charged, so retrying is safe.
Tracking since Aug 6, 2026.
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

Copy the prompt and the parameters into the request body — the fields are named exactly as in the /api/v1 contract. Replace the angle-bracket placeholders with your material.
The person slowly turns their head toward the camera and smiles, natural blink, soft studio light, keep identity, hairstyle and clothing from the reference
seconds: 5aspect: 9:16image: https://…/portrait.jpgModel walking down a minimalist concrete runway in an oversized linen suit, slow tracking shot, soft diffused light, editorial look
seconds: 5aspect: 9:16Macro shot of honey drizzling over a stack of pancakes, steam rising, warm tungsten light, shallow depth of field
seconds: 5aspect: 16:9Smooth steadicam walk-through of a bright Scandinavian apartment, from the living room to the balcony, daylight, realistic materials
seconds: 10aspect: 16:9Flat 2D motion graphics: a smartphone icon sends a message to a cloud, then three gears start turning, clean blue palette, white background
seconds: 5aspect: 16:9
Industries where this kind of generation becomes part of the workflow rather than an experiment.
Each Kling version has its own price per second of finished video — see the table above or GET /v1/models, in rubles. A clip costs the per-second price times seconds; the amount is known before launch and comes back in price_rub. Pro and Master tiers cost more than standard ones, so run the calculator for several versions at once.
With one HTTP request and no SDK: POST /v1/videos with the x-api-key header and a body of model (the Kling version id), prompt, seconds, aspect and optionally image with a link to the start frame. The response carries the job id — poll GET /v1/videos with it every few seconds. Samples for Python, Node.js and the shell are above.
Duration seconds is 4 to 10 seconds, the frame format aspect is 16:9, 9:16 or 1:1, and the start image must be a public https URL. A key has a shared limit of 30 requests per minute across all endpoints, Kling included; above it you get 429 rate_limit_error and should retry a little later.
Exact ids are in the table above and in GET /v1/models: a Kling version name carries its generation and quality tier. Standard tiers are faster and cheaper per second — for backgrounds, product shots and bulk variations; Pro and Master hold motion physics, faces and fabrics better — for close-ups and final clips. Start with standard and step up only where the difference shows.
No: when the provider fails the render, the amount for the Kling clip returns to your API balance automatically and the job status shows refunded: true. The same happens when a job is stuck in the queue for more than 30 minutes. Only clips with status completed and a file link are paid for.
Yes. A company tops up the API balance by invoice: the invoice is issued in the API account, and after payment from the corporate account the amount is credited to the balance while the key keeps working with Kling unchanged. Individuals and sole traders can pay with a Russian bank card; accounting documents are available on request.
There are no separate free credits for the API — the API wallet starts with a minimum first top-up and every Kling second is charged at the list price. You can see for free how Kling handles your prompt in the Zerocoder studio and the Kling tool in the catalogue, then repeat the request through the API with the same text.
Yes. Pass a public link to the photo in the image field and describe only the motion in the prompt — a head turn, a camera move, wind in the hair; Kling keeps the composition. For best results use a clean source without watermarks and with some margin at the edges: the model may reframe the scene slightly.

Up to -35% vs the official API · ruble billing, no VPN