Generates a video from a prompt and optional first or last frame. Submit a job, then poll it with the returned id.
Body
modelstringYesVIDEOmodel ID, such aseveryais/minimax-h3-turbopromptstringYes- 1–4000 characters
durationintegerNo- Seconds, 1–120. Supported lengths and the default vary by model (Gemini Omni 1.1: 3–10)
imagestringNo- First frame: JPEG, PNG or WebP as a data URL or base64 (Veo: JPEG or PNG). Models that list
imageinparameter_constraintsonly; others return 400 last_imagestringNo- Last frame, same format. With
image, the video goes first to last; alone, it sets only the ending (Veo and Omni requireimage). Models that listlast_imageonly pricingVariantstringNo- A
pricing.variants[].keyfromGET /v1/models, exactly as returned userstringNo- End-user identifier
extra_body.googleobjectNoaspectRatio(16:9or9:16; Veo, Omni),seed,enhancePrompt, and Veo-onlynegativePrompt(up to 4000 characters)extra_body.gpunodeobjectNo- Open-weight models:
size(WxHfrom the model's list; with an image it sets only the pixel count),seed,num_inference_steps
The request body, including images, can be up to 5 MiB.
Model options
Pick a model at the top of this page, or read capabilities, limits and parameter_constraints from GET /v1/models.
Parameter policy decides whether unsupported values are adjusted or rejected with 400.
Check limits.supported_durations and pricing.variants, or omit them for the defaults. Duration and resolution must be a supported combination.
GET /v1/videos/generations/{id}
Returns the job's status and result. Use the id from the submit response.
While the job runs, responses include Retry-After: 5. Poll every 5 seconds.
status | Meaning |
|---|---|
processing | In progress |
completed | Done. Includes durationSeconds and data |
failed | Failed or timed out. See error |
cancelled | Cancelled |
{
"id": "cm...",
"object": "video.generation.job",
"created": 1709884800,
"model": "everyais/minimax-h3-turbo",
"status": "completed",
"durationSeconds": 5,
"data": [{ "url": "https://..." }]
}If the result can't be confirmed yet, processing comes with outcome_unknown: true, and with requires_manual_review: true when it needs a manual check.
Unknown jobs, jobs older than 24 hours and other keys' jobs return 404 job_not_found.
data[].url is valid for 10 minutes, and every poll returns a fresh link. A completed video is also available from GET /v1/outputs/{requestId} with the job ID and the same API key (24 hours).
Billing
Price = durationSeconds × per-second price. Models priced by resolution or audio list variants in pricing.variants; pass the key as pricingVariant (for example Veo's 720p-with-audio).
Only models with variants accept it.
MiniMax H3 Turbo
everyais/minimax-h3-turbo makes 24 fps video with stereo audio from text, a first frame, a last frame, or both.
| Option | Value |
|---|---|
duration | 4–15 seconds, whole numbers. Default 5 |
image, last_image | Both: a first-to-last transition. last_image alone: only the ending. Aspect ratio 0.4–2.5, short side at least 256 px |
extra_body.gpunode.size | Without an image: one of the model's 13 sizes. Default 960x544. With an image: pixel count only |
extra_body.gpunode.seed | 0–2147483647 |
extra_body.gpunode.num_inference_steps | 1–5. Default 5 |
reference_images, fps, num_frames, negative_prompt | Not supported (400) |
With an image, the output keeps the image's aspect ratio (first frame, else last frame) at no more pixels than size, on a 32 px grid.
A 4:3 photo with 960x544 gives 800x608; a 9:16 portrait with 1344x768 gives 768x1344. The image is resized without cropping, so crop it first for a different ratio.
The per-second price is the same at every size.
{
"model": "everyais/minimax-h3-turbo",
"prompt": "the camera slowly pushes in as she turns toward the window",
"image": "data:image/jpeg;base64,/9j/4AAQ...",
"duration": 5,
"extra_body": { "gpunode": { "size": "960x544", "seed": 42 } }
}Add "last_image" for first and last frames.