Google Veo3.1 Lite Text To Video API Documentation

Google Veo3.1 Lite Text To Video API Documentation

Playground

Try it on WaveSpeedAI!

Google Veo 3.1 Lite Text-to-Video generates high-fidelity 720p or 1080p videos with natively generated audio from text prompts. Lightweight variant optimized for cost efficiency. Supports landscape and portrait aspect ratios, dialogue with lip-sync, and customizable duration. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Veo 3.1 Lite is an efficient text-to-video model, generating high-quality cinematic video from natural language prompts at accessible pricing. With native synchronized audio generation, negative prompt guidance, landscape and portrait aspect ratios, and resolution up to 1080p, it delivers strong results for a wide range of creative and production workflows.


Why Choose This?

  • High-quality video generation Produces detailed, visually coherent video with natural motion, lighting, and scene composition from text descriptions.

  • Negative prompt guidance Describe unwanted elements to guide generation. Exclusion of specific elements is not guaranteed.

  • Resolution options Generate at 720p or 1080p to match your quality and budget requirements. 1080p requires an 8-second duration.

  • Flexible aspect ratios Supports landscape 16:9 and portrait 9:16 for cinematic and social formats.

  • Seed control Set a seed when experimenting with generation settings. Identical outputs are not guaranteed.

  • Synchronized audio Generates audio alongside the video. Describe dialogue, sound effects, and ambient sounds in your prompt.


Parameters

ParameterRequiredDescription
promptYesText description of the scene, motion, camera style, and atmosphere. May include dialogue and sound cues.
aspect_ratioNoOutput aspect ratio: 16:9 or 9:16. Default: 16:9.
durationNoClip length in seconds: 4, 6, or 8. Default: 6. Must be 8 when resolution is 1080p.
resolutionNoOutput resolution: 720p or 1080p. Default: 720p. 1080p requires duration to be 8.
negative_promptNoGuidance describing elements to avoid in the generated video; exclusion is not guaranteed.
seedNoRandom seed for generation. Does not guarantee identical results.

How to Use

  1. Write your prompt — describe the scene, characters, camera movement, lighting, and atmosphere. Include sound effects or dialogue if needed.
  2. Select aspect ratio — choose 16:9 for landscape or 9:16 for portrait.
  3. Set duration — choose 4, 6, or 8 seconds. Select 8 seconds if you plan to use 1080p.
  4. Select resolution — 720p for standard output, 1080p for higher-resolution results. When selecting 1080p, explicitly set duration to 8.
  5. Add negative prompt (optional) — describe elements you want the model to avoid.
  6. Set seed (optional) — specify a seed for controlled experimentation, without expecting exact reproduction.
  7. Submit — generate, preview, and download your video.

Pricing

ResolutionDurationCost
720p4s$0.20
720p6s$0.30
720p8s$0.40
1080p8s$0.64

Best Use Cases

  • Cinematic Storytelling — Render atmospheric, narrative-driven scenes from detailed text descriptions.
  • Social Media Content — Generate platform-optimized video clips with synchronized audio.
  • Marketing & Advertising — Produce high-quality promotional video content without a film crew.
  • Concept Visualization — Bring creative ideas and moods to life quickly for pitching and review.
  • Audio-Visual Content — Describe ambient sounds, dialogue, and sound effects for immersive scenes.

Pro Tips

  • Be specific in your prompt — include camera angle, lighting style, subject behavior, and atmosphere.
  • Use negative_prompt as guidance for unwanted elements rather than a strict exclusion rule.
  • Use 720p to rapidly test and iterate on prompts before committing to an 8-second 1080p final render.
  • Keep the prompt and settings consistent when comparing results; a fixed seed does not guarantee identical output.
  • Include clear audio cues in your prompt when particular sounds or dialogue are important.

Notes

  • Only prompt is required; all other parameters are optional.
  • The default output settings are 720p, 6 seconds, and 16:9.
  • Selecting 1080p requires explicitly setting duration to 8; the default 6-second duration is not valid at 1080p.
  • Audio generation is enabled by default.
  • Please follow applicable 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",
  "aspect_ratio": "16:9",
  "duration": 6,
  "resolution": "720p"
}
JSON
)

# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --connect-timeout 10 --max-time 60 \
  -X POST "https://api.wavespeed.ai/api/v3/google/veo3.1-lite/text-to-video" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"); then
  printf 'Submit failed. %s\n' "${CHECK}" >&2
  exit 1
fi

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. %s\n' "${CHECK}" >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
  # Transient errors (429, 5xx) are retried, honoring Retry-After.
  HTTP_CODE=$(curl --silent --show-error --fail-with-body \
    --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
    --output "${BODY_FILE}" --write-out '%{http_code}' \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
  case "${HTTP_CODE}" in
    2??) ;;
    000|429|5??)  # dropped connection or temporary error: keep polling
      printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      sleep 10; continue ;;
    *) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      cat "${BODY_FILE}" >&2; exit 1 ;;
  esac
  RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted)
      printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
      printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-Text prompt for generation; Positive text prompt.
aspect_ratiostringNo16:916:9, 9:16Aspect ratio of the video.
durationintegerNo68, 6, 4The duration of the generated media in seconds.
resolutionstringNo720p720p, 1080pVideo resolution.
negative_promptstringNo-Negative prompt for the generation.
seedintegerNo--The random seed to use for the generation.

Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.

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.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
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.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
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.