Skip to main content
Generate videos with Google’s Veo 3.1 modes through the unified task API. Veo 3.1 supports text-to-video, first-frame, first-and-last-frame, and reference-to-video workflows.

Models

ModeModel IDCharacter referencesNotes
Litegoogle/veo-3.1-liteYesBalanced default
Fastgoogle/veo-3.1-fastYesFaster generation
Qualitygoogle/veo-3.1-qualityNoHigher quality text/image-to-video, but no character references
Lite Relaxedgoogle/veo-3.1-lite-relaxedYesRelaxed queue variant

Parameters

ParameterTypeRequiredDefaultDescription
promptstringYes-Main video prompt. Use @ImageN or @CharacterN to point at a specific reference. Unknown references are left as plain text.
seedintegerNoRandomSeed sent to Veo. If omitted, a seed is generated automatically and returned when available.
aspect_ratiostringNo"16:9"Output orientation. Allowed: "16:9", "9:16".
durationintegerNo4Text/start-frame requests allow 4, 6, or 8. Any reference_image_urls or reference_characters reference locks duration to 8.
start_image_urlstringNo-Publicly reachable image URL used as the first frame. Cannot be combined with reference_image_urls or reference_characters.
end_image_urlstringNo-Publicly reachable image URL used as the final frame. Requires start_image_url; cannot be used by itself.
reference_image_urlsstring[]No-Image references for reference-to-video. Max 3 total expanded image URLs across reference_image_urls and character images. Cannot be combined with start/end frame fields.
reference_charactersarrayNo-Character references for reference-to-video. Max 3 total expanded image URLs across images and character image_urls. Not available on Quality.
voicestringNo-Request-level Google Flow voice preset ID. Requires at least one image or character reference. See available voices.
allow_audio_filteredbooleanNofalseWhen true, the generation runs without audio instead of failing when the audio track is filtered.
First/last-frame mode and reference mode are separate generation modes. Do not combine start_image_url or end_image_url with reference_image_urls or reference_characters.

Text-to-Video

curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "google/veo-3.1-fast",
    "input": {
      "prompt": "A cinematic shot of a cat walking through a garden",
      "aspect_ratio": "16:9",
      "duration": 4
    }
  }'

First and Last Frame

Use start_image_url and optionally end_image_url to guide the video with first and final frames.
curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "google/veo-3.1-fast",
    "input": {
      "prompt": "Camera slowly zooms in",
      "start_image_url": "https://example.com/start.jpg",
      "end_image_url": "https://example.com/end.jpg",
      "aspect_ratio": "16:9",
      "duration": 6
    }
  }'

References and Characters

Use reference_image_urls for image references and reference_characters for character identity consistency. Character references are supported on Lite, Fast, and Lite Relaxed. They are not supported on Quality.
curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "google/veo-3.1-fast",
    "input": {
      "prompt": "Make @Character1 walk through a glass city at sunrise, speaking softly to camera.",
      "reference_characters": [
        {
          "image_urls": [
            "https://example.com/ada.png"
          ],
          "name": "Ada",
          "description": "warm, sharp, curious"
        }
      ],
      "duration": 8,
      "aspect_ratio": "9:16"
    }
  }'

Character References

Provide each character as an object with image_urls. Even one-image characters must use an array.
{
  "image_urls": [
    "https://example.com/character-front.png",
    "https://example.com/character-profile.png"
  ],
  "name": "Ada",
  "description": "warm, sharp, curious"
}
FieldTypeRequiredDescription
image_urlsstring[]Yes*Publicly reachable character image URLs. Use 1-10 images for a character entity. Each URL still consumes a model reference-image slot.
namestringNoDisplay name for the character.
descriptionstringNoCharacter notes/personality text.
*image_urls must contain at least one URL.
image_url and plain string character entries are not supported. Use image_urls for every character, including one-image characters.

Prompt References

TokenRefers to
@Image1, @Image2Items from reference_image_urls only
@Character1, @Character2Items from reference_characters only. With multiple image_urls, the token points to the character item; extra images are identity references

Duration

ModeWhat you send4s6s8s
Text-to-videoprompt onlyYesYesYes
First-frameprompt + start_image_urlYesYesYes
First-and-last-frameprompt + start_image_url + end_image_urlYesYesYes
Reference-to-videoreference_image_urls or reference_charactersNoNoYes

Rejected Combinations

InputWhy rejected
end_image_url without start_image_urlThe ending frame needs a starting frame.
start_image_url/end_image_url with reference_image_urls or reference_charactersFirst/last-frame mode and reference mode are separate generation modes.
reference_characters on google/veo-3.1-qualityQuality does not expose character references.
Any image or character reference with duration other than 8Veo reference-image generation is 8 seconds only.
More than 3 total expanded image URLsVeo reference generation limit.
image_url on a characterUse image_urls instead, even for one image.
Plain string character entriesCharacter entries must be objects with image_urls.
Empty image_urlsA character needs at least one image.
More than 10 image_urls on one characterCharacter entity image limit.

Extend

Extend a previously generated video using google/veo-3.1-extend. The aspect ratio is inherited from the source task.
ParameterTypeRequiredDescription
promptstringYesText prompt for the extended content
task_idstringYesTask ID of a completed generation
modelstringYesOne of: lite, fast, quality, lite-relaxed
durationintegerNoMust be 8. Default 8.
seedintegerNoReproducibility seed

Upscale

Upscale a completed video to a higher resolution using google/veo-3.1-upscale.
ParameterTypeRequiredDescription
task_idstringYesTask ID of a completed generation
resolutionstringYes"1080p" or "4k"

Response

{
  "code": 200,
  "success": true,
  "data": {
    "task_id": "abc123def456",
    "status": "pending"
  }
}