Create video using Veo2 and Veo3 models
June 18, 2025 (August 5, 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 | Required |
startAssetId | Required | Optional | Not used |
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 |
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)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
.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": "veo2", "duration": "5", "aspectRatio": "16:9", "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": "veo2", "duration": "5", "aspectRatio": "16:9", "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": "veo2", "duration": "5", "aspectRatio": "16:9", "audioSFX": True, "pollForResult": 10 } response = requests.post(apiUrl, headers=headers, json=data) print(response, response.json())