LTX API

The LTX API generates video from text, images and audio using the LTX-2.3 model family. It exposes a synchronous v1 surface that returns the rendered file directly and an asynchronous v2 surface that accepts a job, returns 202 with a job id, and is polled at GET /v2/{endpoint}/{id} until the job reaches a terminal completed or failed state. Endpoints cover text-to-video, image-to-video, audio-to-video, retake, extend, HDR upscale, reframe and file upload. Authentication is a bearer API key issued from the developer console; billing is per second of generated or input media.

OpenAPI Specification

lightricks-ltx-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: API Reference
  version: 1.0.0
paths:
  /v1/text-to-video:
    post:
      operationId: 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.


        Returns the generated video directly in the response. For an asynchronous version that returns a job to poll,
        see [v2/text-to-video](/api-documentation/api-reference/async-video-generation/submit-text-to-video).


        Billed per second of generated video. See [Pricing](/pricing).
      tags:
        - videoGeneration
      parameters:
        - name: Authorization
          in: header
          description: API key authentication
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Video generated successfully
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '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'
        '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'
        '504':
          description: Request timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TextToVideoRequest'
  /v1/image-to-video:
    post:
      operationId: 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.


        Returns the generated video directly in the response. For an asynchronous version that returns a job to poll,
        see [v2/image-to-video](/api-documentation/api-reference/async-video-generation/submit-image-to-video).


        Billed per second of generated video. See [Pricing](/pricing).
      tags:
        - videoGeneration
      parameters:
        - name: Authorization
          in: header
          description: API key authentication
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Video generated successfully
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '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'
        '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'
        '504':
          description: Request timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImageToVideoRequest'
  /v1/audio-to-video:
    post:
      operationId: 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. Output video
        is 25 fps.


        Returns the generated video directly in the response. For an asynchronous version that returns a job to poll,
        see [v2/audio-to-video](/api-documentation/api-reference/async-video-generation/submit-audio-to-video).


        Billed per second of input audio. See [Pricing](/pricing).
      tags:
        - videoGeneration
      parameters:
        - name: Authorization
          in: header
          description: API key authentication
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Video generated successfully
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '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'
        '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'
        '504':
          description: Request timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AudioToVideoRequest'
  /v1/retake:
    post:
      operationId: retake
      summary: Retake video section
      description: >
        Re-generate a section of an existing video by replacing either its audio, its video, or both. Iterate on part of
        a generation without starting over — the rest of the video is preserved. The edited section is defined by the
        `start_time` and `duration` parameters.


        Returns the generated video directly in the response. For an asynchronous version that returns a job to poll,
        see [v2/retake](/api-documentation/api-reference/async-video-generation/submit-retake).


        Billed per second of the input video. See [Pricing](/pricing).
      tags:
        - videoGeneration
      parameters:
        - name: Authorization
          in: header
          description: API key authentication
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Video edited successfully
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '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'
        '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'
        '504':
          description: Request timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditVideoRequest'
  /v1/extend:
    post:
      operationId: 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.

        > Audio is generated for the extended portion if the input video has audio.


        Returns the generated video directly in the response. For an asynchronous version that returns a job to poll,
        see [v2/extend](/api-documentation/api-reference/async-video-generation/submit-extend).


        Billed per second, based on the extended portion plus the context frames used from the input video. See
        [Pricing](/pricing).
      tags:
        - videoGeneration
      parameters:
        - name: Authorization
          in: header
          description: API key authentication
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Video extended successfully
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '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'
        '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'
        '504':
          description: Request timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExtendVideoRequest'
  /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'
  /v1/upload:
    post:
      operationId: create-upload
      summary: Upload file

# --- truncated at 32 KB (57 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lightricks/refs/heads/main/openapi/lightricks-ltx-openapi.yml