> ## Documentation Index
> Fetch the complete documentation index at: https://docs.opper.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate a video

> Submit a deterministic video-generation job. Returns immediately with a generation id and a status URL to poll; the video is produced asynchronously. `model` and `prompt` are required; everything in `parameters` is forwarded verbatim to the provider. `image`/`video`/`reference_images` accept an http(s) URL, a data-URI, or a `file_<id>` (resolved per provider). Output is saved to /v3/files by default and returned with a reusable `file_id` on the status poll; set `store: false` to opt out. Poll the returned `status_url` (GET /v3/artifacts/{id}/status) for a presigned download URL when complete.

Video generation is **asynchronous**: this returns `202` with an `id` and a `status_url`. Poll `GET /v3/artifacts/{id}/status` until `completed`, then download from the presigned `url`. See the [Video guide](/build/multimodal/video) for the end-to-end flow, reference image/video inputs, and per-provider parameters.


## OpenAPI

````yaml post /v3/videos
openapi: 3.1.0
info:
  description: Schema-driven generative API that orchestrates LLM-powered workflows.
  title: Task API
  version: 3.0.0
servers:
  - description: Production
    url: https://api.opper.ai
  - description: Local development
    url: http://localhost:8080
security:
  - BearerAuth: []
tags:
  - description: Schema-driven function management and execution
    name: Functions
  - description: OpenAI-compatible chat completions
    name: Chat
  - description: OpenAI Responses API compatible endpoint
    name: Responses
  - description: Google-compatible interactions endpoint
    name: Interactions
  - description: Model registry and capabilities
    name: Models
  - description: Synchronous image generation
    name: Images
  - description: Text-to-speech and speech-to-text
    name: Audio
  - description: Asynchronous video generation
    name: Videos
  - description: Reusable file storage for media inputs and generated outputs
    name: Files
  - description: Async generation status and downloads
    name: Artifacts
  - description: OpenAI-compatible embeddings
    name: Embeddings
  - description: Recorded HTTP request/response generations
    name: Generations
  - description: System health and status
    name: System
  - description: Roundtable endpoint — fan out a query to multiple LLMs and combine results
    name: Roundtable
  - description: Web search, fetch, and other utility tools
    name: Tools
  - description: Caller identity, credits, and usage
    name: Account
paths:
  /v3/videos:
    post:
      tags:
        - Videos
      summary: Generate a video
      description: >-
        Submit a deterministic video-generation job. Returns immediately with a
        generation id and a status URL to poll; the video is produced
        asynchronously. `model` and `prompt` are required; everything in
        `parameters` is forwarded verbatim to the provider.
        `image`/`video`/`reference_images` accept an http(s) URL, a data-URI, or
        a `file_<id>` (resolved per provider). Output is saved to /v3/files by
        default and returned with a reusable `file_id` on the status poll; set
        `store: false` to opt out. Poll the returned `status_url` (GET
        /v3/artifacts/{id}/status) for a presigned download URL when complete.
      operationId: createVideo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoResponse'
          description: Successful response
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad request
        '401':
          description: Unauthorized - missing or invalid API key
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal server error
components:
  schemas:
    VideoRequest:
      properties:
        aspect_ratio:
          type: string
        image:
          type: string
        last_image:
          type: string
        model:
          type: string
        parameters:
          type: object
        prompt:
          type: string
        reference_images:
          items:
            type: string
          type: array
        resolution:
          type: string
        seconds:
          type: integer
        size:
          type: string
        store:
          description: >-
            Persist the finished video to /v3/files and return a reusable
            file_id on the status poll. Defaults to true; set false to skip.
          type: boolean
        video:
          type: string
      required:
        - model
        - prompt
      type: object
    VideoResponse:
      properties:
        id:
          type: string
        status_url:
          type: string
      required:
        - id
        - status_url
      type: object
    ErrorResponse:
      properties:
        error:
          properties:
            code:
              type: string
            details:
              description: Any value
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          type: object
      required:
        - error
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: API Key
      description: API key authentication. Pass your API key as a Bearer token.
      scheme: bearer
      type: http

````