Kling 3.0 Motion Control on Sume: four routes, one stored model id

POST /v1/kling/3.0/motion-control and three aliases all store kling/3.0/motion-control. How to pick a route, what the body needs, and what the job reserves.

5 min readSume
All posts

Sume exposes Kling 3.0 Motion Control through four submit paths, and all four create the same kind of job with the same stored model id, kling/3.0/motion-control. If you only want to animate a still with a motion video, call POST /v1/kling/3.0/motion-control and ignore the other three. The aliases exist so that agent tools and the avatar-face wording reach the same worker.

The behaviour below is read from the repository's motion-control reference on origin/main on 2026-10-03, not from a vendor page, so it describes how Sume accepts and bills the request, not what the model can do at its best.

The four paths

The primary invoke is POST /v1/kling/3.0/motion-control. A face-control alias, POST /v1/avatar-1.0/motion-control, takes the same body. Two model-run twins, POST /v1/models/kling/3.0/motion-control/runs and POST /v1/models/sume/avatar-1.0/motion-control/runs, do the same through the model-runs shape. All four accept Idempotency-Key, and reads use the standard GET /v1/jobs/:id/status and /result.

Motion Control submit paths (read 2026-10-03)
RouteRoleStored model id
POST /v1/kling/3.0/motion-controlPrimary invokekling/3.0/motion-control
POST /v1/avatar-1.0/motion-controlFace-control aliaskling/3.0/motion-control
POST /v1/models/kling/3.0/motion-control/runsCanonical model-run twinkling/3.0/motion-control
POST /v1/models/sume/avatar-1.0/motion-control/runsFace-control model-run aliaskling/3.0/motion-control

What the body needs

The request needs exactly one visual source, either a public HTTPS image_url or a ready avatar by avatar_id or avatar_handle. It also needs a motion_video_url that drives all output motion and a duration_seconds between 1 and 30. duration_seconds is the length of your motion video; it is a reservation basis only, and the provider has no duration knob, so output length follows the driving video.

Optional fields are a prompt that steers appearance only, keep_original_sound (default true, false gives a silent clip), and character_orientation, which is video by default or image. The body is strict: Video Router vocabulary such as reference_image_urls, reference_video_urls or a model field is rejected, so this route cannot be used to reach Kling text-to-video reference inputs.

What it reserves

The reservation is ceil(duration_seconds) times the motion-control list rate times 1.25, held at admission, captured on completion and refunded on failure. The reference states the list rate it was priced from; read the current Sume rate through an admission preview before a large batch rather than copying a figure from a blog post.

What this is not

It is not the Video Router kling-3 text-to-video and start/end-frame model, and not the still-plus-audio talking-head product. If you want to describe a new scene in words, use POST /v1/videos with a catalog model. Motion control starts from a picture and a motion clip you already have.

How to choose between the routes

Pick one route per codebase and stay on it. The primary invoke is the shortest path for a script. The model-run twin is the better fit if the rest of your integration already submits through the model-runs shape. The face-control alias exists for callers that think in terms of an avatar; it takes the same body, so there is nothing extra to learn.

Because all four store the same model id, your reporting does not split by route. A query for jobs with model: "kling/3.0/motion-control" returns everything, whichever path was used. That also means a migration from one route to another is safe in the middle of a project: jobs already created keep their record, and new ones appear under the same model.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume