Create video using Veo2 and Veo3 models
June 18, 2025
Table of contents
This endpoint creates a video using Google’s Veo models.
Parameter | Veo2 (image+text to video, no sound) | Veo3 (text to video, with sound) |
---|---|---|
prompt | Optional | Required |
startAssetId | Required | Not used |
duration, sec | 5 (default), 6 , 7 , 8 | 8 (default) |
aspectRatio | 16:9 (default), 9:16 , 1:1 | 16:9 (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",
"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
.
Default isveo2
.prompt
is required forveo3
and optional forveo2
, text description for video generation (max 2000 characters)startAssetId
is required forveo2
, asset ID for the starting frame (use fieldfileId
from POST /assets/?type=reference-image)
Required forveo2
, not used forveo3
.duration
is optional, video duration in seconds.
Supported values forveo2
:5
,6
,7
,8
.
Supported values forveo3
:8
.
Default is5
.aspectRatio
is optional, video aspect ratio.
Supported values forveo2
:16:9
,9:16
,1:1
.
Supported values forveo3
:16:9
.
Default is16:9
.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", "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", "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", "pollForResult": 10 } response = requests.post(apiUrl, headers=headers, json=data) print(response, response.json())