← All docs

Endpoints

Generate a video

POST/v1/videos/generations

Loading models…

Generates a video from a prompt and optional first or last frame. Submit a job, then poll it with the returned id.

Body

modelstringYes
VIDEO model ID, such as everyais/minimax-h3-turbo
promptstringYes
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 image in parameter_constraints only; 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 require image). Models that list last_image only
pricingVariantstringNo
A pricing.variants[].key from GET /v1/models, exactly as returned
userstringNo
End-user identifier
extra_body.googleobjectNo
aspectRatio (16:9 or 9:16; Veo, Omni), seed, enhancePrompt, and Veo-only negativePrompt (up to 4000 characters)
extra_body.gpunodeobjectNo
Open-weight models: size (WxH from 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.

statusMeaning
processingIn progress
completedDone. Includes durationSeconds and data
failedFailed or timed out. See error
cancelledCancelled
json
{
  "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.

OptionValue
duration4–15 seconds, whole numbers. Default 5
image, last_imageBoth: 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.sizeWithout an image: one of the model's 13 sizes. Default 960x544. With an image: pixel count only
extra_body.gpunode.seed0–2147483647
extra_body.gpunode.num_inference_steps1–5. Default 5
reference_images, fps, num_frames, negative_promptNot 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.

json
{
  "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.

Contact support