Google Veo3.1 Lite Start End To Video API Documentation

Google Veo3.1 Lite Start End To Video API Documentation

Playground

Try it on WaveSpeedAI!

Google Veo 3.1 Lite Start-End-to-Video generates high-fidelity videos by interpolating between a start image and an optional end image. Supports 720p and 1080p resolutions, landscape and portrait aspect ratios, and native audio generation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Veo 3.1 Lite Start-End-to-Video generates a smooth, cinematic video transition between two images. Upload a start frame and an end frame, describe the scene — the model produces a natural, motion-consistent clip that flows seamlessly from one image to the other.


Why Choose This?

  • Start-to-end frame transitions Generates a coherent video that naturally bridges two distinct images with smooth, believable motion.

  • Prompt-guided transformation Describe how the transition should unfold — environmental changes, camera movements, seasonal shifts, and more.

  • Negative prompt support Specify what to avoid in the transition for more precise control over the output.

  • Resolution options Generate at 720p or 1080p to match your quality and budget requirements.

  • Flexible aspect ratios Supports multiple orientations for social, cinematic, and broadcast formats.

  • Reproducible results Use the seed parameter to lock in a specific output for exact reproduction.


Parameters

ParameterRequiredDescription
promptYesText description of the desired transition and scene.
imageYesStart frame image (URL or file upload).
last_imageYesEnd frame image to transition toward (URL or file upload).
aspect_ratioNoOutput aspect ratio. Default: 16:9.
resolutionNoOutput resolution: 720p (default) or 1080p.
negative_promptNoElements to exclude from the generated transition.
seedNoRandom seed for reproducible results.

How to Use

  1. Upload your start image — provide the opening frame of the transition.
  2. Upload your end image — provide the target frame to transition toward.
  3. Write your prompt — describe how the transition should unfold. Use the Prompt Enhancer for better results.
  4. Select aspect ratio — choose the format that fits your target platform.
  5. Select resolution — 720p for standard output, 1080p for higher-quality results.
  6. Add negative prompt (optional) — specify elements you want to avoid in the transition.
  7. Set seed (optional) — fix the seed to reproduce a specific result in future runs.
  8. Submit — generate, preview, and download your transition video.

Pricing

ResolutionCost per Generation
720p$0.40
1080p$0.64

Best Use Cases

  • Seasonal & Time-lapse Transitions — Shift between different seasons, times of day, or weather conditions from the same scene.
  • Scene Changes — Bridge two distinct environments or locations with a cinematic transition.
  • Social Media Content — Create eye-catching before-and-after transition clips for Reels and TikTok.
  • Marketing & Advertising — Transition between product states or campaign visuals.
  • Creative Storytelling — Connect two visual moments with a natural, motioned bridge.

Pro Tips

  • Use images of the same scene or subject from different states for the most natural transition results.
  • Be specific in your prompt about what changes between the two frames — lighting, season, atmosphere, or subject state.
  • Use 720p to test your transition concept before committing to a 1080p final render.
  • Fix the seed once you find a result you like to iterate consistently.

Notes

  • prompt, image, and last_image are all required fields.
  • 4K output is not supported on this model.
  • You will only be charged if your video is successfully generated.
  • Please follow Google’s content usage policies when crafting prompts.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "last_image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "aspect_ratio": "16:9",
  "resolution": "720p"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/google/veo3.1-lite/start-end-to-video" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}")
  RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-The positive prompt for the generation.
imagestringYes-The image to use for the generation.
last_imagestringYes--The last image to use for the generation.
aspect_ratiostringNo16:916:9, 9:16The aspect ratio of the generated media.
resolutionstringNo720p720p, 1080pVideo resolution.
negative_promptstringNo-The negative prompt for the generation.
seedintegerNo--The random seed to use for the generation.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.