Kling 3.0 Pro API
Generate Kling 3.0 Pro videos from your own code. Two endpoints cover text-to-video and image-to-video, any whole-second duration from 3 to 15 seconds, with native audio as an optional switch. Kling 3.0 Pro is resold by several providers; every request is priced across them and runs on the cheapest one that supports your settings.
64% less than the priciest provider (6 compared). Same model, same output.
Quickstart
Async by design: submit a generation, get a run id back instantly, poll until it completes (or pass a callbackUrl). Each mode is its own endpoint.
Kling 3.0 Pro Text to Video API
1 — Start a generation
curl -X POST https://app.scenetra.com/api/v1/generate/kling-v3-pro \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"A red fox trots through fresh snow at dawn, low sun behind the trees, slow tracking shot","aspect_ratio":"16:9","duration":"5"}'Response (202)
{
"runId": "run_abc123",
"status": "PENDING",
"model": "kling-v3-pro",
"estimatedCredits": 400,
"statusUrl": "/api/v1/runs/run_abc123"
}2 — Poll until COMPLETED (every 2-5 seconds)
curl https://app.scenetra.com/api/v1/runs/run_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"runId": "run_abc123",
"status": "COMPLETED",
"progress": { "completed": 1, "total": 1 },
"outputs": [
{ "type": "video", "url": "https://images.scenetra.com/..." }
],
"error": null,
"estimatedCredits": 400
}Request fields
| Field | Type | Description | Default |
|---|---|---|---|
| prompt* | string | Describe the video: subject, motion, camera work, and dialogue or sound direction when audio is enabled. | — |
| aspect_ratio | string | Aspect ratio of the generated video.16:9 · 9:16 · 1:1 | 16:9 |
| duration | string | Length of the generated video in seconds (3-15). Billed per second.3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · 11 · 12 · 13 · 14 · 15 | 5 |
| generate_audio | string | Native audio: lip-synced dialogue, ambience and sound effects. Adds about 50% to the per-second price.false · true | false |
| callbackUrl | string (https URL) | Optional. When the run finishes (completed or failed), we POST the final run status to this URL — same shape as the poll response, plus model, params, and chargedCredits. Best-effort; polling remains the source of truth. | |
Unknown fields are rejected with a helpful 400. Media fields take https URLs. There is no provider parameter — every run is routed to the cheapest capable provider automatically.
Kling 3.0 Pro Image to Video API
1 — Start a generation
curl -X POST https://app.scenetra.com/api/v1/generate/kling-v3-pro-i2v \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"Slow push-in, the subject turns to camera and smiles, soft wind in the hair","image_url":"https://example.com/start-frame.jpg","duration":"5"}'Response (202)
{
"runId": "run_abc123",
"status": "PENDING",
"model": "kling-v3-pro-i2v",
"estimatedCredits": 450,
"statusUrl": "/api/v1/runs/run_abc123"
}2 — Poll until COMPLETED (every 2-5 seconds)
curl https://app.scenetra.com/api/v1/runs/run_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"runId": "run_abc123",
"status": "COMPLETED",
"progress": { "completed": 1, "total": 1 },
"outputs": [
{ "type": "video", "url": "https://images.scenetra.com/..." }
],
"error": null,
"estimatedCredits": 450
}Request fields
| Field | Type | Description | Default |
|---|---|---|---|
| prompt* | string | Describe the motion and camera work; the look comes from the input image. | — |
| image_url* | string (https URL) | Starting frame. The video animates from this image. | — |
| duration | string | Length of the generated video in seconds (3-15). Billed per second.3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · 11 · 12 · 13 · 14 · 15 | 5 |
| generate_audio | string | Native audio: lip-synced dialogue, ambience and sound effects. Adds about 50% to the per-second price.false · true | false |
| callbackUrl | string (https URL) | Optional. When the run finishes (completed or failed), we POST the final run status to this URL — same shape as the poll response, plus model, params, and chargedCredits. Best-effort; polling remains the source of truth. | |
Unknown fields are rejected with a helpful 400. Media fields take https URLs. There is no provider parameter — every run is routed to the cheapest capable provider automatically.
Good to know
Billing
Runs bill your account credits at provider cost with 0% markup. The submit response includes the credit estimate; failed generations are refunded automatically. Add ?dryRun=1 to get the estimate without running anything.
Errors
Errors are always { "error": { "code", "message" } } with stable codes: unauthorized, model_not_available, invalid_parameter, insufficient_credits, rate_limited. A failed run is not an HTTP error — poll responses report status: "FAILED" with the reason.
Kling 3.0 Pro API FAQ
Does turning on audio change the price?+
Yes. generate_audio is off by default; turning it on moves the run to a higher price tier at every provider. The submit response always returns the credit estimate for your exact settings, and ?dryRun=1 prices a request without running it.
Is this the official Kling API?+
No. Scenetra routes each call to a provider that serves Kling 3.0 Pro (the same model and output) and bills you in Scenetra credits from the same balance as every other model.
How much does the Kling 3.0 Pro API cost?+
Billed per second of output, in credits from your Scenetra balance at provider cost with no markup. With default settings (5 seconds), a text to video run is estimated at about 400 credits. The submit response returns the estimate for your exact settings, and adding ?dryRun=1 prices a request without running it.
Which provider runs my request?+
The cheapest one that supports your settings, chosen per request. There is no provider parameter: the same Kling 3.0 Pro request is priced across every provider we route to and runs on the lowest quote.
Do failed generations cost credits?+
No. Credits are reserved when you submit and refunded automatically if the run fails. A failed run is not an HTTP error: polling returns status FAILED with the reason.
Do I have to poll, or can I get a webhook?+
Both work. Pass callbackUrl and we POST the final run status to it when the run completes or fails. Delivery is best-effort, so polling GET /api/v1/runs/{runId} remains the source of truth.