How to Use Kling 4.0 API
A step-by-step Kling 4.0 API tutorial with Node.js, Python and cURL: submit a text to video job, poll it or receive a webhook, and download the video. The example below costs $0.75.
- Endpoints
- 3
- Text to Video · Image to Video · Reference to Video
- Example request
- $0.75
- Text to Video
- Languages
- 3
- Node.js · Python · cURL
- Failed runs
- $0
- refunded automatically
Get an API key
Create an account, add credits and create a key in Dashboard → API keys. Store it as CHEAPERGEN_API_KEY on your server. Every request sends it as a bearer token.
Choose a Kling 4.0 endpoint
Each task has its own endpoint. All of them take a JSON body and return a generation you can poll.
| Task | Endpoint | Required | From |
|---|---|---|---|
| Text to Video | kuaishou/kling-4.0/text-to-video | prompt | $0.1486/s |
| Image to Video | kuaishou/kling-4.0/image-to-video | prompt, image_url | $0.1486/s |
| Reference to Video | kuaishou/kling-4.0/reference-to-video | prompt | $0.1486/s |
Submit a text to video job
This program submits the job, polls every 3 seconds until it finishes and prints the video URL. Swap the prompt and settings for your own.
const API = "https://cheapergen.com/api/v1";
const headers = {
Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
"Content-Type": "application/json",
};
// 1. Submit the job
let job = await fetch(`${API}/run/kuaishou/kling-4.0/text-to-video`, {
method: "POST",
headers,
body: JSON.stringify({
"prompt": "A paper boat drifts along a rain-filled gutter at night, neon reflections, the soft patter of rain",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}),
}).then((r) => r.json());
// 2. Poll until it finishes (or pass webhook_url and skip polling)
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
job = await fetch(`${API}/generations/${job.id}`, { headers }).then((r) => r.json());
}
console.log(job.status === "succeeded" ? job.output.video.url : job.error);Set the parameters that matter
The settings for kuaishou/kling-4.0/text-to-video, with what each one does to the price.
| Parameter | Type · default | What it does | Price effect |
|---|---|---|---|
| aspect_ratio | string (enum) · 16:9 | Output frame shape. 16:9 · 9:16 · 1:1 · 21:9 | Yes |
| resolution | string (enum) · 720p | Output resolution. Higher resolutions cost more per second. 720p · 1080p | 720p: $0.1486/s 1080p: $0.2226/s |
| duration | integer · 5 | Length of the generated clip in seconds (3–30s). You pay per second. | Billed per second |
Other Kling 4.0 endpoints take the same shape with their own inputs:
POST /api/v1/run/kuaishou/kling-4.0/image-to-video
{
"prompt": "She turns toward the window and smiles as the curtains sway; slow push-in",
"image_url": "https://cdn.cheapergen.com/samples/portrait.jpg",
"resolution": "720p",
"duration": 5
}POST /api/v1/run/kuaishou/kling-4.0/reference-to-video
{
"prompt": "@Image1 walks along the beach at sunset, following the camera move of @Video1",
"reference_image_urls": [
"https://cdn.cheapergen.com/samples/reference-1.jpg"
],
"reference_video_urls": [
"https://cdn.cheapergen.com/samples/reference-1.mp4"
],
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}Get the result
A job moves from queued to running to succeeded, failed or canceled. Poll GET /api/v1/generations/{id}, or pass webhook_url and we POST the result to you. Download the output and store it yourself.
{
"id": "gen_8c2QmX1nq0k4",
"object": "generation",
"model": "kuaishou/kling-4.0",
"endpoint": "kuaishou/kling-4.0/text-to-video",
"mode": "text-to-video",
"status": "succeeded",
"input": {
"prompt": "A paper boat drifts along a rain-filled gutter at night, neon reflections, the soft patter of rain",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
},
"output": {
"video": {
"url": "https://cdn.cheapergen.com/outputs/gen_8c2Q.mp4",
"content_type": "video/mp4"
}
},
"error": null,
"cost": {
"amount_usd": 0.2255,
"currency": "usd",
"estimated": false,
"official_usd": 0.264,
"list_price_source": "official",
"list_price_label": "Official",
"saved_usd": 0.0385
},
"source": "api",
"created_at": "2026-10-15T09:21:04Z",
"started_at": "2026-10-15T09:21:06Z",
"completed_at": "2026-10-15T09:22:31Z"
}Price a request before you run it
The quote endpoint is free and needs no key. It returns the price, the official price and your discount for exactly the input you send.
curl -X POST https://cheapergen.com/api/v1/quote/kuaishou/kling-4.0/text-to-video \
-H "Content-Type: application/json" \
-d '{"prompt":"A paper boat drifts along a rain-filled gutter at night, neon reflections, the soft patter of rain","aspect_ratio":"16:9","resolution":"720p","duration":5}'| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A parameter is missing or out of range — the message names it. |
| 401 | unauthorized | Missing, malformed or revoked API key. |
| 402 | insufficient_balance | Not enough credits for the quoted price; top up or enable auto top-up. |
| 429 | rate_limited | Too many requests or generations in progress; back off and retry. |
| 502 | upstream_error | The model failed; the hold is refunded and you can retry. |
| 503 | model_unavailable | No healthy route right now; retry later or pick another model. |
FAQ