Videos

Make videos with the best video models, from words, from pictures or from a finished video.

The same key and balance make videos. Start a video, read its job until it's done, then fetch the file. People make them on the site at Videos, with the same models.

Make a video

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"
  }'

It answers at once with the job:

{
  "id": "vid_TFEnw4pmFHxtp2oqMHR8",
  "object": "video.generation",
  "status": "pending",
  "polling_url": "https://binference.io/api/v1/videos/vid_TFEnw4pmFHxtp2oqMHR8",
  "estimated_cost": 0.6,
  "usage": null
}

Read polling_url with your key every 10 seconds or so. Most videos take 2 to 4 minutes. When status is completed, GET the link in unsigned_urls with your key: it redirects to the file, an H.264 MP4 that plays in every browser.

curl -L "https://binference.io/api/v1/videos/vid_TFEnw4pmFHxtp2oqMHR8/content" \
  -H "Authorization: Bearer $BINF_API_KEY" \
  -o video.mp4

Pick a model

GET /videos/models lists every model with the lengths, sizes and shapes it takes, whether it makes sound, which frames it starts or ends on, how many references it takes and whether it extends. A value a model doesn't list answers 400 before anything is held.

ModelGood for
alibaba/wan-3.0Up to 30 s at 1080p, with sound
bytedance/seedance-2.5Up to 30 s, references, extending
minimax/hailuo-32K, first and last frame
black-forest-labs/flux-3-videoFirst and last frame, extending, up to 1080p
kwaivgi/kling-v3.0-proFirst and last frame, sound
google/veo-3.1-fastUp to 4K, sound, references

Start from pictures

  • First and last frame. frame_images with first_frame, last_frame or both, where the model takes them. The video starts on the first picture and ends on the last.
  • References. input_references: pictures of a person, a thing or a look to keep, up to the model's max_input_references. Not with frame_images.
  • Links. The provider fetches each picture by its public https link. For a picture on your machine, upload it first: its link works for 24 hours, long enough.

Extend a video

previous_job_id with one of your completed videos carries it on, on the same model, for models with extends: true. Write what happens next in prompt.

What it costs

estimated_cost is the most the video costs. It is held from your balance until the video ends, and you're charged what it cost, never more. A video that fails costs nothing. Once started, a video can't be stopped.

from_price in GET /videos/models is each model's shortest, smallest video. Length, size and sound raise it.

Limits

  • 3 videos at once and 100 a day per agent. A fourth answers 429 with at_once.
  • 60 reads of jobs a minute per key.
  • Idempotency-Key: the same key on a second call answers the same video and makes no new one.
  • Fields the API reference doesn't list are ignored.
  • Each video is kept 30 days, then deleted. Its prompt is never stored.

Over MCP

create_video and get_video do the same from an agent's MCP client, and get_video gives a download link once the video is done.

Errors

StatusCodeWhen
400invalid_requestA setting the model doesn't take, a missing field, or a link not https
400model_not_servedNot a video model we serve
400video_option_not_servedcallback_url, provider, size or n
400video_input_not_servedA video or audio reference: only pictures for now
401invalid_api_keyA missing, wrong or revoked key
402no_creditThe balance doesn't cover estimated_cost
402key_limitThe key's spending limit doesn't cover it
403videos_need_creditFree and private balances don't pay for videos
403agent_paused, agent_*The agent's owner paused it, or the agent is not active
404not_foundNo such video for this key, or previous_job_id isn't one
404not_ready/content before the video is done, or after it is deleted
429at_once, daily_limit3 running, or 100 today: Retry-After says when
429busyToo many calls at once: try again shortly
429rate_limitedOver 60 reads of jobs a minute: Retry-After says when
503unavailableVideos can't be made right now: try again shortly

A job that fails has status: "failed" and an error.code: content_refused (the model refused the prompt or a picture), invalid_request (the model refused a setting or a picture link), upstream_failed, upstream_expired, upstream_busy, save_failed, unplayable, submit_lost or stuck. None of them is charged.

On this page