Skip to main content
AI

Veo 3.1 Video Generation

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

Query Task Status

curl "{BASE_URL}/v1/videos/task_xxx" \
-H "Authorization: Bearer sk-***"
{
"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.