Create video using LTX models

June 3, 2025 (July 23, 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 LTX Studio’s LTX models (LTX-Video) from image inputs.

https://api.useapi.net/v1/ltxstudio/videos/ltx-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": "ltxv-turbo",
  "duration": "3",
  "aspectRatio": "16:9",
  "intensity": "medium",
  "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 optional, asset ID for the starting frame (use field fileId from POST /assets)
  • endAssetId is optional, asset ID for the ending frame (use field fileId from POST /assets)
  • model is optional, LTX model to use.
    Supported values: ltxv, ltxv-turbo.
    Default is ltxv-turbo.
  • duration is optional, video duration in seconds.
    Supported values: 3, 5, 7, 9, 15, 30.
    Default is 3.
  • aspectRatio is optional, video aspect ratio.
    Supported values: 16:9, 9:16, 1:1.
    Default is 16:9.
  • intensity is optional, motion intensity level.
    Supported values: low, medium, high.
    Default is medium.
  • 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.

Note: Either startAssetId or endAssetId (or both) must be provided.

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/model-serving/…",
                "expirationDateString": "1748919477350",
                "asset": {
                    "type": "artifact",
                    "fileId": "asset:3b18…-type:video/mp4",
                    "mimeType": "video/mp4",
                    "artifactSubtype": "model-serving"
                }
            }
        },
        "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": "startAssetId or endAssetId is required",
      "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/ltx-create" \
       -H "Authorization: Bearer …" \
       -H "Content-Type: application/json" \
       -d '{
         "prompt": "A serene landscape with flowing water",
         "startAssetId": "asset:3b18…-type:image/png",
         "model": "ltxv-turbo",
         "duration": "3",
         "aspectRatio": "16:9",
         "intensity": "medium",
         "audioSFX": true,
         "pollForResult": 10
       }'
    
  • const token = "API token";
    const apiUrl = "https://api.useapi.net/v1/ltxstudio/videos/ltx-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": "ltxv-turbo",
        "duration": "3",
        "aspectRatio": "16:9",
        "intensity": "medium",
        "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/ltx-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": "ltxv-turbo",
        "duration": "3",
        "aspectRatio": "16:9",
        "intensity": "medium",
        "audioSFX": True,
        "pollForResult": 10
    }
    response = requests.post(apiUrl, headers=headers, json=data)
    print(response, response.json())
    
Try It