Skip to main content
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

  1. Submit — POST /v3/videos with model + prompt → 202 { id, status_url }
  2. Poll — GET {status_url} until status is completed or failed
  3. Download — fetch the presigned url from 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

3

Poll until ready, then download

Models and parameters

model and prompt are the only fields Opper owns. Everything inside parameters is forwarded verbatim to the provider, which validates and rejects it — so the accepted keys depend on the model. Common examples: To discover what’s available programmatically — including each model’s accepted aspect_ratios, resolutions, and max_duration — call GET /v3/videos/models:
Each item’s capabilities tells you the input modality: video_generation is text-to-video, image_to_video needs a reference image, and video_editing is video-to-video.

Reference image and video

Alongside prompt, you can pass a top-level image (image-to-video) or video (video-to-video). Each is an http(s) URL, a data-URI, or a file_id.
  • image — supported by image_to_video models, such as vertexai/veo-3.1-generate-001, vertexai/veo-3.1-fast-generate-001, pruna/wan-i2v, xai/grok-imagine-video.
  • video — supported by video_editing models, such as pruna/vace.
A file_id from a previous image generation or upload works as the seed image here — no re-upload. See Files for how files work, lifecycle, and storage quotas.
Seed a video from a file_id
Source-format rules differ per provider:

Reference

Last modified on October 2, 2026