last_frame without first_frame returns 400: kling-3 and Seedance fix

A frame_images list with only a last_frame is rejected with 400 unsupported_capability. Send a first_frame too; Kling 3.0 uses start and end frames only.

4 min readSume
All posts

Why does a last_frame alone return 400?

Because Sume treats a last frame as an ending for a clip that starts from a first frame you supply. A frame_images list that contains a last_frame but no first_frame is rejected with a 400, the code unsupported_capability, and the message "frame_images with a last_frame also requires a first_frame."

There is no "end only" mode on any catalog row, so the fix is in the request, not in the model choice.

Which rows accept first and last frames?

The Seedance rows (seedance-2.5, seedance-2, seedance-2-fast, seedance-2-mini) and kling-3 all list both first_frame and last_frame in their capabilities, as do Wan 3.0 and the MiniMax rows. grok-imagine-video-1.5 is a start-frame model and the Videos panel's Grok entry needs a start frame.

Kling's own comparison page says Kling 3.0 supports start and end keyframes only, while Kling 4.0 supports up to 10 keyframes. On Sume, two frames is the ceiling for kling-3 regardless of what Kling 4.0 offers elsewhere.

Frame inputs by situation (read 2026-10-03)
You sendResultFix
first_frame onlyImage-to-video from the pictureNothing to fix
first_frame and last_frameClip that starts and ends on your picturesNothing to fix
last_frame only400 unsupported_capabilityAdd a first_frame entry
Three or more framesNo multi-keyframe field on SumeChain clips: last frame of one is first frame of the next

What does the fixed request look like?

Add the first frame. Each entry in frame_images carries its own frame_type. For a loop, reuse the same image URL for both frames.

{
  "model": "kling-3",
  "prompt": "A lantern sways gently in the evening breeze, locked camera",
  "frame_images": [
    {
      "type": "image_url",
      "image_url": { "url": "https://example.com/lantern.png" },
      "frame_type": "first_frame"
    },
    {
      "type": "image_url",
      "image_url": { "url": "https://example.com/lantern.png" },
      "frame_type": "last_frame"
    }
  ],
  "duration": 6,
  "resolution": "720p",
  "aspect_ratio": "1:1"
}

What happens if I also send input_references?

The docs say that when both fields are present, frame_images takes precedence and the request is treated as image-to-video. So a reference list sent next to a first frame is not used as references. Keep the two modes in separate requests. The image-to-video versus reference-to-video comparison explains when to use each.

How do I get past two frames?

Chain clips. Download the first clip, extract its final frame, and submit it as the first_frame of the next. Sume has no timestamped keyframe field, so a 10-keyframe plan like the one Kling describes for 4.0 becomes several short jobs. Costs add up per job, since each submit reserves the provider list price times 1.25, so plan the number of segments before you start. For loops and chaining patterns see looping with the same first and last image.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume