Genace

JSON Prompt Generator

Fill in the parts of a shot, get a JSON prompt plus the request body that carries it. The parameter options change per model, and they are the real ones — anything outside them returns 400.

Request parameters

These are validated by the API. Options below are the only values Seedance 2.0 Fast accepts — anything else returns 400 INVALID_PARAM.

A JSON prompt is not a schema — it is still a string

The prompt field is typed as a plain string. JSON prompting works because models read structure well, not because the API parses it. That means {"duration": 10} inside your JSON prompt does nothing at all — duration, aspect ratio and resolution are separate request fields, and they are the only ones the API validates.

JSON prompt

Goes into the prompt field as a string.

Fill in at least one field above.

Request body

POST /v1/video/generations

Fill in at least one field above.

curl

Set GENACE_API_KEY first.

Fill in at least one field above.

What a JSON prompt actually is

A JSON prompt is a formatting convention, not an API feature. You write your description as a JSON object instead of a sentence, and the model reads the keys as labelled sections. Nothing parses it — on this API the prompt field is typed as a plain string, so a JSON prompt arrives as text that happens to look like JSON.

That distinction has a practical consequence people get wrong constantly: putting "duration": 10 or "aspect_ratio": "9:16" inside the JSON prompt does nothing. Those are separate request fields. The model may read them as a hint, but the actual clip length and framing come from the request body, and only the request body is validated.

Why it helps anyway

Two reasons, both about you rather than the model. First, a JSON prompt is diffable — when a generation comes out wrong you can change one key and see exactly what changed, instead of rewriting a paragraph and guessing which clause did it. Second, it is programmatic: an agent building prompts can set camera_motion without string-splicing an English sentence.

Leave a key out rather than setting it to an empty string. An empty value is still a value, and models will occasionally treat it as a constraint. The generator above drops empty fields for this reason.

Duration constraints are the usual 400

The parameter that most often rejects a request is duration, because each video model allows a different set of values:

Model model duration_sec
Seedance 2.0 Fast seedance-2.0-fast any integer 3–15s
Kling 2.0 Standard kling-2.0-standard 5s or 10s only
Veo 3 veo3 locked at 8s

Asking Kling for 7 seconds is a 400 INVALID_PARAM, not a rounded-up 7-second clip. Veo 3 is stricter still — 8 seconds is the only value it takes. See invalid_param for the full error shape, or the cost comparison tool for what these duration limits do to your bill.