Skip to main content
POST
/
v3
/
videos
Generate a video
curl --request POST \
  --url https://api.opper.ai/v3/videos \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "<string>",
  "prompt": "<string>"
}
'
{
  "id": "<string>",
  "status_url": "<string>"
}
Video generation is asynchronous. This call validates the request, starts the job, and returns 202 Accepted with an id and a status_url — it does not block until the video is ready. The flow is:
  1. POST /v3/videos with model + prompt202 { id, status_url }
  2. Poll GET {status_url} (i.e. GET /v3/artifacts/{id}/status) until status is completed or failed
  3. On completed, download the video from the presigned url (valid for one hour)
See the Video quickstart for the end-to-end flow with runnable snippets, and List video models to discover available models and their parameters.

Parameters

model and prompt are the only fields Opper owns. Everything in parameters is forwarded verbatim to the provider, which validates and rejects it — so the accepted keys depend on the model (e.g. Sora takes seconds/size; Veo takes durationSeconds/resolution/generateAudio). Use GET /v3/videos/models to see each model’s supported aspect_ratios, resolutions, and max_duration. For image-to-video and video-to-video, pass a top-level image or video (an http(s) URL or data-URI) with a model whose capabilities include image_to_video or video_editing. Accepted source formats differ per provider: Sora takes a URL or base64 (image dims must equal size); Veo takes base64/data-URI or gs:// (not an http URL); Pruna and xAI require a public, server-fetchable URL. See the Video quickstart.

Authorizations

Authorization
string
header
required

API key authentication. Pass your API key as a Bearer token.

Body

application/json
model
string
required
prompt
string
required
parameters
object

Response

Successful response

id
string
required
status_url
string
required