TL;DR: This guide shows the asynchronous Kling V3 workflow, request structure, polling, input checks, and cost controls. Kling's current video documentation exposes 720p and 1080p modes; do not confuse that with the 4K capability marketed for Kling Image 3.0. Confirm the price, duration, audio setting, model ID, and availability in the live LinkModel catalog before sending a job.
What Kling V3 Brings to the Table
Kling V3 is a video-generation model exposed through supported provider and gateway APIs. Capabilities can differ by API surface and model version, so treat the active model documentation—not a third-party feature table—as the implementation contract.
The standout features that matter for production use:
- multi-shot or storyboard controls where documented;
- reference-guided consistency across shots;
- optional audio where supported by the selected endpoint;
- resolution, duration, and aspect-ratio controls exposed for the active model ID.
Access it through the LinkModel model page when the catalog marks it available. Confirm every request field in the LinkModel documentation before deployment.
Pricing
The live request price can depend on model version, resolution, duration, audio, and provider. Preserve those dimensions beside every quote.
| Field | Value to record |
|---|---|
| Model | exact API model ID |
| Output | duration, resolution, aspect ratio, audio |
| Billing | displayed price and billing unit |
| Source | exact model/pricing page and lookup date |
| Effective cost | total attempts divided by accepted clips |
The LinkModel model page currently starts at approximately $0.061 for a 720p request without audio, but that is not a universal Kling V3 price. Recalculate from the selected duration, resolution, audio setting, and rate shown at request time.
How It Compares
| Kling V3 | Seedance 2.0 | Sora 2 | Hailuo 2.3 | |
|---|---|---|---|---|
| Documented video resolution | 720p / 1080p | up to 1080p | up to 1080p | up to 1080p |
| Multi-shot | Supported | Supported | Verify current endpoint | Verify current endpoint |
| Native audio | Supported | Supported | Supported | Verify current endpoint |
| Reference controls | Subject and scene references | Image, video, and audio references | Verify current endpoint | Image-to-video support |
| Starting price | Verify live configuration | Verify live configuration | Verify live configuration | Verify live configuration |
Use this table as a test checklist, not an evergreen winner declaration. Verify every row against the active model pages, then compare the same prompts and output settings.
Quick Start
Video generation on LinkModel is async: POST /v1/videos/generations creates a task and returns a task_id; then GET /v1/videos/generations/{task_id} polls until the status flips to "Success" and a file_url is ready.
curl
# Step 1: create the task
curl -X POST https://api.linkmodel.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3",
"prompt": "A golden retriever running through autumn leaves, slow motion, cinematic lighting",
"resolution": "1080P",
"duration": 10,
"size": "16x9",
"extends": {
"audio": true,
"cfg_scale": 0.7
}
}'
# → { "code": 0, "data": { "task_id": "abc123" }, ... }
# Step 2: poll until status = "Success"
curl "https://api.linkmodel.ai/v1/videos/generations/abc123" \
-H "Authorization: Bearer YOUR_API_KEY"
# → { "code": 0, "data": { "task_id": "abc123", "status": "Success", "file_url": "https://.../out.mp4" }, ... }Python (end-to-end)
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://api.linkmodel.ai/v1/videos/generations"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
create = requests.post(
BASE,
headers=HEADERS,
json={
"model": "kling-v3",
"prompt": (
"A golden retriever running through autumn leaves, "
"slow motion, cinematic lighting"
),
"resolution": "1080P",
"duration": 10,
"size": "16x9",
"extends": {"audio": True, "cfg_scale": 0.7},
},
).json()
if create["code"] != 0:
raise RuntimeError(f"create failed: {create['msg']}")
task_id = create["data"]["task_id"]
while True:
time.sleep(3)
poll = requests.get(
f"{BASE}/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
).json()
status = poll["data"]["status"]
if status == "Success":
video_url = poll["data"]["file_url"]
print(video_url)
break
if status == "Failed":
raise RuntimeError(f"generation failed: {poll['msg']}")Values of status are "Processing", "Success", or "Failed". Every response uses the standard envelope { code, data, msg, request_id }.
Image-to-Video
Seed generation from a starting frame by adding a first_frame_image URL to the create call. The poll flow is identical:
curl -X POST https://api.linkmodel.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3",
"prompt": "Camera slowly orbits the product, studio lighting, white background",
"first_frame_image": "https://your-cdn.com/product.jpg",
"resolution": "1080P",
"duration": 8,
"size": "16x9"
}'Parameter Reference
| Parameter | Type | Options | Default |
|---|---|---|---|
model | string | kling-v3 | — |
prompt | string | — | — |
first_frame_image | URL | — | null |
last_frame_image | URL | — | null |
resolution | string | 720P, 1080P | 720P |
duration | int | 3–15 | 5 |
size | string | 16x9, 1x1, 9x16 | 16x9 |
extends.audio | bool | — | false |
extends.cfg_scale | float | 0–1 | 0.5 |
extends.negative_prompt | string | — | null |
Full API documentation at docs.linkmodel.ai.
Production Patterns
E-commerce batch generation: Loop product images through image-to-video with templated prompts. Forecast from the exact duration, resolution, and audio configuration rather than multiplying a starting price across unlike jobs.
Social media pipeline: Generate 9:16 vertical content for TikTok/Reels. Pair with GPT Image 2 for thumbnail generation.
Multi-shot narratives: Use documented multi-shot controls and consistent subject references for brand stories. Validate continuity across cuts before scaling the workflow.
Cost at Scale
Export the returned charge for each completed job and group it by duration, resolution, audio mode, and acceptance result. The useful production metric is total generation spend ÷ accepted seconds; a starting per-call price is not enough to forecast a mixed workload.
Next Steps
- Try Kling V3 in the Playground — no code needed
- Read the Seedance 2.0 prompting playbook for cinematic techniques that also apply to Kling
- Check all video models for alternatives
- Sign up — free $1 credit on signup
Try Kling V3 with trial credit
Use the credit shown in your account to validate Kling V3 on representative prompts. The number of generations depends on the live configuration price and retry rate.
Make the Video Job Idempotent
Video generation is asynchronous and comparatively expensive. Assign an idempotency key in your application, persist the provider task ID, and separate submission errors from polling errors. If polling times out, check the existing task again; do not immediately submit a duplicate.
Use bounded exponential backoff for status checks and stop after a maximum elapsed time. Store model ID, request parameters, returned cost, timestamps, and final asset metadata for support and reconciliation.
Preflight Inputs Before Spending
- Validate image URL accessibility and MIME type.
- Enforce supported duration, aspect ratio, and resolution.
- Reject empty or excessively long prompts.
- Confirm user rights and consent for reference people and voices.
- Set a per-job dollar ceiling and a maximum retry count.
Evaluate Cost at Accepted-Clip Level
For 1,000 requested clips at $0.20 each, an 80% approval rate means about 1,250 attempts, or $250 in raw generation spend. At a 95% approval rate, about 1,053 attempts cost $210.60. The list price did not change; the workflow did.
Track acceptance by prompt class so you can route drafts, product motion, dialogue, and hero footage to the model or settings that finish with the fewest retries.

