Output price per second, with audio off or on. 4K costs the same with or without audio.
per output second · USD
Output tier
Audio off
Audio on
Standard 720pstd
$0.099 / s
$0.143 / s
Pro 1080ppro
$0.128 / s
$0.192 / s
4K4k
$0.471 / s
$0.471 / s
Billed on actual output seconds. A ~1-second output tolerance is reserved while the task runs; unused funds are released at settlement. Failed generations are not charged.
Estimate = price per second × requested seconds × clips. Actual output may run slightly longer (e.g. 5.04 s for a 5 s request). This is not a reservation cap or final charge.
Draft in Standard with audio off
Use 4K only for the final cut
Turn audio off if you add your own music
Top-up tiers & offers
Kling 3.0 · Standard 720p · Audio off · Estimate at the selected settings
Night city street after rain, seen from a slow forward dolly shot at low height: wet asphalt reflecting colorful lights, light trails from passing cars, soft steam rising from a street grate, light drizzle. Generic modern architecture. No people, no readable text, signs, logos, license plates, flags or recognizable landmarks. Cinematic, realistic.
Same async API: quote → create → poll → download. Switch the model and use its supported parameters.
DEVELOPER QUICKSTART
Get a Kling API key and make your first call
Quote the request, create a task, poll its status, then download the completed video.Keep the same idempotency key when retrying a create request. A task accepted by the API is still processing; download only after completed.These are minimal examples — in production, persist the Idempotency-Key and task ID so you can resume after a restart.
Show the AI agent instructions
Integrate the BetterToken video API in the user's application.
Read BETTERTOKEN_API_KEY only from the environment; never log or send it to analytics.
Base: https://bettertoken.ai/v1
Request JSON (replace the I2V source with your own accessible image):
{
"model": "kling-3.0",
"operation": "text_to_video",
"prompt": "A rainy city street at night, slow forward camera move",
"duration": {
"mode": "fixed",
"seconds": 5
},
"output": {
"format": "mp4",
"aspect_ratio": "16:9"
},
"provider_options": {
"kling": {
"mode": "std"
}
},
"audio": {
"mode": "off"
}
}
H3 and WAN 2.7 generate native audio by default with no on/off switch. When switching model, adapt resolution, operation, aspect ratio, media and audio. Kling uses provider_options.kling.mode, without output.resolution. H3 image_to_video requires adaptive; reference_to_video allows adaptive or a fixed ratio. WAN 2.7 I2V requires a first frame and omits aspect_ratio.
POST /videos/quote with the same JSON for a non-reserving estimate; requires authentication and may probe input media. It is not a public guest API.
BEFORE POST /videos persist an Idempotency-Key and exact body outside the process; load that saved state after a restart. Persist the task ID after acceptance and resume that task. After a timeout/503 or uncertain acceptance, reuse BOTH; never create a replacement task. Handle 409 video_idempotency_conflict / video_acceptance_pending, 402 balance and 422 validation errors.
202 means accepted only; response has root id/status. GET /videos/{id} every 5 seconds: queued, in_progress, completed, failed, canceled. Uncertain acceptance stays in_progress with stage=reconciliation. On 429 honor the full Retry-After seconds or HTTP date. Poll up to 360 times, waiting 5 seconds between requests; network delays and rate-limit backoff can extend the total observation time. Preserve the task ID when stopping; stopping does not cancel or recreate the task.
Only after completed, GET /videos/{id}/content with an authorized owner key. 410 video_artifact_expired is a delivery expiry, not a generation failure. Keep content private.
Inspect billing separately: confirmed failed/canceled generation releases/refunds the original funding source through financial processing; status alone does not prove the refund is committed. Uncertain acceptance and post-generation delivery failures need separate handling. Do not invent a public cancel endpoint.
# Minimal example: persist the Idempotency-Key and task ID in production.
# Requires curl, jq and BETTERTOKEN_API_KEY in your environment.
BASE=https://bettertoken.ai/v1
IDEM="$(uuidgen)"
cat > request.json <<'JSON'
{
"model": "kling-3.0",
"operation": "text_to_video",
"prompt": "A rainy city street at night, slow forward camera move",
"duration": {
"mode": "fixed",
"seconds": 5
},
"output": {
"format": "mp4",
"aspect_ratio": "16:9"
},
"provider_options": {
"kling": {
"mode": "std"
}
},
"audio": {
"mode": "off"
}
}
JSON
curl --fail-with-body "$BASE/videos/quote" \
-H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
-H 'Content-Type: application/json' --data-binary @request.json || exit 1
TASK=$(curl --fail-with-body "$BASE/videos" \
-H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
-H "Idempotency-Key: $IDEM" \
-H 'Content-Type: application/json' --data-binary @request.json) || exit 1
ID=$(printf '%s' "$TASK" | jq -er '.id') || exit 1
# Poll up to 360 times, waiting 5 seconds between requests.
# Network delays can extend the total time.
for attempt in $(seq 1 360); do
TASK=$(curl --fail-with-body "$BASE/videos/$ID" \
-H "Authorization: Bearer $BETTERTOKEN_API_KEY") || exit 1
STATUS=$(printf '%s' "$TASK" | jq -r '.status')
case "$STATUS" in
completed) break ;;
failed|canceled) printf '%s\n' "$TASK"; exit 1 ;;
esac
sleep 5
done
[ "$STATUS" = completed ] || { echo "Resume polling task: $ID"; exit 1; }
curl --fail-with-body "$BASE/videos/$ID/content" \
-H "Authorization: Bearer $BETTERTOKEN_API_KEY" -o video.mp4
Custom shots: a complete request body+
Up to 6 shots; each at least 1 s, each prompt at most 512 characters. Shot durations must sum to the total duration. Omit the top-level prompt when using shots. Cannot be combined with an end frame.
{
"model": "kling-3.0",
"operation": "text_to_video",
"duration": {
"mode": "fixed",
"seconds": 12
},
"output": {
"aspect_ratio": "16:9",
"format": "mp4"
},
"audio": {
"mode": "off"
},
"provider_options": {
"kling": {
"mode": "std"
}
},
"shots": [
{
"prompt": "Wide shot of a ceramic mug on a wooden table in morning light.",
"duration_seconds": 2
},
{
"prompt": "Close-up of steam rising above the rim.",
"duration_seconds": 2
},
{
"prompt": "Side view revealing the curved handle.",
"duration_seconds": 2
},
{
"prompt": "Close-up of the textured ceramic glaze.",
"duration_seconds": 2
},
{
"prompt": "Top view of coffee in the mug.",
"duration_seconds": 2
},
{
"prompt": "Wide closing shot of the mug by a sunlit window.",
"duration_seconds": 2
}
]
}
Kling API parameters & model ID
Use kling-3.0. Output quality is selected by provider_options.kling.mode; do not pass output.resolution.
Parameter
Value & limits
model
kling-3.0
operation
text_to_video / image_to_video
provider_options.kling.mode
std = Standard 720p · pro = Pro 1080p · 4k = 4K
audio.mode
off / on
duration.seconds
3–15 whole seconds; duration.mode = fixed
shots[{prompt,duration_seconds}]
Up to 6; each ≥1 s; total equals duration.seconds; each prompt ≤512 characters; cannot be combined with an end frame.
output.aspect_ratio
16:9 / 9:16 / 1:1 for text-to-video only. Omit for frame-based input.
media
A first frame, or first-and-last frames. Output follows the input image.
FAQ
Kling API questions
Standard 720p starts at $0.099/s with audio off. Pro 1080p starts at $0.128/s, and 4K at $0.471/s. See all six tier and audio rates above. Billing uses actual output seconds.
Sign up or sign in and prepare or reuse an API key in Workspace, then return to this page. Add balance, copy an example and call Kling 3.0 from your own application. This is a BetterToken key.
No. BetterToken is a third-party API provider offering access to Kling 3.0. We are not affiliated with Kling AI and do not issue Kling developer-console keys.
Create 3–15 second videos in landscape, portrait, or square formats. Request whole seconds. The 16:9, 9:16 and 1:1 aspect ratios apply to text-to-video only; frame-based output follows the input image. Yes. Choose 720p Standard, 1080p Pro, or 4K output. Set provider_options.kling.mode to std, pro or 4k. Do not pass output.resolution.
With audio on, Standard is $0.143/s and Pro is $0.192/s. 4K is $0.471/s with audio on or off. Set audio.mode=on to request native audio for dialogue, music or sound effects; the result depends on the prompt and model.
Confirmed generation failures are not charged. After a confirmed failure or cancellation, held funds are released or returned to the original balance or allowance. A failed task alone does not mean a refund has finished. If it is unclear whether a request was accepted, we check it first. Problems downloading a successfully generated video, or an expired file, are handled separately. Check the billing details for your task.
Kling bills actual output seconds. A 5-second request may render about 5.04 seconds. An extra ~1 second is temporarily reserved as an output-length tolerance while the task runs; unused funds are released at settlement. It is not an extra flat fee.