# Veo 3.1 Video Generation This file is the focused AI-readable context for one UniAll documentation page. URL: https://docs.uniall.ai/models/video/veo-3-1 Locale: en Markdown: https://docs.uniall.ai/ai/pages/models/video/veo-3-1.md Description: Generate videos with Veo 3.1 models through UniAll video APIs. Agent guidance: - Use this page when the user is asking about this specific route or model capability. - Preserve endpoint paths, JSON keys, model IDs, and placeholder values exactly. - Treat examples such as `sk-***`, `{BASE_URL}`, and `task_xxx` as safe placeholders, not real secrets. ## Page Markdown Veo 3.1 supports text-to-video, image-to-video, first-last-frame generation, multi-image reference generation, and video extension. Use the public model name to select the resolution and speed tier. ## Supported Models | Model | Tier | | --- | --- | | `veo3.1-video-720p` | Standard 720p. | | `veo3.1-video-1080p` | Standard 1080p. | | `veo3.1-video-4k` | Standard 4K. | | `veo3.1-fast-video-720p` | Fast 720p. | | `veo3.1-fast-video-1080p` | Fast 1080p. | | `veo3.1-fast-video-4k` | Fast 4K. | ## Endpoint ```http POST /v1/video/generations GET /v1/videos/{task_id} ``` ## Authentication ```http Authorization: Bearer sk-*** Content-Type: application/json ``` ## Request Parameters | Parameter | Type | Required | Description | | --- | --- | --- | --- | | `model` | string | Yes | Veo 3.1 public model ID. | | `prompt` | string | Strongly recommended | Main prompt. The schema is lenient, but production requests should include it. | | `image` | string | Conditional | Single source image URL for image-to-video. | | `images` | string[] | Conditional | `2` to `3` reference image URLs for multi-image reference generation. | | `last_image` | string | Conditional | Target last-frame image URL; use with `image`. | | `video` | string | Conditional | Source video URL for extension. | | `size` | string | Recommended | Resolution hint, aligned to the selected model tier. | | `aspect_ratio` | string | No | Text-to-video accepts `16:9` or `9:16`. Image-to-video and extension may not honor it. | | `duration` | integer | Conditional | Output seconds. Allowed values: `4`, `6`, or `8`. Not used for video extension. | | `extra_body.generate_audio` | boolean | No | Whether to generate audio; upstream usually defaults to `true`. | | `extra_body.negative_prompt` | string | No | Content to avoid. | | `extra_body.seed` | integer | No | Random seed for reproducibility. | ## Text-To-Video Example ```bash curl -X POST "{BASE_URL}/v1/video/generations" \ -H "Authorization: Bearer sk-***" \ -H "Content-Type: application/json" \ -d '{ "model": "veo3.1-video-1080p", "prompt": "A golden-hour street interview shot, slight handheld movement, natural city ambience, realistic human speech.", "size": "1080p", "aspect_ratio": "16:9", "duration": 8, "extra_body": { "generate_audio": true, "negative_prompt": "watermark, blur", "seed": 7 } }' ``` ## Image-To-Video Example ```bash curl -X POST "{BASE_URL}/v1/video/generations" \ -H "Authorization: Bearer sk-***" \ -H "Content-Type: application/json" \ -d '{ "model": "veo3.1-video-720p", "prompt": "A product slowly rotates on a clean studio desk with soft reflected light.", "image": "https://example.com/keyframe.png", "size": "720p", "aspect_ratio": "16:9", "duration": 6, "extra_body": { "generate_audio": false, "negative_prompt": "artifacts, camera shake" } }' ``` ## First-Last-Frame Example ```bash curl -X POST "{BASE_URL}/v1/video/generations" \ -H "Authorization: Bearer sk-***" \ -H "Content-Type: application/json" \ -d '{ "model": "veo3.1-fast-video-1080p", "prompt": "Transition naturally from the first frame to the last frame, preserving subject identity and camera continuity.", "image": "https://example.com/start-frame.png", "last_image": "https://example.com/end-frame.png", "size": "1080p", "aspect_ratio": "16:9", "duration": 6 }' ``` ## Query Task Status ```bash curl "{BASE_URL}/v1/videos/task_xxx" \ -H "Authorization: Bearer sk-***" ``` ```json { "id": "task_xxx", "task_id": "task_xxx", "object": "video.generation.job", "model": "veo3.1-video-1080p", "status": "completed", "progress": 100, "video_url": "https://example.com/output.mp4" } ``` ## Billing Notes Veo billing depends on model tier, speed tier, resolution, output duration, and audio generation. Use task settlement and current product pricing as the final source. ## Common Errors - Passing `duration` outside `4`, `6`, or `8`. - Mismatching `size` with the selected model tier. - Expecting `aspect_ratio` to be honored for image-to-video or extension requests. - Sending more than `3` reference images. - Passing `video` without clarifying the extension use case in the prompt or extra body. ## Related Pages - [Video Generation Overview](/models/video/overview) - [Kling Video Generation](/models/video/kling) - [Vidu Video Generation](/models/video/vidu)