Docs
Open console
Create

Create a video

A camera move or fly-through from a single still, priced by model and length.

v2 previewPOST/v2/videos

Returns 202 straight away with the job and what it charged. Poll GET /v2/jobs/{id} for the result; a job that fails is refunded. A clip takes a few minutes.

Video needs an account that has topped up its API wallet. On an account that never has, it returns 403 PLAN_REQUIRED and nothing is charged.
ModelPer clip
v2.0 · Flash (v2.0-flash)$0.99 per 10s clip
v2.0 · Cinematic (v2.0)$1.98 per 10s clip

Headers

AuthorizationstringRequired
Bearer mk_live_…: your API key. See Authentication.
Content-TypestringRequired
application/json, or multipart/form-data to send a file.
Idempotency-Keystring
Your own key, 1 to 255 visible ASCII characters. A retry with the same key and request within 24 hours returns the first answer instead of running again.

Body

imagestring
The JPEG, PNG or WebP to work on, up to 15 MB: a public https:// link we fetch, a data:image/…;base64, URI, or bare base64. With multipart form data, attach the file itself (-F [email protected]). Send one of image or job_id.
job_idstring
A finished job of yours: work on its output without downloading it first.
modelstringDefault v2.0 · Flash
A video model’s id or name from video_models in GET /v2/engines.
duration_secondsintegerDefault 10
The clip’s length. The lengths each model offers, and their prices, are in video_models.
camera_movementstringDefault static
static, auto, a preset such as orbit-right, or up to two moves: "dolly-in,tilt-up".
motionstringDefault subtle
How much moves in the scene: subtle, balanced or dynamic.
promptstring
What should happen in the clip.
end_framestring | object
A last frame to move towards: the image itself, as image is sent, or an object naming it.
Fields (2)
imagestring
The frame: a public https:// link we fetch, a data:image/…;base64, URI, or bare base64. With multipart form data, attach the file itself. Send one of image or job_id.
job_idstring
The frame, as a finished job of yours.
cinematicboolean
v1.1 only: the Cinematic variant, which needs end_frame.
webhook_urlstring
A public https:// URL to send this job’s settle event to, signed like every webhook, on top of your account’s endpoints.

Response

On success (202): Started. A clip takes minutes; poll GET /v2/jobs/{id} for it. The JSON is { "success": true, "data": … }, and inside data:

idstringRequired
The job. Read it at GET /v2/jobs/{id}.
statusstringRequired
The job’s status when it was accepted, usually queued.queuedprocessingsucceededfailedcanceled
charged_usdnumberRequired
What this call charged, in US dollars. A job that fails is refunded.
replayedbooleanRequired
True when this is the stored answer to an earlier identical request with the same Idempotency-Key: nothing ran or was charged again. See Idempotency.
notesstring[]Required
What was accepted but not applied, in plain words: a setting that does not fit the engine, a seed it does not take. Empty when everything applied.
Response headers (5)
X-Request-Idstring
This request, for support and the console log.
RateLimit-Limitinteger
Requests this key may make per minute.
RateLimit-Remaininginteger
Requests left in the current minute.
RateLimit-Resetinteger
Seconds until the current minute resets.
Idempotent-Replayedstring
Present, as true, when this is the stored answer to an earlier request.

Status codes

202
Started. A clip takes minutes; poll GET /v2/jobs/{id} for it.
401
The API key is missing, malformed, unknown or revoked.
402
The balance does not cover this call.
409
The Idempotency-Key was reused for a different request, or is still in progress.
429
A limit was reached: requests per minute, or a daily or concurrency limit.
Other
Any other error, in the same envelope.

Every error answers { "success": false, "error": { "code", "message" } }. What each code means, and what to do, is on Errors.