---
title: "Kling 2.6 Motion JSON Prompt — Newcomer Guide"
description: "Beginner-friendly Kling 2.6 Motion JSON prompt guide: every field explained, 3 copy-paste examples, and when to upgrade to Kling 3.0 Motion. 17 credits on AI Content Drop."
canonical: "https://aicontentdrop.com/blog/kling-2-6-motion-json-prompt-guide"
source: "https://aicontentdrop.com/blog/kling-2-6-motion-json-prompt-guide"
---
## What This Guide Does

This guide breaks down every field in a Kling 2.6 Motion JSON prompt — the structured request body you send to Kuaishou's Kling AI API to animate a still image with controlled, repeatable camera and object movement. By the end you'll be able to send your first Kling 2.6 Motion request and understand exactly what each key in the JSON does, even if you have never called an AI video API before.

Kling 2.6 Motion is the budget-friendly sibling of [Kling 3.0 Motion](https://aicontentdrop.com/blog/kling-3-0-motion-json-prompt-guide): same reference-video workflow, same motion-mask and trajectory system, five credits cheaper per generation. If you are new to motion-control video, this is the right place to start — test your prompts here, then upgrade to Kling 3.0 Motion when you're ready to publish. We'll cover the complete request body, a field-by-field breakdown, an allowed values table, three copy-paste examples for different use cases, curl and JavaScript snippets to send the actual request, common errors with fixes, a cost comparison table, and a glossary of every term used. No coding experience required.

## What Is Kling 2.6 Motion?

Kling 2.6 Motion is an image-to-video feature built on Kuaishou's Kling 2.6 model. You supply one reference image and a text prompt, then add motion instructions — mask images that mark which pixels to move, and trajectory coordinates that tell the model where those pixels should travel over the clip. The result is a short animated video where objects and the camera follow the paths you defined, giving you far more control than a plain text-to-video request. It is particularly well-suited for e-commerce product shots (a bottle rotating, a shoe floating, packaging drifting into frame), lifestyle content, and branded social ads where you need the same camera move reproduced reliably across multiple takes. The one thing it cannot do is generate multi-scene narrative content or create video from text alone — for those tasks, a text-to-video model is the right choice. The official model documentation is available on the Kling AI developer portal at [klingai.com/dev](https://docs.qingque.cn/d/home/eZQAtsrntpINKohS3mJ_LiDxc).

Kling 2.6 Motion is available via the official Kling AI API at `api.klingai.com`. On AI Content Drop, each generation costs **17 credits** — five fewer than Kling 3.0 Motion's 22 credits. Credits are deducted only after your video generates successfully, so a failed generation never charges your account (post-deduct billing). To see how the two models compare side by side and learn when to upgrade, read the [Kling 3.0 Motion JSON prompt guide](https://aicontentdrop.com/blog/kling-3-0-motion-json-prompt-guide). For copy-paste ad scripts designed for Kling 2.6 image generations, see the [winning Kling 2.6 ad scripts post](https://aicontentdrop.com/blog/winning-kling-2-6-image-ad-scripts-copy-paste).

## The Complete JSON Prompt

Below is a full Kling 2.6 Motion API request body you can copy, paste, and send right now. **JSON** stands for JavaScript Object Notation — it is a plain-text format APIs use to accept structured requests. Each line is a key–value pair; together they tell Kling 2.6 Motion exactly what video to generate from your reference image.

```
{
  "model_name": "kling-v2",
  "image": "https://your-cdn.com/product-shot.jpg",
  "prompt": "The skincare bottle rotates slowly clockwise on a white marble surface, gentle camera push-in from medium to close-up, soft even studio lighting with a clean white background, luxury beauty advertisement",
  "negative_prompt": "blurry, shaky camera, watermark, text overlay, duplicate object, distorted label",
  "cfg_scale": 0.5,
  "mode": "std",
  "duration": "5",
  "aspect_ratio": "1:1",
  "dynamic_masks": [
    {
      "mask": "https://your-cdn.com/bottle-silhouette-mask.png",
      "trajectories": [
        { "x": 0, "y": 0 },
        { "x": 10, "y": 0 },
        { "x": 20, "y": 0 },
        { "x": 30, "y": 0 },
        { "x": 40, "y": 0 }
      ]
    }
  ]
}
```

At a glance: `model_name` selects the Kling 2.6 model version; `image` is the publicly accessible URL of your reference photo; `prompt` describes the motion, camera behaviour, and visual style you want; `cfg_scale` controls how strictly the model follows your prompt; and `dynamic_masks` is the motion-control layer where you specify which part of the image moves and where it travels. Confirm the exact model identifier string in the latest Kling AI developer docs, as Kuaishou occasionally updates version naming between releases.

## Field-by-Field Breakdown

Every field is explained below. For each one you'll see its data type, whether it is required, its default value if you leave it out, the allowed values or range, a plain-English explanation of what it actually controls, and a good-versus-bad example showing the difference in practice.

### model_name

**Type:** string (enum) | **Required:** yes

Tells the Kling AI API which model version to run. For Kling 2.6 Motion, consult the latest Kling developer docs for the exact string — it follows the pattern `"kling-v2"` or a similar versioned identifier. Pinning an explicit version string in your production code means a future model release on Kuaishou's side will not silently change your outputs.

**Good:** `"kling-v2"` — explicit, reproducible.
**Mistake:** Omitting the field entirely. The API requires it; leaving it out returns a missing-field error before generation even starts.

### image

**Type:** string (URL) | **Required:** yes

A publicly accessible HTTPS URL pointing to the reference image you want Kling to animate. This is the starting frame the model brings to life. Accepted formats are JPEG and PNG. The URL must be reachable by Kuaishou's servers without any authentication — a local file path on your computer will not work. If you are testing locally, upload your image to any public cloud storage bucket first and use that URL.

**Good:** `"https://your-cdn.com/product-shot.jpg"` — public HTTPS, permanent link.
**Mistake:** A signed URL that expires in 5 minutes. If the generation takes longer than that — which it often does for longer clips — the API can't fetch the image and the job fails without charging you.

### prompt

**Type:** string | **Required:** yes

A plain-English description of the motion, camera behaviour, and visual style you want. The model reads this alongside your `dynamic_masks` trajectory coordinates. A strong prompt covers three things: what moves (the subject and direction), how the camera behaves (push-in, pull-back, orbit, static), and the visual feel (luxury product, UGC, cinematic, editorial). Aim for 20 to 150 words. Below that range you leave the model guessing; above it you risk conflicting instructions.

**Good:** "The bottle rotates slowly clockwise while the camera gently pushes in from medium to close-up, soft studio lighting, clean white background, premium beauty ad aesthetic"
**Weak:** "Move the bottle" — no direction, no camera, no style. The model will guess all three and the output will be inconsistent across runs.

### negative_prompt

**Type:** string | **Required:** no |  **Default:** `""` (empty string)

A description of things you do *not* want in the output. Common values for motion-control work: `"blurry, shaky camera, watermark, duplicate object, distorted label, text overlay"`. Keep it under 80 words and make it specific — vague negatives like "bad quality" have no measurable effect because the model has no reference point for what "bad" means for your subject.

**Good:** `"blurry, shaky, duplicate objects, watermark, text on screen"`
**Mistake:** `"no ugly things"` — too abstract to influence the generation in a predictable direction.

### cfg_scale

**Type:** number (float) | **Required:** no |  **Default:** `0.5` |  **Range:** 0.0 – 1.0

**cfg_scale** stands for classifier-free guidance scale. It controls how strictly the model follows your text prompt versus exercising its own creative judgement. A value of `0.5` is a balanced middle ground — the model honours your description without becoming so literal that the motion looks mechanical. Values above 0.7 make the model stick closely to every word in your prompt but can produce stiff, unnatural-looking movement. Values below 0.3 give the model more freedom, which can look fluid but may drift away from what you described.

**Good:** `0.5` for most product ad work. `0.4` for human-subject UGC where natural gesture matters more than precision.
**Mistake:** Setting `1.0` for every job — over-guidance frequently produces jerky, robot-like motion in motion-control outputs.

### mode

**Type:** string (enum) | **Required:** no |  **Default:** `"std"` |  **Allowed values:** `"std"`, `"pro"`

Selects the quality-versus-speed tier. `"std"` (standard) is faster and lighter on your API quota. `"pro"` produces higher-fidelity output — sharper texture on product labels, more consistent object edges, smoother motion paths — but takes longer. A practical workflow: use `"std"` while you iterate on prompt wording and mask coordinates, then switch to `"pro"` for the two or three winning variants you actually plan to publish. Consult the latest Kling docs to confirm current mode availability for v2.6.

**Good:** `"std"` to test 8 prompt variants; then `"pro"` for the 2 that pass your creative review.
**Mistake:** Running every exploratory iteration in `"pro"` — you pay generation time and quota on prompts you're going to discard.

### duration

**Type:** string (enum) | **Required:** no |  **Default:** `"5"` |  **Allowed values:** `"5"`, `"10"`

How long the generated video clip should be, measured in seconds. Important: this field takes a *string* (`"5"`), not a number. Five seconds is enough for most single-product ad shots — a full rotation, a push-in, or a float into frame. Use `"10"` when you need slower, more cinematic motion, or when you want to show multiple angles in one clip.

**Good:** `"5"` for a TikTok hook; `"10"` for a YouTube pre-roll with a slow cinematic reveal.
**Mistake:** Sending the bare integer `5` — the API expects a string and may reject or silently misinterpret a number in that field.

### aspect_ratio

**Type:** string (enum) | **Required:** no |  **Default:** `"16:9"` |  **Allowed values:** see reference table below

The width-to-height proportion of the output video. Match this to your reference image's composition and your intended distribution platform. `"9:16"` is vertical — the right choice for TikTok, Instagram Reels, and YouTube Shorts. `"16:9"` is landscape — standard for YouTube, display ads, and desktop web. `"1:1"` is square — suits Instagram feed and some Facebook placements. Note that `"3:4"` is not supported on the Kling platform through AI Content Drop; use `"9:16"` and crop in your editor if needed.

**Good:** `"1:1"` when your reference image is a square product photo with no critical content at the edges.
**Mistake:** Sending a ratio that does not match your image composition — the model pads or crops the reference, and any motion trajectories you drew for the original frame will now point to the wrong pixels in the output.

### dynamic_masks

**Type:** array of objects | **Required:** no (but this is the defining feature of Kling Motion)

This is the heart of the motion-control system. Each object in the array defines one independently moving region of your image. It has two sub-fields:

- mask
  
  — a URL pointing to a PNG image the same dimensions as your reference photo. White pixels in the mask mark the region to move; black pixels are treated as background. Think of it as a cutout stencil.
- trajectories
  
  — an array of
  
  { "x": number, "y": number }
  
  coordinate objects. Each point describes how far the masked region should have moved from its starting position at that moment in the clip, measured in pixels. A five-point trajectory for a five-second clip means one keyframe per second.

You can include multiple mask objects to animate multiple elements independently — for example, a product in one mask and a prop in another. If you omit `dynamic_masks` entirely, the generation falls back to standard image-to-video behaviour without controlled motion paths.

**Good:** One mask per distinct moving element, with 4–8 trajectory points spaced evenly across the clip duration.
**Mistake:** Twenty closely spaced points all with identical coordinates — the model interprets dense identical points as "stay still" rather than smooth constant movement.

### static_mask

**Type:** string (URL) | **Required:** no |  **Default:** none

An optional PNG mask URL where white pixels mark regions that must *not* move at all. This is useful when your reference image contains a static element — a brand logo in a corner, a background texture, a locked-off text card — that should stay perfectly still while the subject animates in the foreground. Confirm this field's exact behaviour for Kling 2.6 in the latest developer docs, as mask handling can vary between model versions.

**Good:** Pass a static mask covering your brand logo when the product in the foreground is rotating.
**Mistake:** Using the same PNG image for both `dynamic_masks` and `static_mask` — the two fields describe opposite intents and will produce conflicting instructions for the same pixels.

## Allowed Values Reference Table

Bookmark this table. When you get an "invalid parameter" error, come here first before re-reading your prompt.

| Field | Allowed values | Notes |
| --- | --- | --- |
| `model_name` | `"kling-v2"` (verify in latest docs) | Required. Pin explicitly to avoid surprise upgrades. |
| `mode` | `"std"`, `"pro"` | Default `"std"`. Pro is slower, higher fidelity. |
| `duration` | `"5"`, `"10"` | Seconds, sent as a string. Default `"5"`. |
| `aspect_ratio` | `"16:9"`, `"9:16"`, `"1:1"`, `"4:3"`, `"21:9"`, `"9:21"` | Default `"16:9"`. Confirm full list in latest Kling docs. 3:4 not supported on AI Content Drop. |
| `cfg_scale` | 0.0 – 1.0 (float) | Default 0.5. Higher = follows prompt more strictly. |
| `prompt` | Any string, up to ~2,500 chars | Required. Sweet spot 20–150 words. |
| `negative_prompt` | Any string | Optional. Keep under 80 words, specific terms only. |
| `dynamic_masks[n].mask` | Public HTTPS URL to a PNG | White pixels = region to move. Same dimensions as reference image. |
| `dynamic_masks[n].trajectories` | Array of `{ x: number, y: number }` | Pixel offsets from start position. Recommend 4–8 points per 5 seconds. |

## 3 Working Copy-Paste Examples

### Example 1: E-commerce — Rotating Supplement Jar

```
{
  "model_name": "kling-v2",
  "image": "https://your-cdn.com/supplement-jar-white-bg.jpg",
  "prompt": "The supplement jar rotates slowly clockwise on a clean white surface, camera holds steady in a medium close-up, soft diffused studio lighting from above, crisp label detail, health supplement e-commerce advertisement",
  "negative_prompt": "blurry, shaky, reflections too harsh, watermark, text overlay, duplicate jar, warped label",
  "cfg_scale": 0.5,
  "mode": "pro",
  "duration": "5",
  "aspect_ratio": "1:1",
  "dynamic_masks": [
    {
      "mask": "https://your-cdn.com/jar-silhouette-mask.png",
      "trajectories": [
        { "x": 0, "y": 0 },
        { "x": 8, "y": 0 },
        { "x": 16, "y": 0 },
        { "x": 24, "y": 0 },
        { "x": 32, "y": 0 }
      ]
    }
  ]
}
```

The square ratio fits product photography that was shot in a 1:1 frame and works well for Instagram feed and Amazon listing thumbnails. Using `pro` mode ensures the printed label text on the jar stays sharp through the rotation. The trajectory moves the jar mask steadily to the right — combined with the rotation instruction in the prompt, the model interprets this as the object turning in place. Expect a clean, ad-ready loop suitable for Meta campaigns. This example is a strong starting point for the [product motion-control workflow](https://aicontentdrop.com/blog/kling-3-0-motion-control-product-ads) described in the Kling 3.0 Motion ads guide — the same trajectory pattern works in Kling 2.6 at 17 credits instead of 22.

### Example 2: Portrait — UGC Founder Testimonial

```
{
  "model_name": "kling-v2",
  "image": "https://your-cdn.com/founder-portrait-natural-light.jpg",
  "prompt": "The founder speaks warmly to camera with natural hand gestures, slow subtle camera push-in from medium to medium close-up, soft natural window light from the left, warm and authentic UGC testimonial style",
  "negative_prompt": "distorted face, extra fingers, blurry, stiff robotic motion, watermark, unnatural skin",
  "cfg_scale": 0.42,
  "mode": "std",
  "duration": "5",
  "aspect_ratio": "9:16",
  "dynamic_masks": [
    {
      "mask": "https://your-cdn.com/person-upper-body-mask.png",
      "trajectories": [
        { "x": 0, "y": 0 },
        { "x": -3, "y": -2 },
        { "x": -6, "y": -4 },
        { "x": -9, "y": -6 },
        { "x": -12, "y": -8 }
      ]
    }
  ]
}
```

Vertical 9:16 ratio places the speaker front and centre for TikTok and Reels. Lowering`cfg_scale` to 0.42 gives the model slightly more latitude on natural gesture variation — human subjects look more natural when the model isn't rigidly over-instructed. The trajectory nudges the person mask slightly upward and to the left, reinforcing the push-in described in the prompt without making the motion obvious. Using `std` mode is appropriate here because the intentional imperfection of UGC-style footage means hyper-sharp rendering would look out of place. Running this at 17 credits versus Kling 3.0 Motion's 22 credits lets you test more angles before committing to a final.

### Example 3: Cinematic — Dark Floating Sneaker Hero Shot

```
{
  "model_name": "kling-v2",
  "image": "https://your-cdn.com/sneaker-dark-studio.jpg",
  "prompt": "The sneaker floats slowly upward against a deep black background with faint dust particles catching the light, very slow camera pull-back from close-up to medium shot, dramatic rim lighting on the sole, cinematic luxury streetwear advertisement",
  "negative_prompt": "motion blur on the logo, background clutter, lens flare, watermark, blurry edges",
  "cfg_scale": 0.58,
  "mode": "pro",
  "duration": "10",
  "aspect_ratio": "16:9",
  "dynamic_masks": [
    {
      "mask": "https://your-cdn.com/sneaker-mask.png",
      "trajectories": [
        { "x": 0, "y": 0 },
        { "x": 0, "y": -8 },
        { "x": 0, "y": -18 },
        { "x": 0, "y": -28 },
        { "x": 0, "y": -38 },
        { "x": 0, "y": -48 }
      ]
    }
  ],
  "static_mask": "https://your-cdn.com/brand-corner-logo-mask.png"
}
```

Ten seconds lets the floating motion complete at a pace that reads as elegant rather than rushed — at five seconds the upward drift would feel abrupt. Trajectory Y values decrease (go negative) because the Y axis points downward in screen coordinates, so moving "up" means subtracting from Y. A `static_mask` locks the brand logo in the corner so it doesn't drift along with the sneaker. Landscape 16:9 suits the wide, cinematic composition of premium display ads and YouTube pre-roll. At 17 credits this is a meaningful saving over running the same brief in Kling 3.0 Motion — useful for rapid prototyping before you switch to the [Kling 3.0 Motion upgrade path](https://aicontentdrop.com/blog/kling-3-0-motion-json-prompt-guide) for your final publish-ready export.

## How to Send the Request

An **API endpoint** is a URL your code sends a request to — think of it as the address where the Kling AI service lives and listens. The official Kling AI API endpoint for image-to-video (which is the foundation of the Motion feature) is `https://api.klingai.com/v1/videos/image2video`. You send an HTTP POST request — a type of web message that carries a body — with your JSON object to that URL. Authentication uses a **JWT token** (JSON Web Token): a short signed string you generate from your Kling API key and API secret. Both are available from the Kuaishou developer dashboard. The exact JWT signing steps — which algorithm to use, which headers to include — are documented at [klingai.com/dev](https://docs.qingque.cn/d/home/eZQAtsrntpINKohS3mJ_LiDxc); consult the latest docs there for the current signing format.

Here is a curl example (paste this into your terminal):

```
curl -X POST https://api.klingai.com/v1/videos/image2video \
  -H "Authorization: Bearer YOUR_KLING_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "kling-v2",
    "image": "https://your-cdn.com/product-shot.jpg",
    "prompt": "The bottle rotates slowly, soft studio lighting, luxury product advertisement",
    "cfg_scale": 0.5,
    "mode": "std",
    "duration": "5",
    "aspect_ratio": "1:1"
  }'
```

Here is the same request in JavaScript (works in Node.js or in a browser):

```
const response = await fetch("https://api.klingai.com/v1/videos/image2video", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_KLING_JWT_TOKEN",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model_name: "kling-v2",
    image: "https://your-cdn.com/product-shot.jpg",
    prompt: "The bottle rotates slowly, soft studio lighting, luxury product advertisement",
    cfg_scale: 0.5,
    mode: "std",
    duration: "5",
    aspect_ratio: "1:1"
  })
});
const data = await response.json();
console.log(data.data?.task_id); // save this — you need it for polling
```

Or skip the API key and JWT setup entirely. Paste your prompt into the [Chat-to-Ads Studio](https://aicontentdrop.com/) or the [video generation page](https://aicontentdrop.com/best-ai-video-generator) and we'll handle the request for you — no API key required.

## What the Response Looks Like

Kling 2.6 Motion is an **async** model — it does not return your finished video immediately after you POST. Instead, it returns a task ID right away, and you then **poll** a separate status endpoint every few seconds until the task is complete. Polling means repeatedly asking "is the video ready yet?" by making GET requests to the status URL.

Initial response right after you POST your request:

```
{
  "code": 0,
  "message": "success",
  "request_id": "req_abc123xyz",
  "data": {
    "task_id": "task_9b2c4d7e1f3a",
    "task_status": "submitted"
  }
}
```

Copy the `task_id` value. Then poll the status endpoint — it follows the pattern `GET https://api.klingai.com/v1/videos/image2video/{task_id}`. Consult the latest Kling developer docs to confirm the exact path for your model version.

When the video finishes generating, the polling response looks like this:

```
{
  "code": 0,
  "message": "success",
  "request_id": "req_abc123xyz",
  "data": {
    "task_id": "task_9b2c4d7e1f3a",
    "task_status": "succeed",
    "task_result": {
      "videos": [
        {
          "id": "vid_001",
          "url": "https://cdn.klingai.com/results/task_9b2c4d7e1f3a/output.mp4",
          "duration": "5"
        }
      ]
    }
  }
}
```

The `task_status` field moves through: `submitted` → `processing` → `succeed` (or `failed` if something went wrong). When the status is `succeed`, the `task_result.videos[0].url` field contains the direct download link for your video file. Most Kling 2.6 Motion generations complete in 60–120 seconds. Poll no faster than every 5 seconds to avoid hitting rate limits.

## Common Errors and Fixes

- Error:
  
  invalid_aspect_ratio
  
  or
  
  "aspect_ratio not supported"
  
  Meaning:
  
  You passed a ratio the API does not accept for this model version — for example
  
  "4:5"
  
  or
  
  "3:4"
  
  .
  
  Fix:
  
  Use a ratio from the reference table above. For portrait ad placements that require 4:5, generate at
  
  "9:16"
  
  and crop the top and bottom in your video editor afterward.
- Error:
  
  401 Unauthorized
  
  Meaning:
  
  Your JWT token is missing, has expired, or was signed with the wrong key or algorithm.
  
  Fix:
  
  Regenerate a fresh JWT from your Kling API key and secret following the signing guide in the official developer docs. JWTs are time-limited — generate a new one per request, or cache with a TTL shorter than the token's expiry window.
- Error:
  
  image_fetch_failed
  
  or a 4xx error on the image URL
  
  Meaning:
  
  Kuaishou's servers could not download your reference image at the URL you provided.
  
  Fix:
  
  Make sure the image URL is a permanent public HTTPS link with no login required. Test by opening the URL in an incognito browser window — if you get a login prompt, the API will fail too.
- Error:
  
  prompt_too_long
  
  or
  
  422 Unprocessable Entity
  
  with a prompt length message
  
  Meaning:
  
  Your prompt or negative prompt exceeds the character limit.
  
  Fix:
  
  Trim your prompt. Focus on one motion, one camera behaviour, and one style phrase. Additional description beyond that adds noise without improving the output.
- Error:
  
  content_policy_violation
  
  Meaning:
  
  Your prompt triggered Kuaishou's safety filter — usually a reference to a real named individual, graphic violence, or explicit content.
  
  Fix:
  
  Replace specific names with descriptions ("a tech founder" instead of a person's real name). Remove graphic or violent language from both the positive and negative prompt fields.
- Error:
  
  429 Too Many Requests
  
  Meaning:
  
  You have hit the API rate limit, or your credit balance is zero.
  
  Fix:
  
  Wait before retrying. If credits are the issue, top up your account. On AI Content Drop, each Kling 2.6 Motion generation costs
  
  17 credits
  
  and is charged only on success.
- Error:
  
  task_status: "failed"
  
  in the polling response
  
  Meaning:
  
  The model started but could not complete the generation — usually a transient server-side issue.
  
  Fix:
  
  Retry the same request with a slightly different
  
  cfg_scale
  
  (try 0.4 or 0.6). If it fails three times, check the Kling API status page. You are not charged for failed generations on AI Content Drop.

## Kling 2.6 Motion vs Alternatives — When to Use Which

Not every video job needs motion control, and not every motion-control job needs the newest model. Browse the full model catalog on the [model marketplace](https://aicontentdrop.com/marketplace).

| Use this if… | Model | Credits |
| --- | --- | --- |
| You have a reference image and want controlled, repeatable motion on a budget — iterating on prompt wording and mask coordinates, or producing high-volume ad variants where cost per generation matters. Same motion-control API as Kling 3.0 Motion, five credits cheaper per run. | Kling 2.6 Motion (this guide) | 17 |
| You are ready to publish and want the highest-fidelity motion output from a reference image — sharper textures, more consistent object edges, smoother paths. The natural upgrade from Kling 2.6 Motion. Full breakdown in the [Kling 3.0 Motion JSON guide](https://aicontentdrop.com/blog/kling-3-0-motion-json-prompt-guide). | Kling 3.0 Motion | 22 |
| You do not have a reference image and want to generate video from a text description alone — lifestyle scenes, talking heads, narrative content — at a cost similar to Kling 2.6 Motion. | Kling 2.6 | 17 |

## Cost Math for Newcomers

Here is a real budget example so you know what to expect before you start generating.

Say you want to produce **10 motion-controlled product ad variants** for a campaign launch — different camera angles, different mask trajectories, different prompts to find the winner. Each Kling 2.6 Motion generation costs **17 credits**. Ten variants = 170 credits total.

On the Starter plan ($19 per month, 150 credits), that single 10-variant batch would use up your full month's allocation plus require a 20-credit top-up — or you could run 8 variants within the plan and add a small credit purchase for the final two. On the Professional plan ($49 per month, 450 credits), you can run roughly 26 full 10-variant campaigns per month with credits to spare. Compare that to running the same batch in Kling 3.0 Motion at 22 credits each: 10 variants would cost 220 credits, which saves you 50 credits per campaign when you use Kling 2.6 Motion instead — a meaningful difference when you're testing at volume.

Credits are deducted only after a successful generation (post-deduct billing). Failed generations do not charge your account, so you can retry without worrying about wasted spend. A practical workflow: run your first 5 variants in `std` mode to find the best prompt and trajectory combination, then run the top 2 or 3 in `pro` mode before you decide whether to upgrade to the [Kling 3.0 Motion](https://aicontentdrop.com/blog/kling-3-0-motion-json-prompt-guide) tier for the final creative.

## Glossary

**Prompt**

The text description you write to tell the AI model what motion and visual style to generate. Goes in the `prompt` field of your JSON request body.

**JSON (JavaScript Object Notation)**

A plain-text format for sending structured data to APIs. Uses curly braces `{}`, key–value pairs separated by colons, and commas between pairs. Every request body in this guide is a JSON object.

**API request**

A message your code sends to a remote service — like the Kling AI API — asking it to perform an action. It includes a URL (the endpoint), a method (POST to submit a job, GET to check status), and usually a JSON body with your parameters.

**Endpoint**

The specific URL your POST request targets. For Kling image-to-video the endpoint is `https://api.klingai.com/v1/videos/image2video`.

**JWT (JSON Web Token)**

A short signed string that proves your identity to the Kling API. You generate it from your API key and API secret using Kuaishou's signing algorithm, then pass it in the `Authorization` header of every request.

**task_id**

A unique identifier returned when you submit a generation job. You use it to poll the status endpoint and eventually retrieve the URL of your finished video.

**Polling**

The process of repeatedly asking the API "is the video done yet?" by making GET requests to the status endpoint every few seconds until `task_status` changes to `succeed`.

**dynamic_masks**

The motion-control field in a Kling Motion request. You supply a mask image (which pixels to animate) and trajectory coordinates (where those pixels should travel over the clip duration).

**trajectories**

The array of `{ x, y }` pixel-offset keyframes inside each mask object. They define the path the masked region travels from its starting position across the full clip.

**cfg_scale**

Classifier-free guidance scale — a number from 0 to 1 that controls how strictly the model follows your text prompt. Higher means more literal adherence; lower means more creative freedom and more natural-feeling motion.

## FAQ

### Can I just use the chat instead of writing JSON?

Yes. The [Chat-to-Ads Studio](https://aicontentdrop.com/) lets you describe your video in plain English and handles all the JSON formatting, mask generation, and API calls for you. Writing raw JSON gives you exact control over trajectory pixel coordinates, mask boundaries, and every parameter in the request — but for most newcomers, starting with the chat interface is faster and far less error-prone. Try the chat first, then come back here when you want to fine-tune a specific trajectory or cfg_scale value.

### What if I get a 401 error?

A 401 means your JWT token is missing, has expired, or was signed with the wrong algorithm or key. Regenerate a fresh JWT from your Kling developer dashboard credentials following the signing guide in the official Kling docs. Tokens are time-limited — treat them as short-lived credentials and generate a new one for each request session, or cache them with a TTL shorter than the stated expiry window.

### How do I get an aspect ratio that is not in the list?

You cannot — Kling generates only at the ratios listed in the reference table above. If you need 4:5 for an Instagram portrait ad, generate at `"9:16"` and crop the top and bottom in a video editor afterward. Most tools let you do this in under a minute with no quality loss.

### Does Kling 2.6 Motion require a reference image?

Yes — Motion is an image-to-video feature and requires a reference image to animate. If you want to generate video from a text description alone, use the standard Kling 2.6 text-to-video mode on the [video generation page](https://aicontentdrop.com/best-ai-video-generator). Both cost 17 credits per generation on AI Content Drop. When your motion-control work is ready for a quality upgrade, the [Kling 3.0 Motion guide](https://aicontentdrop.com/blog/kling-3-0-motion-json-prompt-guide) uses an identical request structure — same fields, same trajectory system — at 22 credits per generation.