Skip to main content
POST
Veo Series
Google’s Veo 3.1 video line comes in two routes. The official route, veo3.1-fast and veo3.1-quality, offers 4 / 6 / 8 second output, first and last frames, native audio and seed, billed per second. The economy route, veo3.1-lite, veo3.1-fast-rev and veo3.1-quality-rev, reaches Veo through an aggregator, always outputs eight seconds and is billed per finished clip; the two -rev tiers can also extend a video they generated earlier. veo3.1-lite (Veo 3.1 Lite Economy) belongs to the economy route and is not Google’s official Veo 3.1 Lite. Both routes offer 720p, 1080p and 4k; they differ in both parameters and billing, and never switch to each other.

Quick start

A successful submission returns a task_id. Retrieve the result with GET /v1/tasks/{task_id}, wait inline with Prefer: wait, or configure a webhook. Chaining an extension takes two steps. Submit action: "generate" on veo3.1-fast-rev or veo3.1-quality-rev and keep the task_id; once that task is completed, pass its task_id as ref_task_id on an action: "extend" request. ref_task_id is the task_id returned by that first task, not an upstream ID, and it must be a completed generate task on the same model under the same API key. An extension is 720p by default; a 4k extension needs a 4k parent.

Request parameters

Both routes

string
required
Model ID; see Available models.
string
default:"generate"
  • generate — generate a video; supported by all five models
  • extend — continue a finished video; only veo3.1-fast-rev and veo3.1-quality-rev support it, and ref_task_id is required
string
required
Video description. Under action: "extend" it describes the continuation.
integer
Output duration in seconds; required under action: "generate". The official route takes 4, 6 or 8, and resolution 1080p or 4k takes 8 only; the economy route is fixed at 8. action: "extend" does not take this parameter — the continuation’s length is decided upstream.
string
default:"720p"
Output resolution: 720p, 1080p or 4k. Also accepted under action: "extend", where it defaults to 720p; a 4k extension needs a 4k parent.
string
default:"16:9"
Frame ratio: 16:9 or 9:16.

Official route (veo3.1-fast / veo3.1-quality)

string
First-frame image URL.
string
Last-frame image URL; must be sent together with first_frame_image.
string
Negative prompt describing what to keep out of the video.
integer
Random seed, for reproducing a result.
boolean
default:"false"
Generate native audio. Enabling it moves the request to the audio pricing tier.
string
Person policy: allow_adult allows adult people / disallow generates none.
string
How to fit a frame image whose ratio differs from the output: pad or crop.

Economy route (veo3.1-lite / veo3.1-fast-rev / veo3.1-quality-rev)

string[]
Reference image URLs, supported by veo3.1-fast-rev and veo3.1-quality-rev; how many depends on generation_type. veo3.1-lite is text-to-video only and takes no images.
string
How the images are used; required whenever image_urls is present:
  • frame — treat them as first / last frames; 1-2 images
  • reference — treat them as reference material; 1-3 images, veo3.1-fast-rev only
boolean
default:"false"
Also output a GIF. Cannot be combined with resolution 1080p or 4k.
string
required
The parent task being extended; required under action: "extend". Use the task_id returned by the generate task.
boolean
default:"false"
Under action: "extend", whether to return only the newly generated segment. false returns the joined clip.
See Submit a task for callback_url, callback_events, Prefer: wait, Idempotency-Key, and the maximum-cost header. The official route does not support image_urls, generation_type, enable_gif, ref_task_id or raw; the economy route does not support first_frame_image, last_frame_image, negative_prompt, seed, generate_audio, person_generation or resize_mode. Any other parameter returns 400 and is not billed.

Limits

The ref_task_id on action: "extend" must point at a completed generate task on the same model. Pointing at another model, another action or an unfinished task returns 400 and is not billed.

Pricing

Official route

veo3.1-fast and veo3.1-quality are billed resolution tier × seconds: resolution picks the tier (720p, 1080p or 4k), and the seconds come from duration (4, 6 or 8; 1080p and 4k take 8 only). generate_audio: true switches to the audio tier’s per-second rate, still multiplied by duration alone. All three resolutions have an audio tier. Frame images, negative_prompt and seed do not affect the price.

Economy route

veo3.1-lite, veo3.1-fast-rev and veo3.1-quality-rev are billed per finished clip: one charge per generation, independent of length (output is always eight seconds). Resolution is the only tiering dimension; the number of reference images and the generation_type do not affect the price. action: "extend" is also one charge per finished clip, independent of how long the continuation is, tiered by the resolution in the request (720p when omitted); raw does not affect the price.
Per-model rates are in price_config on GET /v1/models, and in the console’s Model Market.What a single call actually cost is the cost field on the task response — an integer quota at 500,000 quota = 1 USD.
You are only billed for a successfully generated video. Failed and cancelled tasks, and tasks that return no usable video, are refunded in full. The final charge is the cost field on the task response — an integer quota, not dollars.

Response

Completed task
Generated videos are returned in result.videos; expires_at is when the link stops working, so store the file before then. See Query Task Status for the full field list.

Available models

Official route — billed per second, with frame control and native audio. Economy route — one price per finished clip, always eight seconds, no native audio.