LTX 2.3 API, LTX 2 Pro API, LTX 2.0 API - AI Video Generation APIs
by Lightricks
LTX 2.3 API, users can access LTX-Video and LTX-2 variants for generating high-quality video content from text and images. The API is designed for creators and businesses needing production-ready video output with smooth motion and visual coherence.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
LTX v2.3 Text to Video API Documentation
https://gateway.pixazo.ai/ltx-2-3-text-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX-2.3 (Text to Video) generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-text-to-video/v1/ltx-2-3-text-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "Through-the-veil shot of a bride face during an Indian wedding ceremony, embroidered red dupatta texture, eyes lined with kohl, henna-covered hands, marigold garlands in soft bokeh, 85mm f/1.2, warm tungsten and candlelight, cinematic intimacy",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "16:9",
"fps": 25,
"generate_audio": true
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-3-text-to-video/v1/ltx-2-3-text-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "Through-the-veil shot of a bride face during an Indian wedding ceremony, embroidered red dupatta texture, eyes lined with kohl, henna-covered hands, marigold garlands in soft bokeh, 85mm f/1.2, warm tungsten and candlelight, cinematic intimacy",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "16:9",
"fps": 25,
"generate_audio": true
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-2-3-text-to-video/v1/ltx-2-3-text-to-video-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "Through-the-veil shot of a bride face during an Indian wedding ceremony, embroidered red dupatta texture, eyes lined with kohl, henna-covered hands, marigold garlands in soft bokeh, 85mm f/1.2, warm tungsten and candlelight, cinematic intimacy",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "16:9",
"fps": 25,
"generate_audio": true
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/ltx-2-3-text-to-video/v1/ltx-2-3-text-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "Through-the-veil shot of a bride face during an Indian wedding ceremony, embroidered red dupatta texture, eyes lined with kohl, henna-covered hands, marigold garlands in soft bokeh, 85mm f/1.2, warm tungsten and candlelight, cinematic intimacy",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "16:9",
"fps": 25,
"generate_audio": true
}'
Output
{
"request_id": "ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-text-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-text-to-video",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX-2.3 (Text to Video) generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text description for video generation. Must be detailed and descriptive for optimal results. |
| duration | No | enum | 6 | 6, 8, 10 | Duration of the generated video in seconds. |
| resolution | No | enum | 1080p | 1080p, 1440p, 2160p | Output video resolution. |
| aspect_ratio | No | enum | 16:9 | 16:9, 9:16 | Video aspect ratio. |
| fps | No | enum | 25 | 24, 25, 48, 50 | Frames per second of the output video. |
| generate_audio | No | boolean | true | — | Whether to generate synchronized audio for the video. When set to false, output will be silent. |
Example Request
{
"prompt": "Through-the-veil shot of a bride face during an Indian wedding ceremony, embroidered red dupatta texture, eyes lined with kohl, henna-covered hands, marigold garlands in soft bokeh, 85mm f/1.2, warm tungsten and candlelight, cinematic intimacy",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "16:9",
"fps": 25,
"generate_audio": true
}
Response
{
"request_id": "ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-3-text-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-text-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-text-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-text-to-video_019dxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2.3 Text to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080p / per second | $0.06 |
| 1440p / per second | $0.12 |
| 2160p (4K) / per second | $0.24 |
LTX v2.3 Image to Video API Documentation
https://gateway.pixazo.ai/ltx-2-3-image-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX-2.3 (Image to Video) generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-image-to-video/v1/ltx-2-3-image-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"image_url": "https://v3b.example.com/files/b/0a90dd31/uJG2pMMJMcnVeC4PmwnAF_image_004.png",
"prompt": "Periscope-level shot of two Maasai warriors mid-leap during an adumu jumping dance, golden savanna sunset, red shuka robes frozen in motion, dust kicked up catching backlight, 85mm f/1.4",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "auto",
"fps": 25,
"generate_audio": true
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-3-image-to-video/v1/ltx-2-3-image-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"image_url": "https://v3b.example.com/files/b/0a90dd31/uJG2pMMJMcnVeC4PmwnAF_image_004.png",
"prompt": "Periscope-level shot of two Maasai warriors mid-leap during an adumu jumping dance, golden savanna sunset, red shuka robes frozen in motion, dust kicked up catching backlight, 85mm f/1.4",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "auto",
"fps": 25,
"generate_audio": true
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
fetch("https://gateway.pixazo.ai/ltx-2-3-image-to-video/v1/ltx-2-3-image-to-video-request", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
"image_url": "https://v3b.example.com/files/b/0a90dd31/uJG2pMMJMcnVeC4PmwnAF_image_004.png",
"prompt": "Periscope-level shot of two Maasai warriors mid-leap during an adumu jumping dance, golden savanna sunset, red shuka robes frozen in motion, dust kicked up catching backlight, 85mm f/1.4",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "auto",
"fps": 25,
"generate_audio": true
})
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/ltx-2-3-image-to-video/v1/ltx-2-3-image-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"image_url": "https://v3b.example.com/files/b/0a90dd31/uJG2pMMJMcnVeC4PmwnAF_image_004.png",
"prompt": "Periscope-level shot of two Maasai warriors mid-leap during an adumu jumping dance, golden savanna sunset, red shuka robes frozen in motion, dust kicked up catching backlight, 85mm f/1.4",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "auto",
"fps": 25,
"generate_audio": true
}'
Output
{
"request_id": "ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-image-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-image-to-video",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX-2.3 (Image to Video) generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| image_url | Yes | string | — | — | URL of the start image to use for the generated video. Must be publicly accessible. |
| end_image_url | No | string | — | — | URL of an end image. When provided, generates a transition video between start and end frames. Must be publicly accessible. |
| prompt | Yes | string | — | — | Text prompt describing the desired motion, style, and scene details for the generated video. |
| duration | No | enum | 6 | 6, 8, 10 | Duration of the output video in seconds. |
| resolution | No | enum | 1080p | 1080p, 1440p, 2160p | Output video resolution. |
| aspect_ratio | No | enum | auto | auto, 16:9, 9:16 | Aspect ratio of the output video. If auto, the ratio is inferred from the input image. |
| fps | No | enum | 25 | 24, 25, 48, 50 | Frames per second of the output video. |
| generate_audio | No | boolean | true | — | Whether to generate synchronized audio for the video. If false, output will be silent. |
Example Request
{
"image_url": "https://v3b.example.com/files/b/0a90dd31/uJG2pMMJMcnVeC4PmwnAF_image_004.png",
"prompt": "Periscope-level shot of two Maasai warriors mid-leap during an adumu jumping dance, golden savanna sunset, red shuka robes frozen in motion, dust kicked up catching backlight, 85mm f/1.4",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "auto",
"fps": 25,
"generate_audio": true
}
Response
{
"request_id": "ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-3-image-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-image-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-image-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-image-to-video_019dxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2.3 Image to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080p / per second | $0.06 |
| 1440p / per second | $0.12 |
| 2160p (4K) / per second | $0.24 |
LTX v2.3 Audio to Video API Documentation
https://gateway.pixazo.ai/ltx-2-3-audio-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX 2.3 Audio to Video generate request - LTX 2.3 Audio to Video
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-audio-to-video/v1/ltx-2-3-audio-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A musician passionately playing piano in a dimly lit jazz club",
"audio_url": "https://imagesai.appypie.com/7686410/wGrZmX6DC6QbKdp73zyK_017727945871303.mp3",
"image_url": "https://imagesai.appypie.com/7686410/PaESYuZM3mrXtc08U2vh_017731442751326.png",
"guidance_scale": 9
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-3-audio-to-video/v1/ltx-2-3-audio-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A musician passionately playing piano in a dimly lit jazz club",
"audio_url": "https://imagesai.appypie.com/7686410/wGrZmX6DC6QbKdp73zyK_017727945871303.mp3",
"image_url": "https://imagesai.appypie.com/7686410/PaESYuZM3mrXtc08U2vh_017731442751326.png",
"guidance_scale": 9
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-2-3-audio-to-video/v1/ltx-2-3-audio-to-video-request";
const data = {
prompt: "A musician passionately playing piano in a dimly lit jazz club",
audio_url: "https://imagesai.appypie.com/7686410/wGrZmX6DC6QbKdp73zyK_017727945871303.mp3",
image_url: "https://imagesai.appypie.com/7686410/PaESYuZM3mrXtc08U2vh_017731442751326.png",
guidance_scale: 9
};
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/ltx-2-3-audio-to-video/v1/ltx-2-3-audio-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A musician passionately playing piano in a dimly lit jazz club",
"audio_url": "https://imagesai.appypie.com/7686410/wGrZmX6DC6QbKdp73zyK_017727945871303.mp3",
"image_url": "https://imagesai.appypie.com/7686410/PaESYuZM3mrXtc08U2vh_017731442751326.png",
"guidance_scale": 9
}'
Output
{
"request_id": "ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-audio-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-audio-to-video",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX 2.3 Audio to Video generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | A detailed text description of the desired video scene, including subject, action, lighting, and environment. |
| audio_url | Yes | string | — | — | Publicly accessible URL to an audio file (MP3, WAV, or other common formats) to drive video motion and timing. |
| image_url | No | string | — | — | Publicly accessible URL to a starting frame image that initializes the first frame of the video. If omitted, the model generates an initial frame from the prompt. |
| guidance_scale | No | number | 7.5 | — | Controls how closely the output adheres to the prompt. Higher values (e.g., 9–12) increase prompt fidelity; lower values (e.g., 5–7) allow more creative variation. |
Minimum Request
{
"prompt": "A musician passionately playing piano in a dimly lit jazz club",
"audio_url": "https://imagesai.appypie.com/7686410/wGrZmX6DC6QbKdp73zyK_017727945871303.mp3"
}
Full Request (all options)
{
"prompt": "A musician passionately playing piano in a dimly lit jazz club",
"audio_url": "https://imagesai.appypie.com/7686410/wGrZmX6DC6QbKdp73zyK_017727945871303.mp3",
"image_url": "https://imagesai.appypie.com/7686410/PaESYuZM3mrXtc08U2vh_017731442751326.png",
"guidance_scale": 9
}
Response
{
"request_id": "ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for LTX 2.3 Audio to Video generate request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-3-audio-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-audio-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-audio-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-audio-to-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2.3 Audio to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution / per second | $0.1 |
LTX v2.3 Video to Video (Video Editing) API Documentation
https://gateway.pixazo.ai/ltx-2-3-retake-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX 2.3 Retake Video generate request - LTX 2.3 Retake Video
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-retake-video/v1/ltx-2-3-retake-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Transform the scene into a vibrant neon-lit cyberpunk environment",
"video_url": "https://imagesai.appypie.com/7686410/HjRiOy5cjxaM5YMXUY5U_017731482701572.mp4",
"start_time": 0,
"duration": 5,
"retake_mode": "replace_audio_and_video"
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-3-retake-video/v1/ltx-2-3-retake-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Transform the scene into a vibrant neon-lit cyberpunk environment",
"video_url": "https://imagesai.appypie.com/7686410/HjRiOy5cjxaM5YMXUY5U_017731482701572.mp4",
"start_time": 0,
"duration": 5,
"retake_mode": "replace_audio_and_video"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/ltx-2-3-retake-video/v1/ltx-2-3-retake-video-request';
const data = {
prompt: 'Transform the scene into a vibrant neon-lit cyberpunk environment',
video_url: 'https://imagesai.appypie.com/7686410/HjRiOy5cjxaM5YMXUY5U_017731482701572.mp4',
start_time: 0,
duration: 5,
retake_mode: 'replace_audio_and_video'
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/ltx-2-3-retake-video/v1/ltx-2-3-retake-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "Transform the scene into a vibrant neon-lit cyberpunk environment",
"video_url": "https://imagesai.appypie.com/7686410/HjRiOy5cjxaM5YMXUY5U_017731482701572.mp4",
"start_time": 0,
"duration": 5,
"retake_mode": "replace_audio_and_video"
}'
Output
{
"request_id": "ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-retake-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-retake-video",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX 2.3 Retake Video generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text description describing the desired transformation (e.g., style, lighting, objects). Must be detailed for optimal results. |
| video_url | Yes | string | — | — | Publicly accessible URL of the source video to be edited. Must be reachable by the API server. |
| start_time | Yes | integer | — | — | Start time in seconds of the video segment to be retaken. Must be non-negative. |
| duration | Yes | integer | — | — | Duration in seconds of the video segment to be retaken. Must be positive and within video bounds. |
| retake_mode | Yes | string | — | — | Specifies how the retake should be applied. Valid values: replace_audio_and_video, replace_video_only. |
Minimum Request
{
"prompt": "Transform the scene into a vibrant neon-lit cyberpunk environment",
"video_url": "https://imagesai.appypie.com/7686410/HjRiOy5cjxaM5YMXUY5U_017731482701572.mp4",
"start_time": 0,
"duration": 5,
"retake_mode": "replace_audio_and_video"
}
Full Request (all options)
{
"prompt": "Transform the scene into a vibrant neon-lit cyberpunk environment",
"video_url": "https://imagesai.appypie.com/7686410/HjRiOy5cjxaM5YMXUY5U_017731482701572.mp4",
"start_time": 0,
"duration": 5,
"retake_mode": "replace_audio_and_video"
}
Response
{
"request_id": "ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for LTX 2.3 Retake Video generate request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-3-retake-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-retake-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-retake-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-retake-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-retake-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2.3 Video to Video (Video Editing) API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution / per second | $0.1 |
LTX v2.3 Quality Text to Video API Documentation
https://gateway.pixazo.ai/ltx-2-3-quality-text-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX 2.3 Quality Text to Video generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-quality-text-to-video/v1/ltx-2-3-quality-text-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A cinematic drone shot gliding over a misty mountain valley at sunrise, golden light",
"num_frames": 121,
"resolution": "landscape_16_9",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-3-quality-text-to-video/v1/ltx-2-3-quality-text-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "A cinematic drone shot gliding over a misty mountain valley at sunrise, golden light",
"num_frames": 121,
"resolution": "landscape_16_9",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-2-3-quality-text-to-video/v1/ltx-2-3-quality-text-to-video-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "A cinematic drone shot gliding over a misty mountain valley at sunrise, golden light",
"num_frames": 121,
"resolution": "landscape_16_9",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/ltx-2-3-quality-text-to-video/v1/ltx-2-3-quality-text-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "A cinematic drone shot gliding over a misty mountain valley at sunrise, golden light",
"num_frames": 121,
"resolution": "landscape_16_9",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}'
Output
{
"request_id": "ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - LTX 2.3 Quality Text to Video generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt describing the desired video scene. Must be detailed for best results. |
| num_frames | No | integer | 121 | 9–481 | Total number of frames to generate. Allowed range: 9–481. |
| resolution | No | string or object | landscape_16_9 | square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9 | Preset resolution or custom dimensions. Presets: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9. Custom object: { "width": integer, "height": integer }. |
| frames_per_second | No | float | 24 | 1–60 | Output frame rate. Allowed range: 1–60. |
| num_inference_steps | No | integer | 15 | 8–30 | Number of denoising steps during generation. Allowed range: 8–30. Higher values improve quality at increased compute cost. |
| guidance_scale | No | float | 1 | 1–20 | Classifier-free guidance scale. Controls adherence to prompt. Allowed range: 1–20. Higher values increase prompt fidelity. |
| generate_audio | No | boolean | true | — | Whether to generate native audio synchronized with the video. |
| negative_prompt | No | string | — | — | Comma-separated terms to avoid in generation (e.g., "blurry, low quality, watermark"). Defaults to a comprehensive built-in negative list. |
| enable_prompt_expansion | No | boolean | true | — | Enables LLM-based prompt enhancement to enrich semantics and detail. |
| enable_safety_checker | No | boolean | true | — | Enables NSFW content filtering. Disabling is not recommended. |
| video_quality | No | string | high | low, medium, high, maximum | Final video encode quality. Allowed: low, medium, high, maximum. |
| video_write_mode | No | string | balanced | fast, balanced, small | Trade-off between encoding speed and file size. Allowed: fast, balanced, small. |
| seed | No | integer | — | — | Random seed for reproducible results. If omitted, a random seed is used. |
| sync_mode | No | boolean | false | — | If true, returns the video as a base64-encoded data URI inline in the response. Otherwise, returns a URL to the media file. |
Example Request
{
"prompt": "A cinematic drone shot gliding over a misty mountain valley at sunrise, golden light",
"num_frames": 121,
"resolution": "landscape_16_9",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}
Response
{
"request_id": "ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-3-quality-text-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-quality-text-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-quality-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-quality-text-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-quality-text-to-video_019dxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2.3 Quality Text to Video API Pricing
No data available
Could not load current pricing
LTX v2 Pro Text to Video API Documentation
https://gateway.pixazo.ai/lightricks/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX V2 Video Generate - LTX V2 Pro
Request Code
POST https://gateway.pixazo.ai/lightricks/v1/ltx/generate HTTP/1.1
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A cinematic drone shot of a futuristic city at night with flying cars and neon lights",
"duration": 10,
"resolution": "1080p",
"generate_audio": true
}
import requests
import json
url = "https://gateway.pixazo.ai/lightricks/v1/ltx/generate"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A cinematic drone shot of a futuristic city at night with flying cars and neon lights",
"duration": 10,
"resolution": "1080p",
"generate_audio": True
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = 'https://gateway.pixazo.ai/lightricks/v1/ltx/generate';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const body = {
prompt: 'A cinematic drone shot of a futuristic city at night with flying cars and neon lights',
duration: 10,
resolution: '1080p',
generate_audio: true
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(body)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/lightricks/v1/ltx/generate" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A cinematic drone shot of a futuristic city at night with flying cars and neon lights",
"duration": 10,
"resolution": "1080p",
"generate_audio": true
}'
Output
{
"request_id": "lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "lightricks-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "lightricks-video",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX V2 Video Generate
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text description of the video you want to generate. Be specific and descriptive for best results. |
| image | No | string | — | — | Image URL for image-to-video mode. Must be publicly accessible (HTTPS recommended). |
| duration | No | integer | 6 | — | Video duration in seconds. Valid values: 6, 8, 10 |
| resolution | No | string | 1080p | — | Output resolution. Valid values: 1080p, 1440p, 2160p |
| generate_audio | No | boolean | true | true, false | Generate audio for the video (audio is preview quality) |
| webhook | No | string | — | — | Callback URL for completion notification. |
| webhook_events_filter | No | array | ["*"] | — | Events that trigger webhook. Valid values: ["*"] (all), ["completed"] (success/failure only) |
Minimum Request
{
"prompt": "A serene mountain landscape at sunset with clouds moving slowly across the sky"
}
Full Request (all options)
{
"prompt": "A cinematic drone shot of a futuristic city at night with flying cars and neon lights",
"image": "https://example.com/input-photo.jpg",
"duration": 10,
"resolution": "2160p",
"generate_audio": true,
"webhook": "https://yourdomain.com/webhook",
"webhook_events_filter": [
"*"
]
}
Response
{
"request_id": "lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for LTX V2 Video Generate.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'lightricks-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "lightricks-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "lightricks-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "lightricks-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/lightricks-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2 Pro Text to Video API Pricing
No data available
Could not load current pricing
LTX v2 19B Image to Video API Documentation
https://gateway.pixazo.ai/ltx-2-19b-api-513/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX-2 19B API generate request - LTX-2 19B API
Request Code
POST https://gateway.pixazo.ai/ltx-2-19b-api-513/v1/ltx-2-19b-api-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A golden retriever running through a sunlit forest, tail wagging, leaves blowing in the wind",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg",
"num_frames": 121,
"video_size": "auto",
"generate_audio": true,
"use_multiscale": true,
"fps": 25,
"acceleration": "none",
"camera_lora": "none",
"camera_lora_scale": 1,
"negative_prompt": "blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, wrong gaze direction, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts.",
"enable_safety_checker": true,
"video_output_type": "X264 (.mp4)",
"video_quality": "high",
"video_write_mode": "balanced"
}
import requests
import json
url = "https://gateway.pixazo.ai/ltx-2-19b-api-513/v1/ltx-2-19b-api-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A golden retriever running through a sunlit forest, tail wagging, leaves blowing in the wind",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg",
"num_frames": 121,
"video_size": "auto",
"generate_audio": true,
"use_multiscale": true,
"fps": 25,
"acceleration": "none",
"camera_lora": "none",
"camera_lora_scale": 1,
"negative_prompt": "blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, wrong gaze direction, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts.",
"enable_safety_checker": true,
"video_output_type": "X264 (.mp4)",
"video_quality": "high",
"video_write_mode": "balanced"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = 'https://gateway.pixazo.ai/ltx-2-19b-api-513/v1/ltx-2-19b-api-request';
const data = {
prompt: 'A golden retriever running through a sunlit forest, tail wagging, leaves blowing in the wind',
image_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg',
num_frames: 121,
video_size: 'auto',
generate_audio: true,
use_multiscale: true,
fps: 25,
acceleration: 'none',
camera_lora: 'none',
camera_lora_scale: 1,
negative_prompt: 'blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, wrong gaze direction, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts.',
enable_safety_checker: true,
video_output_type: 'X264 (.mp4)',
video_quality: 'high',
video_write_mode: 'balanced'
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/ltx-2-19b-api-513/v1/ltx-2-19b-api-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A golden retriever running through a sunlit forest, tail wagging, leaves blowing in the wind",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg",
"num_frames": 121,
"video_size": "auto",
"generate_audio": true,
"use_multiscale": true,
"fps": 25,
"acceleration": "none",
"camera_lora": "none",
"camera_lora_scale": 1,
"negative_prompt": "blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, wrong gaze direction, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts.",
"enable_safety_checker": true,
"video_output_type": "X264 (.mp4)",
"video_quality": "high",
"video_write_mode": "balanced"
}'
Output
{
"request_id": "ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-19b-api-513",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-19b-api-513",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX-2 19B API generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text description guiding video generation, including actions, style, and context. |
| image_url | Yes | string | — | — | Publicly accessible URL of the input image to animate. Must be reachable by the server. |
| num_frames | No | integer | — | — | Total number of frames to generate in the output video. Higher values produce smoother animations. |
| video_size | No | string | — | — | Resolution of the output video. Use "auto" to derive from input image dimensions, or specify "512x512", "768x768", etc. |
| generate_audio | No | boolean | — | true, false | Whether to generate synchronized audio based on the prompt. If enabled, audio will be embedded in the video. |
| use_multiscale | No | boolean | — | true, false | Enables multi-scale motion generation for more natural and detailed motion across different spatial scales. |
| fps | No | integer | — | — | Frames per second for the output video. Higher values result in smoother motion. |
| acceleration | No | string | — | — | Hardware acceleration mode. Use "none" for CPU-only, or "cuda" for GPU acceleration if supported. |
| camera_lora | No | string | — | — | Camera motion control via LoRA adapter. Use "none" for no camera motion, or specify a trained LoRA model name. |
| camera_lora_scale | No | number | — | — | Strength of the camera motion LoRA effect (0.0 to 2.0). Values above 1.0 amplify motion. |
| negative_prompt | No | string | — | — | Description of undesired elements to exclude from the output (e.g., artifacts, distortions). Enhances output quality. |
| enable_safety_checker | No | boolean | — | true, false | Enables content safety filtering to block potentially inappropriate or harmful outputs. |
| video_output_type | No | string | — | — | Format of the output video file. Supports "X264 (.mp4)", "H265 (.mp4)", or "WebM". |
| video_quality | No | string | — | — | Output video quality level. Values: "low", "balanced", "high". Higher quality increases file size and processing time. |
| video_write_mode | No | string | — | "fast", "balanced", "high-quality" | Strategy for writing video frames. Options: "fast", "balanced", "high-quality". Influences rendering consistency and file integrity. |
Example Request
{
"prompt": "A golden retriever running through a sunlit forest, tail wagging, leaves blowing in the wind",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg",
"num_frames": 121,
"video_size": "auto",
"generate_audio": true,
"use_multiscale": true,
"fps": 25,
"acceleration": "none",
"camera_lora": "none",
"camera_lora_scale": 1,
"negative_prompt": "blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, wrong gaze direction, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts.",
"enable_safety_checker": true,
"video_output_type": "X264 (.mp4)",
"video_quality": "high",
"video_write_mode": "balanced"
}
Response
{
"request_id": "ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-19b-api-513' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-19b-api-513",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-19b-api-513_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-19b-api-513",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-19b-api-513_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2 19B Image to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.0896 |
LTX v2 Image to Video API Documentation
https://gateway.pixazo.ai/ltx-2-video-api-581/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
LTX-2 Video API generate request - LTX-2 Video API
Request Code
POST https://gateway.pixazo.ai/ltx-2-video-api-581/v1/ltx-2-video-api-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_url": "https://example.com/example_inputs/ltxv-2-i2v-input.jpg",
"prompt": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket."
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-video-api-581/v1/ltx-2-video-api-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_url": "https://example.com/example_inputs/ltxv-2-i2v-input.jpg",
"prompt": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket."
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-2-video-api-581/v1/ltx-2-video-api-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
"image_url": "https://example.com/example_inputs/ltxv-2-i2v-input.jpg",
"prompt": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket."
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/ltx-2-video-api-581/v1/ltx-2-video-api-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"image_url": "https://example.com/example_inputs/ltxv-2-i2v-input.jpg",
"prompt": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket."
}'
Output
{
"request_id": "ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-video-api-581",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-video-api-581",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - LTX-2 Video API generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| image_url | Yes | string | — | — | Publicly accessible URL to the input image (JPEG/PNG). Must be reachable by the service. |
| prompt | Yes | string | — | — | Detailed textual description of the desired motion, camera movement, and visual context for the generated video. |
| duration | No | integer | 6 | — | Duration of the generated video in seconds. Accepted values: 6, 8, 10. |
| resolution | No | string | 1080p | — | Output video resolution. Accepted values: "720p", "1080p", "2160p". |
| fps | No | integer | 25 | — | Frames per second of the output video. Accepted values: 24, 25, 30. |
| generate_audio | No | boolean | false | true, false | Whether to generate synchronized audio that matches the video motion and mood. |
Minimum Request
{
"image_url": "https://example.com/example_inputs/ltxv-2-i2v-input.jpg",
"prompt": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket."
}
Full Request (all options)
{
"image_url": "https://example.com/example_inputs/ltxv-2-i2v-input.jpg",
"prompt": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket.",
"duration": 6,
"resolution": "1080p",
"fps": 25,
"generate_audio": true
}
Response
{
"request_id": "ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for LTX-2 Video API generate request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ltx-2-video-api-581' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-video-api-581",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-video-api-581_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-video-api-581",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-video-api-581_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
LTX v2 Image to Video API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 1080p | 1s | $0.06 per second |
| 1440p | 1s | $0.12 per second |
| 2160p | 1s | $0.24 per second |