openapi: 3.1.0
info:
title: API Reference asyncVideoGeneration API
version: 1.0.0
servers:
- url: https://api.ltx.video
description: Production server
tags:
- name: asyncVideoGeneration
paths:
/v2/text-to-video:
post:
operationId: submit-text-to-video
summary: Generate video from text
description: 'Generate a video from a text prompt. Describe the scene, camera motion, and mood — the model returns a video with matching audio.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/text-to-video/{id}` until the status is `completed`, then download from `result.video_url`.
Billed per second of generated video. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TextToVideoRequest'
/v2/image-to-video:
post:
operationId: submit-image-to-video
summary: Generate video from image
description: 'Animate a still image with realistic motion, depth, and audio. Provide a reference image plus a prompt describing the desired motion. The output preserves the visual identity of the source image.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/image-to-video/{id}` until the status is `completed`, then download from `result.video_url`.
Billed per second of generated video. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ImageToVideoRequest'
/v2/audio-to-video:
post:
operationId: submit-audio-to-video
summary: Generate video from audio
description: 'Generate a video driven by an audio track. Supply dialogue, music, or ambient sound and the model produces visuals synchronized to the audio. Optionally condition on a reference image for visual direction.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/audio-to-video/{id}` until the status is `completed`, then download from `result.video_url`.
Billed per second of input audio. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AudioToVideoRequest'
/v2/retake:
post:
operationId: submit-retake
summary: Retake video section
description: 'Re-generate a section of an existing video by replacing either its audio, its video, or both. Select a time range and mode to iterate on part of a generation without starting over — the rest of the video is preserved.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/retake/{id}` until the status is `completed`, then download from `result.video_url`.
Billed per second of the input video. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EditVideoRequest'
/v2/extend:
post:
operationId: submit-extend
summary: Extend video duration
description: 'Extend a video by generating additional frames at the beginning or end. The model uses context frames from the input to produce a seamless continuation with consistent motion and audio.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/extend/{id}` until the status is `completed`, then download from `result.video_url`.
Billed per second, based on the extended portion plus the context frames used from the input video. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExtendVideoRequest'
/v2/video-to-video-hdr:
post:
operationId: submit-video-to-video-hdr
summary: Upscale video to HDR
description: 'Convert an SDR video into HDR. On completion, the result contains `exr_frames_url` — a ZIP of per-frame EXR images suitable for color grading or HDR rendering pipelines.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/video-to-video-hdr/{id}` until the status is `completed`.
Billed per second of input video, by input resolution tier. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VideoToVideoHdrRequest'
/v2/video-to-video-reframe:
post:
operationId: submit-video-to-video-reframe
summary: Reframe a video to a new resolution
description: 'Reframe a video to a new resolution. The model fills in the missing areas with generated content that matches the original. On completion, the result contains `video_url`, the source video reframed to the requested resolution.
Responds immediately with the job `id` and `created_at` timestamp. Poll `GET /v2/video-to-video-reframe/{id}` until the status is `completed`.
Billed per second of input video, by output resolution. See [Pricing](/pricing).
'
tags:
- asyncVideoGeneration
parameters:
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'202':
description: Job submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobCreatedResponse'
'400':
description: The request is invalid or malformed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Content rejected by safety filters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/VideoToVideoReframeRequest'
/v2/{endpoint}/{id}:
get:
operationId: get-job-status
summary: Get job status
description: 'Poll the status of an async generation job. Status transitions through `pending` → `processing` → `completed` or `failed`. When completed, the `result` object contains output URLs (see each endpoint''s documentation for the available keys). Poll every 5 seconds and stop when the status reaches `completed` or `failed`. Status and output URLs are available for 24 hours after the job reaches a terminal state. After expiry this endpoint returns `404`.
'
tags:
- asyncVideoGeneration
parameters:
- name: id
in: path
description: Job ID returned from the submit endpoint.
required: true
schema:
type: string
- name: endpoint
in: path
description: The endpoint type used when submitting the job (e.g., `text-to-video`, `image-to-video`, `audio-to-video`, `retake`, `extend`, `video-to-video-hdr`, `video-to-video-reframe`).
required: true
schema:
$ref: '#/components/schemas/V2EndpointIdGetParametersEndpoint'
- name: Authorization
in: header
description: API key authentication
required: true
schema:
type: string
responses:
'200':
description: Current job status
content:
application/json:
schema:
$ref: '#/components/schemas/V2JobStatusResponse'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
V2JobError:
type: object
properties:
type:
type: string
description: Error type for programmatic handling. Same values as HTTP error types.
message:
type: string
description: Human-readable error description.
required:
- type
- message
description: 'Error details for a failed job. Uses the same error types as HTTP error responses
(`api_error`, `content_filtered_error`, `insufficient_funds_error`, etc.).
'
title: V2JobError
V2JobCreatedResponse:
type: object
properties:
id:
type: string
description: Unique job identifier. Use this to poll for status.
created_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the job was created.
required:
- id
- created_at
description: Response returned when a V2 async job is successfully submitted.
title: V2JobCreatedResponse
Error:
type: object
properties:
type:
$ref: '#/components/schemas/ErrorType'
description: Response type indicator
error:
$ref: '#/components/schemas/ErrorError'
required:
- type
- error
title: Error
AudioToVideoRequest:
type: object
properties:
audio_uri:
type: string
description: 'Audio file to be used as the soundtrack for the video. Duration must be between 2 and 20 seconds.
See [Input Formats](/input-formats#audio-input) for supported formats and size limits.
'
image_uri:
type: string
description: Input image to be used as the first frame of the video. Required if prompt is not provided. See [Input Formats](/input-formats#image-input) for supported formats and size limits.
prompt:
type: string
description: Text description of how the video should be generated. Required if image_uri is not provided. Can be empty string when image_uri is provided. If image_uri is provided, this describes how the image should be animated. If no image_uri is provided, this describes the video content.
resolution:
$ref: '#/components/schemas/AudioToVideoRequestResolution'
description: 'The resolution of the generated video in WIDTHxHEIGHT format. When omitted, the resolution is automatically determined based on the input image orientation — portrait images produce 1080x1920 video, landscape images produce 1920x1080 video. If no image is provided, defaults to 1920x1080.
'
guidance_scale:
type: number
format: double
description: Optional guidance scale (also known as CFG) for video generation. Higher values make the output more closely follow the prompt but may reduce quality. Defaults to 5 for text-to-video, or 9 when providing an image.
model:
$ref: '#/components/schemas/AudioToVideoRequestModel'
description: 'Model to use for video generation.
> **Deprecated:** `ltx-2-pro` is deprecated. See the [LTX-2 Deprecation Notice](/ltx-2-deprecation).
'
required:
- audio_uri
title: AudioToVideoRequest
VideoToVideoReframeRequestResolution:
type: string
enum:
- 720x720
- 1080x1080
- 720x900
- 1080x1350
- 900x720
- 1350x1080
- 720x1280
- 1080x1920
- 1280x720
- 1920x1080
description: 'Target output resolution. The source video is extended to fill this frame. Pass one of the values below; each maps to an aspect ratio:
| Aspect ratio | Resolutions |
| --- | --- |
| 1:1 (square) | `720x720`, `1080x1080` |
| 4:5 (portrait) | `720x900`, `1080x1350` |
| 5:4 (landscape) | `900x720`, `1350x1080` |
| 9:16 (portrait) | `720x1280`, `1080x1920` |
| 16:9 (landscape) | `1280x720`, `1920x1080` |
'
title: VideoToVideoReframeRequestResolution
TextToVideoRequestModel:
type: string
enum:
- ltx-2-fast
- ltx-2-pro
- ltx-2-3-fast
- ltx-2-3-pro
description: 'Model to use for generation. See [Supported Models](/models) for details.
> **Deprecated:** `ltx-2-fast` and `ltx-2-pro` are deprecated. See the [LTX-2 Deprecation Notice](/ltx-2-deprecation).
'
title: TextToVideoRequestModel
AudioToVideoRequestResolution:
type: string
enum:
- 1920x1080
- 1080x1920
description: 'The resolution of the generated video in WIDTHxHEIGHT format. When omitted, the resolution is automatically determined based on the input image orientation — portrait images produce 1080x1920 video, landscape images produce 1920x1080 video. If no image is provided, defaults to 1920x1080.
'
title: AudioToVideoRequestResolution
TextToVideoRequest:
type: object
properties:
prompt:
type: string
description: Text prompt describing the desired video content
model:
$ref: '#/components/schemas/TextToVideoRequestModel'
description: 'Model to use for generation. See [Supported Models](/models) for details.
> **Deprecated:** `ltx-2-fast` and `ltx-2-pro` are deprecated. See the [LTX-2 Deprecation Notice](/ltx-2-deprecation).
'
duration:
type: integer
description: Video duration in seconds. See [Supported Models](/models) for available durations per model.
fps:
type: integer
default: 24
description: Frame rate in frames per second. See [Supported Models](/models) for available FPS per model and resolution.
resolution:
type: string
description: Output video resolution. See [Supported Models](/models) for available resolutions per model.
generate_audio:
type: boolean
default: true
description: Generate audio for the video. When true, the generated video will include AI-generated audio matching the scene. When false, only silent video is generated.
camera_motion:
$ref: '#/components/schemas/TextToVideoRequestCameraMotion'
description: Apply camera motion effects to the generated video.
required:
- prompt
- model
- duration
- resolution
title: TextToVideoRequest
ErrorError:
type: object
properties:
type:
type: string
description: Error type for programmatic handling
message:
type: string
description: Human-readable error description
required:
- type
- message
title: ErrorError
V2EndpointIdGetParametersEndpoint:
type: string
enum:
- text-to-video
- image-to-video
- audio-to-video
- retake
- extend
- video-to-video-hdr
- video-to-video-reframe
title: V2EndpointIdGetParametersEndpoint
V2JobFailedStatus:
type: string
enum:
- failed
title: V2JobFailedStatus
V2JobResult:
type: object
additionalProperties:
type: string
format: uri
description: 'Result object for a completed job. Contains output URLs — the available keys depend on the endpoint. Available for 24 hours after completion.
'
title: V2JobResult
V2JobProcessingStatus:
type: string
enum:
- processing
title: V2JobProcessingStatus
V2JobPendingStatus:
type: string
enum:
- pending
title: V2JobPendingStatus
VideoToVideoReframeRequestModel:
type: string
enum:
- ltx-2-3-pro
description: 'Model used for reframing.
'
title: VideoToVideoReframeRequestModel
EditVideoRequest:
type: object
properties:
video_uri:
type: string
description: 'Input video for editing. See [Input Formats](/input-formats#video-input) for supported formats and codecs.
- Maximum resolution: 3840x2160 (4K)
- Minimum frame count: 73 (around 3 seconds at 24fps)
'
prompt:
type: string
description: 'Describing what needs to happen in the generated video in a section
defined by `start_time` and `duration`.
'
start_time:
type: number
format: double
description: 'Start time in seconds, defines the section to be edited in the input video.
The section defined by `start_time` and `duration` should be within the duration of the input video.
If the section extends beyond the duration of the video, it will be clamped to the video duration.
'
duration:
type: number
format: double
description: 'Duration in seconds, defines the duration of the section to be edited
in the input video. Must be at least 2 seconds.
The section defined by `start_time` and `duration` should be within the duration of the input video.
If the section extends beyond the duration of the video, it will be clamped to the video duration.
'
mode:
$ref: '#/components/schemas/EditVideoRequestMode'
description: 'Can be any of the following:
- `replace_audio` - Replace only the audio track
- `replace_video` - Replace only the video track
- `replace_audio_and_video` - Replace both audio and video tracks
The default value is `replace_audio_and_video` if not specified.
'
resolution:
$ref: '#/components/schemas/EditVideoRequestResolution'
description: 'The resolution of the generated video in WIDTHxHEIGHT format. When omitted, the resolution is automatically determined based on the input video orientation — portrait videos produce 1080x1920 output, landscape videos produce 1920x1080 output.
'
model:
$ref: '#/components/schemas/EditVideoRequestModel'
description: 'Model to use for video generation.
> **Deprecated:** `ltx-2-pro` is deprecated. See the [LTX-2 Deprecation Notice](/ltx-2-deprecation).
'
required:
- video_uri
- start_time
- duration
title: EditVideoRequest
ImageToVideoRequest:
type: object
properties:
image_uri:
type: string
description: Image to be used as the first frame of the video. See [Input Formats](/input-formats#image-input) for supported formats and size limits.
prompt:
type: string
description: Text description of how the image should be animated, can relate to the details in the image
model:
$ref: '#/components/schemas/ImageToVideoRequestModel'
description: 'Model to use for generation. See [Supported Models](/models) for details.
> **Deprecated:** `ltx-2-fast` and `ltx-2-pro` are deprecated. See the [LTX-2 Deprecation Notice](/ltx-2-deprecation).
'
duration:
type: integer
description: Video duration in seconds. See [Supported Models](/models) for available durations per model.
fps:
type: integer
default: 24
description: Frame rate in frames per second. See [Supported Models](/models) for available FPS per model and resolution.
resolution:
type: string
description: Output video resolution. See [Supported Models](/models) for available resolutions per model.
generate_audio:
type: boolean
default: true
description: Generate audio for the video. When true, the generated video will include AI-generated audio matching the scene. When false, only silent video is generated.
last_frame_uri:
type: string
description: 'Image to be used as the last frame of the video. When provided, the video will interpolate between the first frame (image_uri) and this last frame. See [Input Formats](/input-formats#image-input) for supported formats and size limits.
> Note: Only supported by `ltx-2-3` models (`ltx-2-3-fast`, `ltx-2-3-pro`).
'
camera_motion:
$ref: '#/components/schemas/ImageToVideoRequestCameraMotion'
description: Apply camera motion effects to the generated video.
required:
- image_uri
- prompt
- model
- duration
- resolution
title: ImageToVideoRequest
VideoToVideoHdrRequest:
type: object
properties:
video_uri:
type: string
description: 'SDR source video in HTTPS URL or base64 data URI format. See [Input Formats](/input-formats#video-input) for supported formats and codecs.
Max frames (and max duration at 24 fps) depend on the input resoluti
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lightricks/refs/heads/main/openapi/lightricks-asyncvideogeneration-api-openapi.yml