Kling 3.0 Motion Control

POST https://api.beatapi.io/v1/videos/tasks

Transfer full-body motion with selectable character orientation and background source at 720p or 1080p; image orientation supports up to 10 seconds and video orientation up to 30 seconds.

Supported modes

ModeRequired inputRules
Motion transfermodel, images, reference_videosUpload both assets through /v1/files; assets must exceed 340 px, use a 2:5–5:2 ratio, and follow the 10s image / 30s video orientation limits.

Async flow: Create the task, save data.id, then poll the Task with GET /v1/tasks/{task_id}. On succeeded, read data.output.media. On failed, read data.error_code and data.error_message, then follow the error and retry policy.

Using a local file? upload a local input first and pass the returned data.url.

Authorization

Authorization   string   required

Send your BeatAPI API key as a Bearer token. Create one on the Dashboard.

Authorization: Bearer <BEATAPI_API_KEY>

Keep permanent API keys on trusted servers. Content-Type: application/json is required for the request body. Idempotency-Key is optional when the endpoint exposes it and is recommended for safe retries with the exact same body.

Request body

model   string   required

Must be kling-3-motion-control.

Value: kling-3-motion-control


prompt   string   optional

Optional motion or scene guidance.

Length: at most 2500 characters


images   string[]   required

Exactly one character-image URL returned by the current account’s /v1/files upload; maximum 10 MB.

Count: 1 to 1 items


reference_videos   string[]   required

Exactly one 3–30 second MP4/MOV URL returned by the current account’s /v1/files upload; maximum 100 MB. Its detected duration determines billing.

Count: 1 to 1 items


resolution   enum<string>   optional

Output resolution and per-second price tier.

Available options: 720p, 1080p
Default: "720p"


character_orientation   enum<string>   optional

Image orientation supports motion videos up to 10 seconds; video orientation supports up to 30 seconds.

Available options: image, video
Default: "image"


background_source   enum<string>   optional

Preserve the background from the motion video or character image.

Available options: input_video, input_image
Default: "input_video"

Request examples

Motion transfer

$curl --request POST \
> --url https://api.beatapi.io/v1/videos/tasks \
> --header 'Authorization: Bearer <BEATAPI_API_KEY>' \
> --header 'Content-Type: application/json' \
> --data '{
> "model": "kling-3-motion-control",
> "prompt": "Preserve the character and transfer the full-body motion precisely.",
> "images": [
> "https://media.beatapi.io/samples/neon-singer.png"
> ],
> "reference_videos": [
> "https://media.beatapi.io/inputs/motion.mp4"
> ],
> "resolution": "1080p",
> "character_orientation": "image",
> "background_source": "input_video"
>}'

Response

A successful request returns HTTP 201.

1{
2 "data": {
3 "id": "task_8K2qA",
4 "object": "task",
5 "task_kind": "video",
6 "capability_id": "kling-3-motion-control",
7 "capability_version": null,
8 "media_type": "video",
9 "model": "kling-3-motion-control",
10 "status": "queued",
11 "stage": "queued",
12 "created_at": 1782210000,
13 "updated_at": 1782210000,
14 "completed_at": null,
15 "output": null,
16 "usage": {
17 "credits_reserved": 2.1,
18 "credits_charged": 2.1,
19 "billable_duration_seconds": 15,
20 "credits_settled": 0,
21 "credits_refunded": 0
22 },
23 "request_id": "req_abc123",
24 "error_code": null,
25 "error_message": null
26 }
27}

Errors

StatusMeaning
400Invalid request.
401Missing, invalid, or inactive API key.
402Insufficient USD balance
409Idempotency key conflicts with another request body
429Request rate limit exceeded.