Create video using Veo models

June 3, 2025

Table of contents

  1. Request Headers
  2. Request Body
  3. Responses
  4. Model
  5. Examples
  6. Try It

This endpoint creates a video using Google’s Veo models from image inputs.

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
Request Body
{
  "prompt": "A serene landscape with flowing water",
  "startAssetId": "asset:3b18…-type:image/png",
  "model": "veo2",
  "duration": "5",
  "aspectRatio": "16:9",
  "seed": 123456,
  "audioSFX": true
}
  • email is optional when only one account configured.
    However, if you have multiple accounts configured, this parameter becomes required.
  • prompt is required, text description for video generation (max 2000 characters)
  • startAssetId is required, asset ID for the starting frame (use field fileId from POST /assets)
  • model is optional, Veo model to use.
    Supported values: veo2.
    Default is veo2.
  • duration is optional, video duration in seconds.
    Supported values: 5, 6, 7, 8.
    Default is 5.
  • aspectRatio is optional, video aspect ratio.
    Supported values: 16:9, 9:16, 1:1.
    Default is 16:9.
  • seed is optional, random seed for reproducible results.
    Default is random.
  • audioSFX is optional, enable automatic sound effects generation.
    Default is false.
  • 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
  • 200 OK (Job Created)

    {
        "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
    }
    
  • 400 Bad Request

    {
      "error": "Error message",
      "code": 400
    }
    
  • 401 Unauthorized

    {
      "error": "Unauthorized",
      "code": 401
    }
    
  • 402 Payment Required

    {
      "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())
    
Try It