---
title: "Generate Video"
method: POST
path: "/v1/video/generations"
tags: ["v1 video"]
---

# Generate Video

`POST /v1/video/generations`

Dedicated video generation endpoint using the Universal Schema with flat parameters.
    
    **Universal Base Schema:**
    - user_id (str, required): The end-user ID
    - project_id (str, optional): The project ID
    - persona_id (str, optional): The specific system persona/voice to use
    - disabled_learning (bool, optional): If true, request is ignored by long-term memory
    - use_reasoning (bool, optional): Enable reasoning loop for constraint-satisfying generation

    **Input:**
    - text_input (str, required): The prompt/description for video generation
    - session_id (str, optional): Session ID for conversation context

    **Reference inputs:**
    - image_base64 (str, optional): Base64 encoded reference image for context
    - video_base64 (str, optional): Base64 encoded reference video for context
    - audio_base64 (str, optional): Base64 encoded reference audio for context
    
    **Video Params (Flat):**
    - model (str, optional): Model ID (default: veo-3.0-generate-preview)
    - duration (float, optional): Target duration in seconds (4, 6, or 8)
    - aspect_ratio (str, optional): Aspect ratio: "16:9" or "9:16" (default: 16:9)
    - seed (int, optional): Random seed for reproducibility
    
    **Authentication**: Requires valid API key or JWT token

## Request body

- VideoGenerationRequest — Request model for video generation with Universal Schema + flat params
  - `user_id` string, required — The end-user ID
  - `project_id` string, nullable — The project ID
  - `persona_id` string, nullable — The specific system persona/voice to use
  - `disabled_learning` boolean — If true, this request is ignored by long-term memory
  - `use_reasoning` boolean — Enable Chain-of-Thought/Reasoning steps before generation
  - `max_reasoning_iterations` integer — Max reasoning steps if reasoning is enabled
  - `text_input` string, required — The prompt/description for video generation
  - `session_id` string, nullable — Session ID for conversation context
  - `model` string — Video generation model ID
  - `duration` number, nullable — Target duration in seconds
  - `aspect_ratio` string — Aspect ratio for the generated video: '16:9' or '9:16'.
  - `seed` integer, nullable — Random seed for reproducibility
  - `advanced_creative` boolean — Enable first+last frame workflow: generates a starting frame and an ending frame via the image pipeline, then uses Veo's first-and-last-frame feature to animate the transition between them.
  - `image_base64` string, nullable — Base64 encoded reference image for context (e.g., start frame)
  - `video_base64` string, nullable — Base64 encoded reference video for context
  - `audio_base64` string, nullable — Base64 encoded reference audio for context

## Response `200`

Successful Response

- VideoGenerationResponse — Response model for video generation
  - `video_base64` string, nullable — Base64 encoded video. Present when the payload is under ~30 MB. May be absent for very large outputs.
  - `video_url` string, nullable — Signed GCS URL to download the video (expires after 24 h). Always present when the upload succeeds.
  - `output_type` string — Delivery method: 'both' (base64 + url), 'url' (url only, base64 omitted due to size), or 'base64' (GCS upload failed).
  - `video_format` string — Video format, e.g. mp4, webm
  - `success` boolean — Whether the request succeeded

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — User/Persona/Project Not Found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/elicitlabs/apis/elicit-labs-api.md) · [All operations](https://skmtc.net/elicitlabs/apis/elicit-labs-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/elicitlabs/elicit-labs-api/revisions/27701839a070/schema)
