Skip to main content

Veo 3.1

In this page's examples, {BASE_URL} is https://api.uniall.ai.

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

ModelTier
veo3.1-video-720pStandard 720p.
veo3.1-video-1080pStandard 1080p.
veo3.1-video-4kStandard 4K.
veo3.1-fast-video-720pFast 720p.
veo3.1-fast-video-1080pFast 1080p.
veo3.1-fast-video-4kFast 4K.

Endpoint

POST /v1/video/generations
GET /v1/videos/{task_id}

Authentication

Authorization: Bearer sk-***
Content-Type: application/json

Request Parameters

ParameterTypeRequiredDescription
modelstringYesVeo 3.1 public model ID.
promptstringStrongly recommendedMain prompt. The schema is lenient, but production requests should include it.
imagestringConditionalSingle source image URL for image-to-video.
imagesstring[]Conditional2 to 3 reference image URLs for multi-image reference generation.
last_imagestringConditionalTarget last-frame image URL; use with image.
videostringConditionalSource video URL for extension.
sizestringRecommendedResolution hint, aligned to the selected model tier.
aspect_ratiostringNoText-to-video accepts 16:9 or 9:16. Image-to-video and extension may not honor it.
durationintegerConditionalOutput seconds. Allowed values: 4, 6, or 8. Not used for video extension.
extra_body.generate_audiobooleanNoWhether to generate audio; upstream usually defaults to true.
extra_body.negative_promptstringNoContent to avoid.
extra_body.seedintegerNoRandom seed for reproducibility.

Text-To-Video Example

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

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

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
}'

Task Status And Result

After creation, save id or task_id, then poll GET /v1/videos/{task_id} until the task reaches completed or failed. See Video Generation Overview for the shared polling interval, status fields, error contract, result URL, and authenticated download flow.

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.