LTX 2.3 Quality API, LTX 2.3 (FREE) API, LTX 2.3, 2 Pro API: Pricing, Documentation
by Lightricks
LTX 2.3 Quality 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 2.3 Quality API Documentation
https://gateway.pixazo.ai/ltx-2-3-quality-text-to-video/v1/ltx-2-3-quality-text-to-video-request
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 (9–481) — this sets the clip length. At the default 24 fps, 121 frames ≈ 5 seconds and 481 frames ≈ 20 seconds. |
| 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 refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 1 | 1–20 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| 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 | — | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| 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 that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
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 2.3 Quality API Pricing
LTX 2.3 Quality API Documentation
https://gateway.pixazo.ai/ltx-2-3-quality-image-to-video/v1/ltx-2-3-quality-image-to-video-request
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 Image to Video generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-quality-image-to-video/v1/ltx-2-3-quality-image-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "Subtle cinematic camera move; the scene comes to life with gentle motion",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"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-image-to-video/v1/ltx-2-3-quality-image-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "Subtle cinematic camera move; the scene comes to life with gentle motion",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"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-image-to-video/v1/ltx-2-3-quality-image-to-video-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "Subtle cinematic camera move; the scene comes to life with gentle motion",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"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-image-to-video/v1/ltx-2-3-quality-image-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "Subtle cinematic camera move; the scene comes to life with gentle motion",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}'
Output
{
"request_id": "ltx-2-3-quality-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-image-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 Image to Video generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt guiding the video generation. Must describe motion, camera behavior, and scene evolution. |
| image_url | Yes | string | — | — | URL of the starting image to animate. Must be publicly accessible. |
| num_frames | No | integer | 121 | 9–481 | Total frames to generate — this sets the clip length. At the default 24 fps, 121 frames ≈ 5 seconds. |
| resolution | No | string or object | "auto" | "auto", "square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9", or custom {width, height} (max 14142 each) | Output resolution preset. Alternative: custom object with width and height. |
| frames_per_second | No | float | 24 | 1–60 | Output frame rate. |
| num_inference_steps | No | integer | 15 | 8–30 | Number of refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 1 | 1–20 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| generate_audio | No | boolean | true | — | Include native audio generated from the video content. |
| image_strength | No | float | 0.7 | 0–1 | Conditioning strength on the start image. 1.0 matches the first frame almost exactly; lower values give the model more freedom to depart from the source image. |
| negative_prompt | No | string | — | — | Terms to steer generation away from. Defaults to a comprehensive built-in negative list. |
| enable_prompt_expansion | No | boolean | true | — | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| video_quality | No | string | "high" | "low", "medium", "high", "maximum" | Final video encode quality. |
| video_write_mode | No | string | "balanced" | "fast", "balanced", "small" | Encoding optimization strategy. |
| seed | No | integer | — | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG · < 25 MB | Input image. |
Example Request
{
"prompt": "Subtle cinematic camera move; the scene comes to life with gentle motion",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}
Response
{
"request_id": "ltx-2-3-quality-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-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-quality-image-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-quality-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-quality-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-quality-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-quality-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-quality-image-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-quality-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 2.3 Quality API Pricing
LTX 2.3 Quality API Documentation
https://gateway.pixazo.ai/ltx-2-3-quality-audio-to-video/v1/ltx-2-3-quality-audio-to-video-request
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 Audio to Video generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-quality-audio-to-video/v1/ltx-2-3-quality-audio-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A cinematic music-video montage that matches the rhythm of the audio",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Audio.mp3",
"match_audio_length": true,
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"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-audio-to-video/v1/ltx-2-3-quality-audio-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "A cinematic music-video montage that matches the rhythm of the audio",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Audio.mp3",
"match_audio_length": true,
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"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-audio-to-video/v1/ltx-2-3-quality-audio-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 music-video montage that matches the rhythm of the audio",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Audio.mp3",
"match_audio_length": true,
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"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-audio-to-video/v1/ltx-2-3-quality-audio-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 music-video montage that matches the rhythm of the audio",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Audio.mp3",
"match_audio_length": true,
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}'
Output
{
"request_id": "ltx-2-3-quality-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-audio-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 Audio to Video generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt guiding the audio-driven video generation. Must be descriptive for best results. |
| audio_url | Yes | string | — | — | The audio track that drives the generation. Must be in a supported format (e.g., MP3, WAV). |
| image_url | No | string | — | — | URL of an image to use as the first frame of the video. Must be a static image (JPEG, PNG). |
| image_strength | No | float | 0.7 | 0.0–1.0 | Conditioning strength for the optional first frame (image_url). 1.0 keeps the image strictly; lower values give the model more freedom. |
| match_audio_length | No | boolean | true | — | When true, the total frame count is automatically derived from the audio duration. When false, num_frames is used. |
| num_frames | No | integer | 121 | 9–481 | Total number of frames to generate — this sets the clip length (at 24 fps, 121 frames ≈ 5 seconds). Used only when match_audio_length is false. |
| frames_per_second | No | float | 24 | 1.0–60.0 | Output frame rate. Higher values produce smoother motion. |
| resolution | No | string or object | "auto" | "auto", "square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9", or {"width": integer, "height": integer} | Final output size. auto matches the input image's aspect ratio when image_url is provided; otherwise a landscape fallback is used. Use a preset or a custom object { "width": integer, "height": integer }. |
| num_inference_steps | No | integer | 15 | 8–30 | Number of refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 1.0 | 1.0–20.0 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| generate_audio | No | boolean | true | — | Whether to include audio in the returned video. When disabled, the final MP4 is returned without an audio track. |
| negative_prompt | No | string | — | — | Comma-separated terms to steer generation away from (e.g., "blurry, low quality, watermark"). Defaults to a built-in long negative list. |
| enable_prompt_expansion | No | boolean | true | — | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| video_quality | No | enum | "high" | "low", "medium", "high", "maximum" | Final video encoding quality. Higher quality increases file size and processing time. |
| video_write_mode | No | enum | "balanced" | "fast", "balanced", "small" | Trade-off between speed, file size, and quality. fast prioritizes speed, small minimizes file size. |
| seed | No | integer | — | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| audio | 1 | MP3, WAV | Driving audio. |
| image | 1 | JPG, PNG | Optional reference image. |
Example Request
{
"prompt": "A cinematic music-video montage that matches the rhythm of the audio",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Audio.mp3",
"match_audio_length": true,
"num_frames": 121,
"resolution": "auto",
"frames_per_second": 24,
"num_inference_steps": 15,
"guidance_scale": 1,
"generate_audio": true,
"image_strength": 0.7,
"enable_prompt_expansion": true,
"enable_safety_checker": true,
"video_quality": "high",
"video_write_mode": "balanced"
}
Response
{
"request_id": "ltx-2-3-quality-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-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_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-audio-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-quality-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-quality-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-quality-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-quality-audio-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-quality-audio-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-quality-audio-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 2.3 Quality API Pricing
LTX 2.3 Quality API Documentation
https://gateway.pixazo.ai/ltx-2-3-quality-reference-video-to-video/v1/ltx-2-3-quality-reference-video-to-video-request
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 Reference Video to Video generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-quality-reference-video-to-video/v1/ltx-2-3-quality-reference-video-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "Restyle the scene as a cinematic anime sequence, vivid color grading and dynamic lighting",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4",
"video_strength": 0.6,
"num_frames": 121,
"resolution": "auto",
"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-reference-video-to-video/v1/ltx-2-3-quality-reference-video-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "Restyle the scene as a cinematic anime sequence, vivid color grading and dynamic lighting",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4",
"video_strength": 0.6,
"num_frames": 121,
"resolution": "auto",
"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-reference-video-to-video/v1/ltx-2-3-quality-reference-video-to-video-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "Restyle the scene as a cinematic anime sequence, vivid color grading and dynamic lighting",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4",
"video_strength": 0.6,
"num_frames": 121,
"resolution": "auto",
"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-reference-video-to-video/v1/ltx-2-3-quality-reference-video-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "Restyle the scene as a cinematic anime sequence, vivid color grading and dynamic lighting",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4",
"video_strength": 0.6,
"num_frames": 121,
"resolution": "auto",
"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-reference-video-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-reference-video-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 Reference Video to Video generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt guiding the generation. Must describe desired style, content, and aesthetic. |
| video_url | Yes | string | — | — | URL of the reference video that supplies motion and structural cues. Must be publicly accessible. |
| control_video_url | No | string | — | — | Optional pre-computed control video (for example an already-rendered depth / edge / pose composite). When provided together with skip_control_preprocess, the built-in control estimation is skipped and this video is used directly as the control signal, resampled to the output resolution and frame count. |
| image_url | No | string | — | — | Optional reference image for style or character anchoring. This is the FIRST-frame keyframe. |
| mid_image_url | No | string | — | — | Optional middle-frame keyframe image. Anchors the look and appearance around the middle of the clip (in addition to image_url at the start) so the appearance follows a moving camera instead of drifting. Requires image_url. |
| end_image_url | No | string | — | — | Optional last-frame keyframe image. Anchors the look and appearance at the end of the clip. Useful for shots where the camera travels to a different place than the start image. Requires image_url. |
| video_strength | No | float | 0.6 | 0–1 | Video conditioning strength. Lower values give the model more freedom to change the reference video's motion and structure; higher values follow the reference more closely. |
| strength | No | float | 1 | 0–1 | Sampler denoise strength. With preserve_original_video enabled this is the video-to-video amount: lower values keep more of the original video's pixels (e.g. 0.5 keeps roughly 50%), while 1.0 fully regenerates. Without preserve_original_video it only trims the denoise schedule. |
| skip_control_preprocess | No | boolean | false | — | Skip the built-in control estimation (depth / edge / pose) and use control_video_url directly as the control signal. Requires control_video_url; ignored if that is not set. |
| preserve_original_video | No | boolean | false | — | True video-to-video: the base video_url becomes the generation's starting point while control_video_url still drives the structure. How much of the original is preserved is controlled by strength (lower strength keeps more of the original pixels). Requires skip_control_preprocess, video_url and control_video_url. |
| num_frames | No | integer | 121 | 9–481 | Total frames to generate — this sets the clip length (at 24 fps, 121 frames ≈ 5 seconds). This IC-LoRA endpoint caps the resolution × frames volume for stability (~150 frames at 720p-class, more at smaller sizes). A request above the budget returns a 422 — reduce num_frames or use a smaller resolution. |
| resolution | No | string or object | "auto" | "auto", "square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9" | Output size of the generated video. In direct-control mode (skip_control_preprocess with control_video_url), auto follows the source video's size and aspect ratio up to the LTX limits, and explicit sizes are honoured with 64px alignment. In built-in control-estimation mode the output stays near the official control workflow size. Higher resolutions reduce the maximum stable frame count; lower resolutions can run longer. Alternatively provide a custom object with width and height integers. |
| 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 refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 1 | 1–20 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| generate_audio | No | boolean | true | — | Include audio from the reference video in the output. If false, output will be silent. |
| negative_prompt | No | string | — | — | Terms to steer generation away from. Defaults to a comprehensive built-in negative list. |
| enable_prompt_expansion | No | boolean | true | — | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| video_quality | No | string | "high" | "low", "medium", "high", "maximum" | Output video quality tier. Allowed values: `low`, `medium`, `high`, `maximum`. |
| video_write_mode | No | string | "balanced" | "fast", "balanced", "small" | Output encoding strategy. Allowed values: `fast` (optimized for speed), `balanced` (default), `small` (optimized for file size). |
| seed | No | integer | — | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| video | 1 | MP4, MOV, WEBM, M4V, GIF | Reference video. |
| image | 1 | JPG, PNG, WEBP | Optional reference image. |
Example Request
{
"prompt": "Restyle the scene as a cinematic anime sequence, vivid color grading and dynamic lighting",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4",
"video_strength": 0.6,
"num_frames": 121,
"resolution": "auto",
"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-reference-video-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-reference-video-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-reference-video-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-quality-reference-video-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-quality-reference-video-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-reference-video-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-quality-reference-video-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-quality-reference-video-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-quality-reference-video-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 2.3 Quality API Pricing
LTX 2.3 Quality API Documentation
https://gateway.pixazo.ai/ltx-2-3-quality-hdr/v1/ltx-2-3-quality-hdr-request
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 HDR generate request
Request Code
POST https://gateway.pixazo.ai/ltx-2-3-quality-hdr/v1/ltx-2-3-quality-hdr-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A sunset over the Pacific Ocean, vibrant orange and purple sky, deep contrast, cinematic HDR",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4"
}
import requests
url = "https://gateway.pixazo.ai/ltx-2-3-quality-hdr/v1/ltx-2-3-quality-hdr-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "A sunset over the Pacific Ocean, vibrant orange and purple sky, deep contrast, cinematic HDR",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-2-3-quality-hdr/v1/ltx-2-3-quality-hdr-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "A sunset over the Pacific Ocean, vibrant orange and purple sky, deep contrast, cinematic HDR",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4"
};
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-hdr/v1/ltx-2-3-quality-hdr-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "A sunset over the Pacific Ocean, vibrant orange and purple sky, deep contrast, cinematic HDR",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4"
}'
Output
{
"request_id": "ltx-2-3-quality-hdr_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-hdr_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 HDR generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt describing the desired HDR aesthetic. Must be detailed for best results. |
| video_url | Yes | string | — | — | URL of the SDR input video to lift into HDR. Must be publicly accessible; this mode is video-conditioned. |
| num_frames | No | integer | 121 | 9–481 | Total frames to generate — this sets the clip length. At the default 24 fps, 121 frames ≈ 5 seconds. |
| resolution | No | string or object | "auto" | auto, square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, or {width: integer, height: integer} | Output video size. HDR output is generated at up to ~720p (shorter side capped at 704px); larger requested sizes are scaled down, preserving the aspect ratio. Use a preset or a custom object { "width": integer, "height": integer }. |
| frames_per_second | No | float | 24 | 1–60 | Output frame rate. |
| num_inference_steps | No | integer | 15 | 8–30 | Number of refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 1 | 1–20 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| generate_audio | No | boolean | true | — | Whether to include audio in the returned video. When disabled, the final MP4 is returned without an audio track. |
| negative_prompt | No | string | — | — | Terms to steer generation away from. Overrides default negative list. Default negative list is long and comprehensive. |
| enable_prompt_expansion | No | boolean | true | — | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| video_quality | No | string | "high" | low, medium, high, maximum | Output video quality tier. |
| video_write_mode | No | string | "balanced" | fast, balanced, small | Trade-off mode for video encoding. |
| seed | No | integer | — | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| video | 1 | MP4, MOV, WEBM, M4V, GIF | Video to upscale (HDR). |
Example Request
{
"prompt": "A sunset over the Pacific Ocean, vibrant orange and purple sky, deep contrast, cinematic HDR",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Video.mp4",
"num_frames": 121,
"resolution": "auto",
"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-hdr_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-2-3-quality-hdr_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-hdr' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-2-3-quality-hdr_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-2-3-quality-hdr",
"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-hdr_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-2-3-quality-hdr_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-2-3-quality-hdr",
"error": null,
"output": {
"preview_video": {
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-quality-hdr_019dxxxx/output.mp4",
"content_type": "video/mp4",
"file_name": "output.mp4",
"file_size": 12456789,
"width": 1920,
"height": 1080,
"fps": 24,
"duration": 5.04,
"num_frames": 121
},
"exr_frames_url": {
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-2-3-quality-hdr_019dxxxx/exr_frames.zip",
"content_type": "application/zip",
"file_name": "exr_frames.zip",
"file_size": 489000000
}
},
"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 2.3 Quality API Pricing
LTX 2.3 API Documentation
https://gateway.pixazo.ai/ltx-video/v1/text-to-video
Endpoint URL
POST https://gateway.pixazo.ai/ltx-video/v1/text-to-video
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 Video Text to Video request
Request Code
POST https://gateway.pixazo.ai/ltx-video/v1/text-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A red rose blooming in slow motion, golden hour"
}
import requests
url = "https://gateway.pixazo.ai/ltx-video/v1/text-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A red rose blooming in slow motion, golden hour"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-video/v1/text-to-video";
const headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
"prompt": "A red rose blooming in slow motion, golden hour"
};
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-video/v1/text-to-video" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A red rose blooming in slow motion, golden hour"
}'
Output
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your request to receive a POST callback instead of polling. The webhook payload mirrors the status-endpoint response. Optionally add X-Webhook-Mode: sync to also receive a progress webhook on every poll cycle (roughly every 20s) while the request is still in flight, in addition to the terminal callback.
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: sync
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | No | HTTPS URL that receives a POST callback when the request reaches a terminal state. |
| X-Webhook-Mode | No | terminal (default) fires once on COMPLETED/FAILED/ERROR. sync also fires a progress webhook each poll cycle (~20s cadence). |
Request Parameters - LTX Video Text to Video request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | ≤ 4000 chars | Text description of the video to generate. |
seed | No | integer | 42 | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
aspect | No | string | "auto" | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, 4:5, 2:3, 3:2, or custom W:H | Output aspect ratio; overrides width/height. |
width | No | integer | 1280 | divisible by 32, ≤ 1920 | Output width; overridden by aspect. |
height | No | integer | 704 | divisible by 32, ≤ 1088 | Output height; overridden by aspect. |
num_frames | No | integer | 121 | 8k+1 form, max 241 | Number of frames (e.g. 121, 161, 241). |
frame_rate | No | float | 24 | 1–60 | Frames per second. |
enhance_prompt | No | boolean | false | true/false | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
Example Request
{
"prompt": "A red rose blooming in slow motion, golden hour"
}
Response
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| 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-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-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_SUBSCRIPTION_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-06-08T10:00:00.000Z",
"completed_at": "2026-06-08T10:00:30.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 (video/mp4) |
| 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 2.3 API Pricing
LTX 2.3 API Documentation
https://gateway.pixazo.ai/ltx-video/v1/image-to-video
Endpoint URL
POST https://gateway.pixazo.ai/ltx-video/v1/image-to-video
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 Video Image to Video request
Request Code
POST https://gateway.pixazo.ai/ltx-video/v1/image-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Hands dance gracefully, rose petals drift",
"image_url": "https://example.com/hands.jpg"
}
import requests
url = "https://gateway.pixazo.ai/ltx-video/v1/image-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Hands dance gracefully, rose petals drift",
"image_url": "https://example.com/hands.jpg"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-video/v1/image-to-video";
const headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
"prompt": "Hands dance gracefully, rose petals drift",
"image_url": "https://example.com/hands.jpg"
};
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-video/v1/image-to-video" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "Hands dance gracefully, rose petals drift",
"image_url": "https://example.com/hands.jpg"
}'
Output
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your request to receive a POST callback instead of polling. The webhook payload mirrors the status-endpoint response. Optionally add X-Webhook-Mode: sync to also receive a progress webhook on every poll cycle (roughly every 20s) while the request is still in flight, in addition to the terminal callback.
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: sync
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | No | HTTPS URL that receives a POST callback when the request reaches a terminal state. |
| X-Webhook-Mode | No | terminal (default) fires once on COMPLETED/FAILED/ERROR. sync also fires a progress webhook each poll cycle (~20s cadence). |
Request Parameters - LTX Video Image to Video request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | ≤ 4000 chars | Text description of the video to generate. |
image_url | Yes | string | — | public https URL, ≤ 25MB | Source image to animate. |
strength | No | float | 1.0 | 0–1 | How much the result may differ from the input. Higher values allow bigger changes from the source; lower values keep the output closer to the original. |
seed | No | integer | 42 | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
aspect | No | string | "auto" | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, 4:5, 2:3, 3:2, or custom W:H | Output aspect ratio; overrides width/height. |
width | No | integer | 1280 | divisible by 32, ≤ 1920 | Output width; overridden by aspect. |
height | No | integer | 704 | divisible by 32, ≤ 1088 | Output height; overridden by aspect. |
num_frames | No | integer | 121 | 8k+1 form, max 241 | Number of frames (e.g. 121, 161, 241). |
frame_rate | No | float | 24 | 1–60 | Frames per second. |
enhance_prompt | No | boolean | false | true/false | Automatically rewrites and enriches your prompt with extra detail before generation to improve results. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP | Input image. |
Example Request
{
"prompt": "Hands dance gracefully, rose petals drift",
"image_url": "https://example.com/hands.jpg"
}
Response
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| 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-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-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_SUBSCRIPTION_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-06-08T10:00:00.000Z",
"completed_at": "2026-06-08T10:00:30.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 (video/mp4) |
| 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 2.3 API Pricing
LTX 2.3 API Documentation
https://gateway.pixazo.ai/ltx-video/v1/video-to-video
Endpoint URL
POST https://gateway.pixazo.ai/ltx-video/v1/video-to-video
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 Video Video to Video request
Request Code
POST https://gateway.pixazo.ai/ltx-video/v1/video-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Anime Studio Ghibli style, vibrant watercolor",
"video_url": "https://example.com/source.mp4",
"aspect": "16:9"
}
import requests
url = "https://gateway.pixazo.ai/ltx-video/v1/video-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Anime Studio Ghibli style, vibrant watercolor",
"video_url": "https://example.com/source.mp4",
"aspect": "16:9"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ltx-video/v1/video-to-video";
const headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
"prompt": "Anime Studio Ghibli style, vibrant watercolor",
"video_url": "https://example.com/source.mp4",
"aspect": "16:9"
};
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-video/v1/video-to-video" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "Anime Studio Ghibli style, vibrant watercolor",
"video_url": "https://example.com/source.mp4",
"aspect": "16:9"
}'
Output
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your request to receive a POST callback instead of polling. The webhook payload mirrors the status-endpoint response. Optionally add X-Webhook-Mode: sync to also receive a progress webhook on every poll cycle (roughly every 20s) while the request is still in flight, in addition to the terminal callback.
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: sync
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | No | HTTPS URL that receives a POST callback when the request reaches a terminal state. |
| X-Webhook-Mode | No | terminal (default) fires once on COMPLETED/FAILED/ERROR. sync also fires a progress webhook each poll cycle (~20s cadence). |
Request Parameters - LTX Video Video to Video request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | ≤ 4000 chars | Transformation instruction. |
video_url | Yes | string | — | public https URL, ≤ 100MB | Source video to transform. |
seed | No | integer | 42 | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
aspect | No | string | — | 16:9 (1280×768), 9:16 (768×1280), 1:1 (960×960), 4:3, 3:4 | Output aspect ratio. |
width | No | integer | 1280 | divisible by 64, ≤ 1920 | Output width (v2v requires div-by-64). |
height | No | integer | 768 | divisible by 64, ≤ 1088 | Output height (v2v requires div-by-64). |
num_frames | No | integer | 121 | 8k+1 form, max 241 | Number of frames. |
frame_rate | No | float | 24 | 1–60 | Frames per second. |
video_strength | No | float | 1.0 | 0–1 | How much the result may differ from the input. Higher values allow bigger changes from the source; lower values keep the output closer to the original. |
skip_stage_2 | No | boolean | false | true/false | Skip upscale → half-res, faster. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| video | 1 | MP4, MOV, WEBM | Source video. |
Example Request
{
"prompt": "Anime Studio Ghibli style, vibrant watercolor",
"video_url": "https://example.com/source.mp4",
"aspect": "16:9"
}
Response
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| 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-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ltx-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_SUBSCRIPTION_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ltx-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ltx-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-06-08T10:00:00.000Z",
"completed_at": "2026-06-08T10:00:30.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 (video/mp4) |
| 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 2.3 API Pricing
LTX v2.3 API Documentation
https://gateway.pixazo.ai/ltx-2-3-text-to-video/v1/ltx-2-3-text-to-video-request
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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 API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080p / per second | $0.06 |
| 1440p / per second | $0.12 |
| 2160p (4K) / per second | $0.24 |
LTX v2.3 API Documentation
https://gateway.pixazo.ai/ltx-2-3-image-to-video/v1/ltx-2-3-image-to-video-request
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG · < 25 MB | First / last frame image. |
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 API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080p / per second | $0.06 |
| 1440p / per second | $0.12 |
| 2160p (4K) / per second | $0.24 |
LTX v2.3 API Documentation
https://gateway.pixazo.ai/ltx-2-3-audio-to-video/v1/ltx-2-3-audio-to-video-request
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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 |
|---|---|---|---|---|---|
| audio_url | Yes | string | — | 2-20 seconds | Publicly accessible URL (or base64 data URI) of the audio file to generate the video from. The audio duration must be between 2 and 20 seconds and drives the length and timing of the output video. |
| prompt | No | string | — | 1-5000 characters | Text description of how the video should be generated. Required if image_url is not provided; when image_url is supplied, it describes how that image should be animated. |
| image_url | No | string | — | — | URL of an image to use as the first frame of the video. Required if prompt is not provided. |
| aspect_ratio | No | enum | auto | auto, 16:9, 9:16 | Aspect ratio of the generated video. With auto, the ratio is inferred from the input image, or defaults to 16:9 when no image is provided. |
| guidance_scale | No | number | 5 (9 with image_url) | 1-50 | Controls how closely the output follows the prompt. Higher values follow the prompt more strictly; lower values allow more creative variation. Defaults to 5 for prompt-only generation, or 9 when an image_url is provided. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| audio | 1 | MP3, WAV | Driving audio. |
| image | 1 | JPG, PNG | Optional reference image. |
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 |
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 API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution / per second | $0.10 |
LTX v2.3 API Documentation
https://gateway.pixazo.ai/ltx-2-3-retake-video/v1/ltx-2-3-retake-video-request
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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 |
|---|---|---|---|---|---|
| video_url | Yes | string | — | — | Publicly accessible URL of the source video to retake. |
| prompt | Yes | string | — | 1-5000 characters | Text description of the change to apply to the selected segment (for example: Change flower to red rose). |
| start_time | No | number | 0 | 0-20 | Start time, in seconds, of the video segment to retake. |
| duration | No | number | 5 | 2-20 | Duration, in seconds, of the video segment to retake. |
| retake_mode | No | enum | replace_audio_and_video | replace_audio, replace_video, replace_audio_and_video | Which tracks of the selected segment are regenerated: audio only, video only, or both. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| video | 1 | MP4, MOV, WEBM, M4V, GIF | Video to retake. |
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 |
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 API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution / per second | $0.10 |
LTX v2 Pro API Documentation
https://gateway.pixazo.ai/lightricks/v1/ltx/generate
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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 prompt describing the video to generate. Be specific and descriptive (subject, action, camera movement, lighting) for best results. |
| image | No | string | — | — | First frame image for image-to-video generation. Must be a publicly accessible URL (JPG, PNG or WEBP). Omit it for text-to-video. |
| duration | No | integer | 6 | 6, 8, 10 | Duration of the generated video in seconds. |
| resolution | No | string | 1080p | 1080p, 2k, 4k | Resolution quality of the generated video. Use 2k / 4k — the values 1440p and 2160p are not accepted. |
| generate_audio | No | boolean | true | true, false | Generate synchronized audio for the video. Applies to text-to-video and image-to-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) |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP | Input image. |
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 |
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 API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080p | $0.06 per second |
| 1440p | $0.12 per second |
| 2160p | $0.24 per second |
LTX v2 19B API Documentation
https://gateway.pixazo.ai/ltx-2-19b-api-513/v1/ltx-2-19b-api-request
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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 the video: subject, action, style, and camera or scene context. |
| image_url | Yes | string | — | — | Publicly accessible URL of the input image to animate. It becomes the first frame of the video. |
| end_image_url | No | string | — | — | Optional URL of an image to use as the video's final frame. The model interpolates from image_url to this frame. |
| num_frames | No | integer | 121 | 9 - 481 | Number of frames to generate. At the default 25 fps, 121 frames is about 4.8 seconds of video. |
| video_size | No | string or object | auto | auto, square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, or {"width": W, "height": H} | Size of the output video. "auto" derives it from the input image. Pass an object such as {"width": 1280, "height": 720} for a custom size (max 14142 per side). |
| generate_audio | No | boolean | true | true, false | Whether to generate a synchronized audio track for the video. Disable it to shorten generation time. |
| use_multiscale | No | boolean | true | true, false | Renders a smaller pass first and uses it to guide the full-size render, improving coherence and detail. |
| fps | No | number | 25 | 1 - 60 | Frames per second of the output video. Higher values give smoother motion. |
| acceleration | No | string | none | none, regular, high, full | Speed vs. quality trade-off for the render. Higher acceleration is faster but can reduce quality. |
| camera_lora | No | string | none | dolly_in, dolly_out, dolly_left, dolly_right, jib_up, jib_down, static, none | Applies a camera-movement LoRA. Gives more reliable camera control than describing the move in the prompt. |
| camera_lora_scale | No | number | 1 | 0 - 1 | Strength of the selected camera LoRA. Lower values soften the camera movement. |
| negative_prompt | No | string | Preset quality-defect list | — | Description of artifacts and qualities to avoid. If omitted, a detailed default (blur, noise, distortion, etc.) is applied. |
| seed | No | integer | — | — | Seed for the random number generator. Reuse the same seed with the same input to reproduce a result. |
| enable_prompt_expansion | No | boolean | true | true, false | Automatically enriches a short prompt with extra detail before generation. |
| enable_safety_checker | No | boolean | true | true, false | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| video_output_type | No | string | X264 (.mp4) | X264 (.mp4), VP9 (.webm), PRORES4444 (.mov), GIF (.gif) | Container and codec of the output video file. |
| video_quality | No | string | high | low, medium, high, maximum | Output quality level. Higher quality increases file size and processing time. |
| video_write_mode | No | string | balanced | fast, balanced, small | Encoder trade-off: "fast" encodes quickest, "small" produces the smallest file, "balanced" sits between the two. |
| image_strength | No | number | 1 | 0 - 1 | How strongly the input image constrains the video. Lower values let the model deviate further from it. |
| end_image_strength | No | number | 1 | 0 - 1 | How strongly end_image_url constrains the final frame. |
| interpolation_direction | No | string | forward | forward, backward | With end_image_url set, whether to interpolate from the start image to the end image ("forward") or in reverse ("backward"). |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP | Input image. |
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 API Pricing
LTX v2 API Documentation
https://gateway.pixazo.ai/ltx-2-video-api-581/v1/ltx-2-video-api-request
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.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
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 | — | PNG, JPEG, WebP, AVIF, HEIF | Public URL (or base64 data URI) of the input image the video is generated from. 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 | 6, 8, 10 | Duration of the generated video in seconds. |
| resolution | No | string | 1080p | 1080p, 1440p, 2160p | Resolution of the generated video. |
| fps | No | integer | 25 | 25, 50 | Frames per second of the generated video. |
| generate_audio | No | boolean | true | true, false | Whether to generate synchronized audio for the generated video. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP | Input image. |
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 |
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 API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080p | $0.06 per second |
| 1440p | $0.12 per second |
| 2160p | $0.24 per second |