Luma Dream Machine API prompt rules: 3 to 5000 characters

Luma's Dream Machine API rejects prompts under 3 or over 5000 characters, and loop with keyframes. The pre-submit errors, and where Sume's checks live.

5 min readSume
All posts

Luma's Dream Machine API checks a request before it creates a generation. A prompt shorter than 3 characters or longer than 5000 characters is rejected, a request with image keyframes needs text, and loop is refused for keyframes, extend-reverse and interpolation. Sume returns a 400 invalid_request for a bad body and publishes per-model limits in its catalog.

The pre-submission errors

The Luma errors page splits problems into two groups. The pre-submission group fails the create call. The post-submission group appears later in failure_reason. The first group is the one you can test for in your own code.

Luma validation errors, read 2026-10-02
MessageWhat it means
Prompt is requiredImage keyframes were sent without text
Prompt is too short, minimum length is 3 charactersText below the minimum
Prompt is too long, maximum length is 5000 charactersText above the maximum
Loop is not supported for keyframesloop set with frame0 and frame1
Loop is not supported for extend reverseloop set with the frame1 extend feature
No keyframes providedBoth frame0 and frame1 are null
Unknown request typeThe server could not read the request shape

Where Sume checks the same things

Sume's /v1/videos route has prompt and model as required fields. Duration, resolution and aspect ratio are checked against the model's own lists, so a value outside supported_durations, supported_resolutions or supported_aspect_ratios is a client error. The error table lists 400 invalid_request for a bad body, query or header, and the job error category validation means fix input.

Frames and references

Two Sume rules map onto Luma's keyframe messages. First, frame_images and input_references are different modes, and when both are present frame_images wins and the request is image-to-video. Second, frame_type must be first_frame or last_frame. The Video Router docs also say to read capabilities from GET /v1/video-router/models instead of assuming one envelope for all models.

  • Validate prompt length in your own code before you submit.
  • Fetch GET /v1/videos/models and check the three lists for the model you pin.
  • Do not send both frame images and references and expect both to apply.
  • Treat a 400 as a bug in the request, not as a reason to retry.

What carries over

The Video Router page does not list a Luma model, so this is a port-the-habits comparison and not a drop-in: the habit to keep is checking the request locally, because a rejected request is the cheapest failure you can have.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume