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.mp4Pick 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.
| Model | Good for |
|---|---|
alibaba/wan-3.0 | Up to 30 s at 1080p, with sound |
bytedance/seedance-2.5 | Up to 30 s, references, extending |
minimax/hailuo-3 | 2K, first and last frame |
black-forest-labs/flux-3-video | First and last frame, extending, up to 1080p |
kwaivgi/kling-v3.0-pro | First and last frame, sound |
google/veo-3.1-fast | Up to 4K, sound, references |
Start from pictures
- First and last frame.
frame_imageswithfirst_frame,last_frameor 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'smax_input_references. Not withframe_images. - Links. The provider fetches each picture by its public
httpslink. 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
429withat_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
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | A setting the model doesn't take, a missing field, or a link not https |
| 400 | model_not_served | Not a video model we serve |
| 400 | video_option_not_served | callback_url, provider, size or n |
| 400 | video_input_not_served | A video or audio reference: only pictures for now |
| 401 | invalid_api_key | A missing, wrong or revoked key |
| 402 | no_credit | The balance doesn't cover estimated_cost |
| 402 | key_limit | The key's spending limit doesn't cover it |
| 403 | videos_need_credit | Free and private balances don't pay for videos |
| 403 | agent_paused, agent_* | The agent's owner paused it, or the agent is not active |
| 404 | not_found | No such video for this key, or previous_job_id isn't one |
| 404 | not_ready | /content before the video is done, or after it is deleted |
| 429 | at_once, daily_limit | 3 running, or 100 today: Retry-After says when |
| 429 | busy | Too many calls at once: try again shortly |
| 429 | rate_limited | Over 60 reads of jobs a minute: Retry-After says when |
| 503 | unavailable | Videos 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.