> ## Documentation Index
> Fetch the complete documentation index at: https://docs.routerbase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Kling v3.0 Motion Control

> Drive a subject image's motion from either a still or a reference video using Kuaishou Kling 3.0.

|              |                                         |
| ------------ | --------------------------------------- |
| **Model ID** | `kuaishou/kling-v3-motion-control`      |
| **Family**   | `kling-v3-novita`                       |
| **Task**     | `motion-control`                        |
| **Modality** | Video                                   |
| **Upstream** | Kuaishou Kling 3.0 (Pro motion control) |

<Note>
  **`character_orientation` is required and determines the output
  length.**

  * `image` — output is **fixed at 5s** regardless of `duration`.
  * `video` — output **matches the reference video's length**
    (3–30s). The RouterBase playground probes the reference clip and
    prefills `duration`; direct API callers should send `duration`
    matching what they want billed.

  Billing scales linearly with output length at \*\*$0.160/s**
      (RouterBase) / $0.168/s (list).
</Note>

## Endpoint

```http theme={null}
POST https://routerbase.com/v1/videos/generations
```

Async — returns `{id, status: "pending"}`; poll
`GET /v1/videos/generations/{id}` until `success` or `failed`.

## Parameters

<ParamField body="character_orientation" type="&#x22;image&#x22; | &#x22;video&#x22;" required default="&#x22;image&#x22;">
  Drives mode selection.

  * `image`: 5s fixed-length output.
  * `video`: output length tracks the reference video (3–30s).
</ParamField>

<ParamField body="image_urls" type="string[]" required>
  Exactly one subject-image URL (HTTPS, PNG / JPEG) — the character to
  animate.
</ParamField>

<ParamField body="video_urls" type="string[]" required>
  Exactly one reference-video URL (HTTPS, MP4) supplying the motion.
</ParamField>

<ParamField body="prompt" type="string">
  Optional text prompt to bias the generation. Max 2500 characters.
</ParamField>

<ParamField body="duration" type="integer" default="5">
  Length of the generated clip in seconds. Range `[3, 30]`. In `image`
  mode this is ignored (output is fixed 5s). In `video` mode this
  should match the reference video's length — used for billing.
</ParamField>

<ParamField body="keep_original_sound" type="boolean" default="true">
  Whether to keep the reference video's audio track on the output.
</ParamField>

<ParamField body="negative_prompt" type="string">
  Content to steer the model away from. Max 2500 characters.
</ParamField>

## Example

```bash theme={null}
curl https://routerbase.com/v1/videos/generations \
  -H "Authorization: Bearer $ROUTERBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kuaishou/kling-v3-motion-control",
    "character_orientation": "video",
    "image_urls": ["https://example.com/character.jpg"],
    "video_urls": ["https://example.com/motion-ref.mp4"],
    "duration": 8,
    "keep_original_sound": true
  }'
```

```json theme={null}
{ "id": "kling_mc_001…", "status": "pending", "model": "kuaishou/kling-v3-motion-control" }
```

Poll until terminal:

```bash theme={null}
curl https://routerbase.com/v1/videos/generations/kling_mc_001… \
  -H "Authorization: Bearer $ROUTERBASE_API_KEY"
```

```json theme={null}
{
  "id": "kling_mc_001…",
  "status": "success",
  "data": [{ "url": "https://…mp4" }]
}
```

## Reference
