Create video using Veo2 and Veo3 models
June 18, 2025 (August 25, 2025)
Table of contents
This endpoint creates a video using Google’s Veo models.
Parameter | Veo2 (image+text to video) | Veo3 (image+text to video) | Veo3-Fast (text to video) |
---|---|---|---|
prompt | Optional | Optional | Optional |
startAssetId | Required | Optional | Optional |
duration, sec | 5 (default), 6 , 7 , 8 | 8 (default) | 8 (default) |
aspectRatio | 16:9 (default), 9:16 | 16:9 (default) | 16:9 (default) |
audioSFX | Optional | Optional | Optional |
resolution | not supported (720p) | 720p /1080p (default) | 720p /1080p (default) |
https://api.useapi.net/v1/ltxstudio/videos/veo-create
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API token
is required, see Setup useapi.net for details.
Request Body
{
"prompt": "A serene landscape with flowing water",
"startAssetId": "asset:3b18…-type:image/png",
"model": "veo2",
"duration": "5",
"aspectRatio": "16:9",
"audioSFX": true,
"seed": 123456
}
email
is optional when only one account configured.
However, if you have multiple accounts configured, this parameter becomes required.model
is optional, Veo model to use.
Supported values:veo2
,veo3
,veo3-fast
.
Default isveo2
.prompt
is optional, text description for video generation (max 2000 characters)startAssetId
is optional, asset ID for the starting frame. Use fieldfileId
from POST assets/?type=reference-image or GET assets/?filter=images.duration
is optional, video duration in seconds.aspectRatio
is optional, video aspect ratio.audioSFX
is optional, enable automatic sound effects generation.
Available for all models. Forveo2
, generates separate audio track.
Forveo3
andveo3-fast
, controls whether to include audio in video generation.
Default isfalse
.resolution
is optional, available forveo3
andveo3-fast
.
Supported values:720p
,1080p
(default).seed
is optional, random seed for reproducible results.
Default is random.pollForResult
is optional, number of polling attempts to wait for completion (each attempt waits 3 seconds, up to 60 seconds total max) before sending job to the scheduler.
For example,pollForResult: 5
will poll every 3 seconds for up to 15 seconds total.
Supported values: 1-20.
Default is immediate return with jobId.maxJobs
is optional, override the default maximum number of concurrent jobs.replyUrl
is optional, webhook URL for job completion notifications.
See GET assets/jobId
for response model.replyRef
is optional, custom reference for webhook identification.
Responses
-
{ "jobId": "email:[email protected]:7a34b821-9fd0-205e-d21b-4abc6f7839e7-type:video", "generationId": "gen_abc123def456" }
-
200 OK (pollForResult completed)
{ "status": { "type": "completed", "progress": 100, "artifact": { "assetUrl": "https://storage.googleapis.com/lt-infinity-prd/artifacts/vertex-ai/…", "expirationDateString": "1748919477350", "asset": { "type": "artifact", "fileId": "asset:3b18…-type:video/mp4", "mimeType": "video/mp4", "artifactSubtype": "vertex-ai" } } }, "jobId": "email:[email protected]:7a34b821-9fd0-205e-d21b-4abc6f7839e7-type:video", "replyRef": "custom-reference-123", "replyUrl": "https://webhook.example.com/ltx-callback", "code": 200 }
-
{ "error": "Error message", "code": 400 }
-
{ "error": "Unauthorized", "code": 401 }
-
{ "error": "Insufficient credits", "code": 402 }
Model
Use GET assets/jobId
to retrieve job status and results if they were not provided with the response.
{ // TypeScript, all fields are optional
status: {
type: 'active' | 'completed' | 'failed'
progress?: number
message?: string
artifact?: {
assetUrl: string
expirationDateString: string
asset: {
type: string
fileId: string
mimeType: string
artifactSubtype: string
}
}
}
jobId?: string
generationId?: string
replyRef?: string
replyUrl?: string
code?: number
}
Examples
-
curl "https://api.useapi.net/v1/ltxstudio/videos/veo-create" \ -H "Authorization: Bearer …" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A serene landscape with flowing water", "startAssetId": "asset:3b18…-type:image/png", "model": "veo3-fast", "audioSFX": true, "pollForResult": 10 }'
-
const token = "API token"; const apiUrl = "https://api.useapi.net/v1/ltxstudio/videos/veo-create"; const response = await fetch(apiUrl, { method: "POST", headers: { "Authorization": `Bearer ${token}`, "Content-Type": "application/json", }, body: JSON.stringify({ "prompt": "A serene landscape with flowing water", "startAssetId": "asset:3b18…-type:image/png", "model": "veo3-fast", "audioSFX": true, "pollForResult": 10 }) }); const result = await response.json(); console.log("response", {response, result});
-
import requests token = "API token" apiUrl = "https://api.useapi.net/v1/ltxstudio/videos/veo-create" headers = { "Authorization" : f"Bearer {token}", "Content-Type": "application/json" } data = { "prompt": "A serene landscape with flowing water", "startAssetId": "asset:3b18…-type:image/png", "model": "veo3-fast", "audioSFX": True, "pollForResult": 10 } response = requests.post(apiUrl, headers=headers, json=data) print(response, response.json())