POST /v3/videos is a deterministic, provider-agnostic video endpoint. You pass a
model and a prompt; Opper runs the job and gives you a URL to poll. The same
two-step flow works across every video provider (Google Veo, xAI Grok-Imagine,
Alibaba Wan, Pruna, and more): only the contents of parameters differ per model.
Video generation is asynchronous: submitting returns immediately with an
id, and you poll for the result. A clip typically takes from ~30 seconds to a
few minutes depending on the model, resolution, and duration.How it works
- Submit:
POST /v3/videoswithmodel+prompt→202 { id, status_url } - Poll:
GET {status_url}untilstatusiscompletedorfailed - Download: fetch the presigned
urlfrom the completed response (valid 1 hour)
Run your first generation
1
Get an API key
Create a project-scoped runtime API key in the Opper dashboard.
2
Submit a generation
- curl
- Python
3
Poll until ready, then download
- curl
- Python
Models and parameters
model and prompt are required. A model id names its provider, such as
bytedance:ap/seedance-2.5 or fal/kling-3.0-pro: the same model can be served
by several providers, each with its own inputs, defaults and price. A bare name
like seedance-2.5 answers 400 with the ids that serve it.
Length, resolution and shape are top-level fields, normalized for every model:
GET /v3/videos/models. Each
model’s params.video lists its accepted aspect_ratios, resolutions and
max_duration, plus a parameters list of the provider knobs it takes, and
pricing gives its per-second rates:
Audio
Kling, Seedance and Veo render native audio, and a silent clip costs less. The default differs by provider, so setparameters.generate_audio to true or
false explicitly. A model whose rate depends on it shows an audio dimension
on its pricing.rates, or a separate price_per_second_audio.
Image, video and audio inputs
Each input is an http(s) URL, a data-URI, or afile_id. A model takes an input
only when it has the matching capability, and answers 400 otherwise:
A
file_id from a previous image generation or upload works as any of these inputs, with no re-upload. See Files for how files work, lifecycle, and storage quotas.Edit a clip (Seedance 2.5 on BytePlus)
Reference
- Generate a video:
POST /v3/videos - List video models:
GET /v3/videos/models