KLING AI · VIDEO API

Kling 3.0 API

Build with the Kling AI API: text or frames to video, through BetterToken, a third-party API provider.

From$0.099/s
Kling 3.0 · Standard 720p · Audio off
First top-up: pay $3.00, get $5.00 balance ≈ 50 s of video →
Kling 3.016:9
One key: 4 video models + text & images
Pay as you go, no subscription
Failed generations are not charged
Stripe + USDT
First top-up: pay $3.00, get $5.00 balance

PRICING

Kling API pricing: Standard, Pro & 4K

Output price per second, with audio off or on. 4K costs the same with or without audio.

per output second · USD
Output tierAudio offAudio on
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.

Kling 3.0 only · Standard 720p / Pro 1080p / 4K

Price snapshot · 2026-11-09

Estimate your Kling API cost

Choose an output tier, audio and clip length.

Output tier
Native audio

Estimated monthly cost$49.50
Estimated cost per clip
$0.495
Output seconds / month
500
Get API key →

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

Balance creditYou payDiscountVideo seconds · estimateTop up
$5.00First top-up$3.00$2.00≈ 50 sTop up →
$50.00$48.00$2.00≈ 505 sTop up →
$100.00$95.00$5.00≈ 1,010 sTop up →
$200.00$185.00$15.00≈ 2,020 sTop up →
$500.00$450.00$50.00≈ 5,050 sTop up →

First-top-up and tier offers are separate. Checkout confirms the applicable offer. Available methods are confirmed at checkout.

What can you make with Kling 3.0?

Choose the tier, sound and input for your clip.

Six custom shots in one request

Kling: plan up to six shots, each with its own prompt and duration. Example below: six 2-second shots, 12 seconds total.

kling-3.0 · std · audio off · 12 s · 16:9 · no end frame

Custom shots: a complete request body
Kling 3.016:9
  1. Shot 1 · 2 sMug on a wooden table
  2. Shot 2 · 2 sSteam above the rim
  3. Shot 3 · 2 sSide view and handle
  4. Shot 4 · 2 sClose-up of the glaze
  5. Shot 5 · 2 sCoffee from above
  6. Shot 6 · 2 sMug by the window

Native audio

Set audio.mode=on to request native audio for dialogue, music or sound effects; the result depends on the prompt and model.

Standard, Pro or 4K

Choose 720p Standard, 1080p Pro, or 4K output.

Text or frames to video

Create from text, a first frame, or first-and-last frames.

3–15 seconds

Create 3–15 second videos in landscape, portrait, or square formats. Aspect ratios apply to text-to-video only.

VIDEO MODELS

One API key. Four video models.

Seedance, Kling, MiniMax H3 and WAN, from one balance. Use the same key for text and image models too.

View all video models →

Seedance 2.5

Seedance 2.516:9

For clips up to 30 seconds and 30 reference images.

From · 480p
$0.176 / s
Max. duration
30 s
Top resolution
1080p
Explore API →

Kling 3.0

On this page
Kling 3.016:9

For six custom shots with their own prompts and durations.

From · Standard 720p · Audio off
$0.099 / s
Max. duration
15 s
Top resolution
4K
Explore API →

MiniMax H3

MiniMax H316:9

For 2K reference-led video with native audio.

From · 768p
$0.05 / s
Max. duration
15 s
Top resolution
2K
Explore API →

WAN 3.0

WAN 3.016:9

For reference-led clips up to 30 seconds.

From · 480p
$0.047 / s
Max. duration
30 s
Top resolution
1080p
Explore API →
Shared prompt

English original · generation prompt

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.

ParameterValue & limits
modelkling-3.0
operationtext_to_video / image_to_video
provider_options.kling.modestd = Standard 720p · pro = Pro 1080p · 4k = 4K
audio.modeoff / on
duration.seconds3–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_ratio16:9 / 9:16 / 1:1 for text-to-video only. Omit for frame-based input.
mediaA 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.

View API examples

BETTERTOKEN · KLING 3.0 API

Ready to build with Kling 3.0?

First top-up: pay $3.00, get $5.00 balance