Create a video

Start a video with any video model, read its job, and download the file.

POST

Send a prompt and a video model, get the job back at once. Pick a model and its values from GET /videos/models: a value the model doesn't list is refused before anything is held. See Videos for pictures, extending, costs and limits.

Send your key as Authorization: Bearer binf_... or x-api-key.

Request body

Only these fields are taken: any other is refused or left out.

  • modelstringRequired

    A video model id from GET /videos/models, such as alibaba/wan-3.0.

  • promptstring

    What happens in the video: the scene, the movement, the camera. Up to 2,000 characters. Needed unless the video starts from pictures or carries one on.

  • durationintegerRequired

    Seconds, one of the model's supported_durations.

  • resolutionstringRequired

    Such as 720p, one of the model's supported_resolutions.

  • aspect_ratiostringRequired

    Such as "16:9" or "9:16", one of the model's supported_aspect_ratios.

  • generate_audioboolean

    Sound, on models with generate_audio: true. Off when left out.

  • seedinteger

    The same seed and settings give a similar video, on models with seed: true.

  • frame_imagesobject[]

    Pictures the video starts or ends on, each { "type": "image_url", "image_url": { "url": "https://..." }, "frame_type": "first_frame" } (or last_frame), as the model's supported_frame_images allow. Links are public https ones.

  • input_referencesobject[]

    Pictures of people, things or a look to keep, each { "type": "image_url", "image_url": { "url": "https://..." } }, up to the model's max_input_references, as public https links. Not with frame_images.

  • previous_job_idstring

    One of this agent's completed videos to carry on, on a model with extends: true.

Headers

  • Idempotency-Keystring

    8 to 64 letters, digits, - or _. A second call with the same key answers the same video and makes no new one.

Response

  • idstring

    The video's id: vid_ and 20 letters and digits.

  • status"pending" | "in_progress" | "completed" | "failed" | "expired"

    pending or in_progress while it is made, then completed or failed; expired once it is no longer kept.

  • polling_urlstring

    Where to read the job: GET it with your key every 10 seconds or so.

  • unsigned_urlsstring[]

    Once completed: where to GET the file, with your key. It answers with a link that works for an hour.

  • estimated_costnumber

    The most this video costs, in dollars. It is held from your balance until the video ends.

  • usageobject | null

    Once completed: cost, what it was charged. A video that fails is charged nothing.

  • errorobject | null

    Why it failed, as a code such as content_refused.

  • expires_atstring | null

    When the file is deleted: 30 days after it was made.

Request
curl https://binference.io/api/v1/videos \  -H "Authorization: Bearer $BINF_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "alibaba/wan-3.0",    "prompt": "A paper boat drifts across a calm pond at sunrise, slow tracking shot",    "duration": 5,    "resolution": "720p",    "aspect_ratio": "16:9"  }'
Response
{  "id": "vid_TFEnw4pmFHxtp2oqMHR8",  "object": "video.generation",  "model": "alibaba/wan-3.0",  "status": "pending",  "polling_url": "https://binference.io/api/v1/videos/vid_TFEnw4pmFHxtp2oqMHR8",  "unsigned_urls": [],  "estimated_cost": 0.6,  "usage": null,  "error": null,  "created_at": "2026-10-04T17:26:08.000Z",  "expires_at": null}

Read a video

GET /videos/{id} with your key answers the same job as POST /videos, as it is now. Ask every 10 seconds or so until status is completed or failed. Each key may read jobs 60 times a minute.

Download a video

GET /videos/{id}/content with your key answers 302 to the file, an H.264 MP4, through a link that works for an hour. It answers 404 with not_ready before the video is done and after it is deleted, 30 days after it was made.

List video models

GET /videos/models needs no key. For each model: supported_resolutions, supported_aspect_ratios, supported_durations, supported_frame_images, max_input_references, generate_audio, seed, extends, and from_price, its shortest, smallest video in dollars. The list changes when models arrive or leave, at most every hour.