POST /api/v1/inference/submit
This is the shared submit reference for all models. For a focused guide with complete examples, choose MiniMax H3 Turbo or MiniMax H3. H3 uses duration-based output settings; Wan, image and audio parameters below are model-specific.
API version: v1.2.4
Submit a video or image generation task to the queue. The endpoint detects video vs. image mode based on the model field.
Endpoint
POST /api/v1/inference/submitAuthentication
Required. Include your API key in the request header:
X-API-Key: your-api-key-hereRequest Body
Video Generation Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text description of the video to generate |
negative_prompt | string | No | Negative prompt to avoid unwanted elements (default: ""). Not supported by minimax/h3/* models — the parameter is ignored for them |
num_frames | integer | No | Number of frames (max varies by resolution). Overrides duration |
frames_per_second | integer | No | Frame rate of output video for Wan models (default: 16, range: 4–60). MiniMax H3 uses fixed 24fps |
seed | integer | No | Random seed for reproducibility |
model | string | No | Model identifier (e.g., minimax/h3/text-to-video, minimax/h3/image-to-video, minimax/h3/reference-to-video, flux2/dev/text-to-image, flux2/dev/image-edit, wan/v2.2-a14b/text-to-video, wan/v2.2-a14b/text-to-video/turbo) |
width | integer | No | Video width in pixels. Use resolution_tier + aspect_ratio instead |
height | integer | No | Video height in pixels. Use resolution_tier + aspect_ratio instead |
resolution_tier | string | No | Resolution tier. MiniMax H3: "480p", "768p". Wan: "480p", "512p", "720p", "1080p" |
aspect_ratio | string | No | Aspect ratio. MiniMax H3: "16:9", "4:3", "1:1", "3:4", "9:16". Wan: "16:9", "9:16", "1:1" |
duration | float | No | Video duration in seconds. MiniMax H3 supports 4–15 seconds and is billed per output second |
Resolution: Use
resolution_tier+aspect_ratio(recommended) or explicitwidth+height.
- MiniMax H3 768p: 1344×768 (16:9), 1024×768 (4:3), 768×768 (1:1), 768×1024 (3:4), 768×1344 (9:16)
- MiniMax H3 480p: 832×480 (16:9), 640×480 (4:3), 480×480 (1:1), 480×640 (3:4), 480×832 (9:16)
- Wan 1080p: 1920×1080 (16:9), 1080×1920 (9:16), 1080×1080 (1:1)
- Wan 720p: 1280×720 (16:9), 720×1280 (9:16), 720×720 (1:1)
- Wan 512p: 960×512 (16:9), 512×960 (9:16), 512×512 (1:1)
- Wan 480p: 854×480 (16:9), 480×854 (9:16), 480×480 (1:1)
Image-to-Video Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
image_url | string | Conditional | Storage URL of image for I2V generation (from /api/v1/storage/image/upload) |
end_image_url | string | No | Optional ending frame for MiniMax H3 image-to-video. Use with model: "minimax/h3/image-to-video" |
reference_image_urls | array | Conditional | Reference images for minimax/h3/reference-to-video. Storage URLs or public HTTPS URLs |
reference_video_urls | array | No | Reference videos for minimax/h3/reference-to-video. Input dimensions need not match output dimensions; frame-rate, combined-duration and upload requirements still apply |
reference_audio_urls | array | No | Reference audio for minimax/h3/reference-to-video (voice timbre, music) |
use_ref_video_audio | boolean | No | Also feed each reference video's own soundtrack as an audio reference (default false) |
Wan Video Models
model defaults to wan/v2.2-a14b/text-to-video when omitted.
| Model ID | Type | Required inputs |
|---|---|---|
wan/v2.2-a14b/text-to-video | Text-to-Video (standard) | prompt |
wan/v2.2-a14b/text-to-video/turbo | Text-to-Video (turbo) | prompt |
wan/v2.2-a14b/image-to-video | Image-to-Video (standard) | prompt, image_url |
wan/v2.2-a14b/image-to-video/turbo | Image-to-Video (turbo) | prompt, image_url |
wan/v2.2-a14b/speech-to-video | Speech-to-Video (lip-sync) | prompt, image_url, audio_url |
wan/v2.2-a14b/animate | Animate (motion transfer) | prompt, image_url, video_url |
Turbo variants ignore
num_inference_stepsandguidance_scaleand use fixed internal defaults. Standard mode caps 1080p at 81 frames; turbo allows 153.
LTX-Video Image-Audio-to-Video
Frame-based, driven by a still image plus an optional audio track.
| Model ID | Type | Required inputs |
|---|---|---|
ltx-video/v2.3/image-audio-to-video | Image(+Audio)-to-Video | prompt, image_url (optional audio_url) |
| Parameter | Default | Notes |
|---|---|---|
image_url | — | Required |
audio_url | — | Optional soundtrack / drive audio |
resolution_tier + aspect_ratio | 1280×720 | 480p/512p/720p/1080p × 16:9/9:16/1:1 |
frames_per_second | 24 | |
duration | 5 | Converted to num_frames = duration × fps + 1 |
Allowed sizes: 854×480, 1280×720, 1920×1080, 480×854, 720×1280, 1080×1920, 480×480, 720×720, 1080×1080.
Max frames by tier: 480p 481, 720p 241, 1080p 121. Frame counts are not subject to the Wan 1+4k alignment.
LTX Pricing (per frame): 480p $0.0008, 512p $0.0009, 720p and above $0.0012.
MiniMax H3 FL2VA Parameters
MiniMax H3 is exposed as text-to-video, image-to-video and reference-to-video:
| Model ID | Type | Required inputs |
|---|---|---|
minimax/h3/text-to-video | Text-to-Video | prompt |
minimax/h3/text-to-video/turbo | Text-to-Video Turbo | prompt |
minimax/h3/image-to-video | Image-to-Video | prompt, image_url |
minimax/h3/image-to-video/turbo | Image-to-Video Turbo | prompt, image_url |
minimax/h3/reference-to-video | Reference-to-Video | prompt, and at least one of reference_image_urls / reference_video_urls |
minimax/h3/reference-to-video/turbo | Reference-to-Video Turbo | same as standard |
| Parameter | Default | Allowed values |
|---|---|---|
resolution_tier | 480p | 480p, 768p |
aspect_ratio | 16:9 | 16:9, 4:3, 1:1, 3:4, 9:16 |
duration | 5 | 4–15 seconds |
seed | random | integer |
frames_per_second | fixed | 24fps; not selectable |
Reference-to-Video input caps — the current Standard and Turbo limits below
apply at both tiers. The image cap is higher when sending images only (no
reference video or audio). Check the selected variant in
GET /api/v1/pricing/config for current limits:
minimax_h3_ref2va_limits or minimax_h3_ref2va_turbo_limits.
minimax/h3/reference-to-video and minimax/h3/reference-to-video/turbo
| Limit | 480p | 768p |
|---|---|---|
| Reference images (with videos/audio) | 5 | 5 |
| Reference images (images only) | 9 | 9 |
| Reference videos | 3 | 3 |
| Reference audios | 3 | 3 |
| Total reference video length | 15.1s | 15.1s |
| Reference image longest edge | 2048px | 2048px |
Reference video FPS must be 24 or lower; reference audio 10s or shorter each; reference image aspect ratio 4.0 or lower.
Reference input URLs must be accessible to the service. See
upload requirements. Address references in the prompt
with one-based tags such as <Picture 1>, <Video 1> and <Audio 1> that
correspond to the submitted arrays. Audio references alone do not satisfy the
required visual input.
Note this is a combined budget: hitting each per-type cap individually does not mean they can all be hit at once.
MiniMax H3 Pricing (10 credits = $1 USD):
Per output second, regardless of duration:
| Model | 480p USD/sec | 768p USD/sec | 480p credits/sec | 768p credits/sec |
|---|---|---|---|---|
text-to-video, image-to-video | $0.0045 | $0.012 | 0.045 | 0.12 |
text-to-video/turbo, image-to-video/turbo | $0.006 | $0.009 | 0.06 | 0.09 |
reference-to-video | $0.0045 | $0.012 | 0.045 | 0.12 |
reference-to-video/turbo | $0.006 | $0.009 | 0.06 | 0.09 |
Reference-to-Video adds the reference inputs on top of the output:
total = duration x base_rate
+ max(0, reference_images - 5) x image_rate # first 5 images free
+ reference_audios x $0 # reference audio is free
+ reference_video_seconds x base_rate # same per-second rate as the output tier| Model | Resolution | Base USD/sec | Reference image | Reference audio | Reference video USD/sec |
|---|---|---|---|---|---|
reference-to-video | 480p | $0.0045 | first 5 free, then $0.0075 each | free | $0.0045 |
reference-to-video | 768p | $0.012 | first 5 free, then $0.0075 each | free | $0.012 |
reference-to-video/turbo | 480p | $0.006 | first 5 free, then $0.0025 each | free | $0.006 |
reference-to-video/turbo | 768p | $0.009 | first 5 free, then $0.0025 each | free | $0.009 |
Example — reference-to-video, 5s at 768p with 2 reference images and 3 reference audios:
5 x $0.012 + 0 + 0 = 0.6 credits. 5s at 480p with 9 images only: 5 x $0.0045 + 4 x $0.0075 = 0.525 credits.
Live rates are published at GET /api/v1/pricing/config (reference_image_free_count carries the free allowance).
Select minimax_h3_ref2va_pricing for Standard or
minimax_h3_ref2va_turbo_pricing for Turbo; their reference-image fees differ.
For the full current schedule, see pricing.
Custom LoRA Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lora_id | string | Conditional | ID of LoRA model to use for custom styles |
lora_scale | float | No | Strength of LoRA effect (0.0-1.0, default: 1.0) |
loras | array | No | Array of LoRA objects for multiple LoRAs (each with path and optional scale) |
Standard (Non-Turbo) Mode Quality Parameters
Apply only to standard models (wan/v2.2-a14b/text-to-video, wan/v2.2-a14b/image-to-video).
Turbo models (/turbo suffix) ignore these and use fixed internal defaults.
| Parameter | Type | Default | Range | Description |
|---|---|---|---|---|
num_inference_steps | integer | 40 | 4-40 | Denoising steps. More = better quality, slower |
guidance_scale | float | 3.5 | 1.0-10.0 | HIGH_NOISE_CFG (1st stage guidance) |
guidance_scale_2 | float | 5.0 (T2V) / 3.5 (I2V) | 1.0-10.0 | LOW_NOISE_CFG (2nd stage guidance) |
high_noise_model_shift | float | 5.0 | 3.0-12.0 | HIGH_NOISE_MODEL_SHIFT (flow shift, 1st stage) |
low_noise_model_shift | float | 5.0 | 3.0-12.0 | LOW_NOISE_MODEL_SHIFT (flow shift, 2nd stage) |
high_noise_end_step | integer | steps/2 | 1-steps | Step boundary between 1st and 2nd stage |
Safety Checker Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
enable_input_safety_checker | boolean | true | Screen prompt and input image for policy violations before generation. Set to false to disable (e.g., trusted enterprise use cases). |
enable_output_safety_checker | boolean | true | Scan generated video frames for NSFW content after generation. If flagged, the job is rejected and credits are refunded. Set to false to disable. |
Note: Both checkers are enabled by default. Disabling is intended for enterprise users with their own content moderation pipelines.
Content Policy Violation Response (400 Bad Request)
If input safety checker detects a violation, the request is rejected immediately, before any processing starts:
{
"error": "content_policy_violation",
"message": "Your prompt contains content that violates our content policy. Please revise your prompt and try again.",
"reason": "nsfw_prompt"
}For input image violations:
{
"error": "content_policy_violation",
"message": "The input image contains explicit content that violates our content policy. Please use a different image.",
"reason": "explicit_content_nudenet"
}Image Generation Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text description of the image to generate |
model | string | Yes | Image model identifier (see supported models below) |
width | integer | No | Resolution width (default: 1024) |
height | integer | No | Resolution height (default: 1024) |
num_images | integer | No | Number of images to generate, 1–4 (default: 1). FLUX.2-dev and GPT Image 2 ignore this and always generate 1 image. |
image_size | string or object | No | Output size for image-edit models, instead of width/height. Omit to match the input image. Presets: square_hd (1024×1024), square (512×512), portrait_4_3 (768×1024), portrait_16_9 (768×1280), landscape_4_3 (1024×768), landscape_16_9 (1280×768). Or pass {"width": W, "height": H}. |
num_inference_steps | integer | No | Denoising steps. Qwen: 1–40 (default: 28). Z-Turbo: 1–4 (default: 4). Not accepted by FLUX.2-dev or GPT Image 2 — those have fixed internal step counts. |
guidance_scale | float | No | Guidance scale, 1.0–20.0 (default: 5.0). Not accepted by FLUX.2-dev, GPT Image 2, or Z-Image Turbo — those have fixed CFG. |
seed | integer | No | Random seed for reproducibility |
lora_id | string | No | LoRA model ID |
lora_scale | float | No | LoRA strength multiplier (0.0–1.0, default: 1.0) |
image_url | string | No | S3 key for image-to-image or image-edit input |
image_urls | array | No | Multiple input images for image-edit models (qwen-image/v2511/image-edit, flux2/dev/image-edit). The first entry is also used as image_url if that field is omitted. |
strength | float | No | Image-to-image denoising strength, 0.0–1.0 (image-to-image models only) |
output_format | string | No | Output format (default: "png") |
enable_input_safety_checker | boolean | No | Screen prompt before generation (default: true) |
enable_output_safety_checker | boolean | No | Scan output image after generation (default: true) |
Supported Image Models:
| Model ID | Type |
|---|---|
openai/gpt-image-2/text-to-image | Text-to-Image (GPT Image 2) |
flux2/dev/text-to-image | Text-to-Image (FLUX.2-dev) |
flux2/dev/image-edit | Image Edit (FLUX.2-dev) |
qwen-image/v2512/text-to-image | Text-to-Image (high quality) |
qwen-image/v2512/text-to-image/lora | Text-to-Image with LoRA |
qwen-image/v2511/image-edit | Multi-image reference editing |
z-image/turbo/text-to-image | Text-to-Image (fast) |
z-image/turbo/text-to-image/lora | Text-to-Image with LoRA (fast) |
z-image/turbo/image-to-image | Image-to-Image (fast) |
z-image/turbo/image-to-image/lora | Image-to-Image with LoRA (fast) |
Allowed Image Resolutions: 512×512, 1024×1024, 1024×768, 768×1024, 1280×768, 768×1280
flux2/dev/text-to-imageandflux2/dev/image-edithave their own set — 2048×1536, 1536×2048, 2048×1152, 1152×2048, 2048×2048, 1024×1024.
openai/gpt-image-2/text-to-imagehas its own set — 1024×1024, 1920×1072 (16:9 1080p), 1072×1920 (9:16 1080p), 2560×1440 (16:9 2K), 1440×2560 (9:16 2K). Note 1080p uses 1072, not 1080: width and height must both be multiples of 16 (1080 ÷ 16 = 67.5). It always returns exactly 1 image (num_imagesis ignored, as with FLUX.2-dev), and also ignoresnum_inference_steps,guidance_scaleandoutput_format; the only parameters it accepts areprompt,model,width,height, andseed.Any other size is rejected with
400 Invalid parameters.
Image Pricing (10 credits = $1 USD):
| Model | USD/image | Credits/image | With LoRA (USD) | With LoRA (Credits) |
|---|---|---|---|---|
| GPT Image 2 T2I | $0.03 | 0.3 | — | — |
| FLUX.2-dev T2I | $0.006 | 0.06 | — | — |
| FLUX.2-dev Image Edit | $0.012 | 0.12 | — | — |
| Z-Image Turbo (T2I / I2I) | $0.0025 | 0.025 | $0.003 | 0.03 |
| Qwen Image T2I | $0.015 | 0.15 | $0.018 | 0.18 |
| Qwen Image Edit | $0.003 | 0.03 | — | — |
Flat per-image pricing — all resolutions same price. Price multiplied by
num_imagesfor supported multi-image models; FLUX.2-dev is fixed at 1 image per request.
Response
Success (200 OK)
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued",
"message": "Task submitted successfully"
}Error Responses
Insufficient Credits (402 Payment Required)
{
"error": "Insufficient credits",
"detail": "You need $0.05 credits to generate this video"
}Invalid Request (400 Bad Request)
{
"error": "Invalid request",
"detail": "num_frames must be between 1 and 200"
}Unauthorized (401 Unauthorized)
{
"error": "API key required",
"message": "X-API-Key header is required"
}Examples
MiniMax H3 Text-to-Video
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax/h3/text-to-video",
"prompt": "A cinematic wide shot of a fantasy kingdom at sunrise, sweeping camera movement, 4K film look",
"resolution_tier": "480p",
"aspect_ratio": "16:9",
"duration": 5,
"seed": 42
}'MiniMax H3 Image-to-Video
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax/h3/image-to-video",
"prompt": "The character turns toward the camera as wind moves through the scene, cinematic lighting",
"image_url": "images/img-abc123",
"resolution_tier": "768p",
"aspect_ratio": "16:9",
"duration": 5
}'Reference-to-Video (MiniMax H3)
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax/h3/reference-to-video",
"prompt": "Use <Picture 1> and <Picture 2> as sequential keyframes; slow push-in, cinematic 35mm look.",
"reference_image_urls": [
"https://your-storage/keyframe-1.webp",
"https://your-storage/keyframe-2.webp"
],
"resolution_tier": "768p",
"aspect_ratio": "16:9",
"duration": 5
}'Reference each input explicitly in the prompt with <Picture n>, <Video n> and <Audio n>.
References that are uploaded but never named in the prompt are still billed, and the model
treats them only as loose hints. Indexes follow upload order; when use_ref_video_audio is
on, each reference video's own soundtrack takes an <Audio n> slot before your uploaded audio.
Basic Text-to-Video (Wan)
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A serene mountain landscape at sunrise",
"negative_prompt": "blurry, low quality",
"num_frames": 81,
"frames_per_second": 16
}'Image-to-Video Generation
import requests
# First, upload the image
with open("input.jpg", "rb") as f:
upload_response = requests.post(
"https://phosor.ai/api/v1/storage/image/upload",
headers={"X-API-Key": "your-api-key"},
files={"image": f}
)
image_url = upload_response.json()["s3_url"]
# Then submit with image_url
response = requests.post(
"https://phosor.ai/api/v1/inference/submit",
headers={
"X-API-Key": "your-api-key",
"Content-Type": "application/json"
},
json={
"prompt": "The scene comes alive with movement",
"image_url": image_url,
"num_frames": 81,
"frames_per_second": 16
}
)
print(response.json())Using LoRA Models
import requests
response = requests.post(
"https://phosor.ai/api/v1/inference/submit",
headers={
"X-API-Key": "your-api-key",
"Content-Type": "application/json"
},
json={
"prompt": "A character in anime style walking in a park",
"lora_id": "abc123-def456-ghi789",
"lora_scale": 0.8,
"num_frames": 81,
"frames_per_second": 16,
"seed": 42
}
)
print(response.json())Custom Video Length
import requests
# Generate a 10-second video (160 frames at 16 fps)
response = requests.post(
"https://phosor.ai/api/v1/inference/submit",
headers={
"X-API-Key": "your-api-key",
"Content-Type": "application/json"
},
json={
"prompt": "A time-lapse of clouds moving across the sky",
"num_frames": 160,
"frames_per_second": 16
}
)
print(response.json())Text-to-Image (Z-Image Turbo)
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A cat sitting in a sunlit garden",
"model": "z-image/turbo/text-to-image",
"width": 1024,
"height": 1024
}'Text-to-Image (Qwen Image 2512)
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Professional portrait, studio lighting, shallow depth of field",
"model": "qwen-image/v2512/text-to-image",
"width": 1024,
"height": 768,
"num_inference_steps": 28
}'Image-to-Image
import requests
# Step 1: Upload input image
with open("input.jpg", "rb") as f:
upload_response = requests.post(
"https://phosor.ai/api/v1/storage/image/upload",
headers={"X-API-Key": "your-api-key"},
files={"image": f}
)
image_url = upload_response.json()["s3_url"]
# Step 2: Submit image-to-image
response = requests.post(
"https://phosor.ai/api/v1/inference/submit",
headers={
"X-API-Key": "your-api-key",
"Content-Type": "application/json"
},
json={
"prompt": "Oil painting style",
"model": "z-image/turbo/image-to-image",
"image_url": image_url,
"strength": 0.7
}
)
print(response.json())Speech-to-Video (S2V)
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "wan/v2.2-a14b/speech-to-video",
"audio_url": "audio/aud-abc123",
"image_url": "images/img-def456",
"resolution_tier": "480p",
"num_frames": 77
}'Animate
curl -X POST https://phosor.ai/api/v1/inference/submit \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "wan/v2.2-a14b/animate",
"video_url": "videos/vid-abc123",
"image_url": "images/img-def456",
"resolution_tier": "480p",
"num_frames": 17
}'Speech-to-Video (S2V) Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | wan/v2.2-a14b/speech-to-video |
audio_url | string | Yes | S3 key for audio input |
image_url | string | Yes | S3 key for reference image |
width | integer | No | Resolution width |
height | integer | No | Resolution height |
num_frames | integer | No | Number of frames (max 77) |
frames_per_second | integer | No | Frame rate (default: 16) |
resolution_tier | string | No | "480p", "512p", "720p" (no 1080p) |
aspect_ratio | string | No | "16:9", "9:16", "1:1" (default: "16:9") |
S2V Pricing (10 credits = $1 USD, LoRA adds 1.2×):
| Resolution | USD/frame | Credits/frame | With LoRA (1.2×) USD | With LoRA Credits |
|---|---|---|---|---|
| 480p | $0.0009375 | 0.009375 | $0.001125 | 0.01125 |
| 512p | $0.0013125 | 0.013125 | $0.001575 | 0.015750 |
| 720p | $0.001875 | 0.01875 | $0.00225 | 0.0225 |
Supported resolutions: 480p, 512p, 720p only (no 1080p). Max 77 frames.
Animate Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | wan/v2.2-a14b/animate |
video_url | string | Yes | S3 key for motion reference video |
image_url | string | Yes | S3 key for appearance reference image |
width | integer | No | Resolution width |
height | integer | No | Resolution height |
num_frames | integer | No | Number of frames (max 17) |
frames_per_second | integer | No | Frame rate (default: 16) |
resolution_tier | string | No | "480p", "512p", "720p" (no 1080p) |
aspect_ratio | string | No | "16:9", "9:16", "1:1" (default: "16:9") |
Animate Pricing (10 credits = $1 USD, LoRA adds 1.2×):
| Resolution | USD/frame | Credits/frame | With LoRA (1.2×) USD | With LoRA Credits |
|---|---|---|---|---|
| 480p | $0.00125 | 0.0125 | $0.0015 | 0.015 |
| 512p | $0.00175 | 0.0175 | $0.0021 | 0.021 |
| 720p | $0.0025 | 0.025 | $0.003 | 0.03 |
Supported resolutions: 480p, 512p, 720p only (no 1080p). Max 17 frames.
Audio (TTS) Generation
Generate speech audio from text using Qwen3-TTS CustomVoice.
Example
import requests
response = requests.post(
"https://phosor.ai/api/v1/inference/submit",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "qwen3-tts/text-to-speech/1.7b",
"text": "Hello, welcome to Phosor AI.",
"speaker": "Sohee",
"language": "English"
}
)
job = response.json()
request_id = job["request_id"]Audio Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | "qwen3-tts/text-to-speech/1.7b" |
text | string | Yes | Text to synthesize (max 500 characters) |
speaker | string | No | Preset voice (default: "Sohee") |
language | string | No | Language tag (default: "Chinese") |
seed | integer | No | Random seed for reproducibility (-1 = random) |
temperature | float | No | Sampling temperature, 0.0–2.0 (default: 0.9) |
top_p | float | No | Nucleus sampling, (0.0, 1.0] (default: 1.0) |
top_k | integer | No | Top-k sampling, 1–200 (default: 50) |
repetition_penalty | float | No | Repetition penalty, 1.0–2.0 (default: 1.05) |
max_new_tokens | integer | No | Max decoder tokens, 1–4096 (default: 200) |
Available speakers (9 voices):
Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, Aiden, Ono_Anna, Sohee
Available languages (11):
Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian, Auto
Language shortcodes also accepted: zh, en, ja, ko, de, fr, ru, pt, es, it
Audio Pricing (10 credits = $1 USD)
| Metric | USD | Credits |
|---|---|---|
| Per character | $0.00003 | 0.0003 |
| Minimum per request | $0.003 | 0.03 |
Example: 200 chars → max($0.003, 200 × $0.00003) = $0.006 (0.06 credits)
The result URL in /api/v1/inference/result/{request_id} will be an .mp3 audio file.
Video Resolution and Frame Limits
MiniMax H3:
duration: 4–15 secondsframes_per_second: fixed at 24fpsresolution_tier: 480p or 768paspect_ratio: 16:9, 4:3, 1:1, 3:4, 9:16
Wan text-to-video and image-to-video use num_frames instead of H3's
duration-based controls. The maximum is 161 frames at 480p, 512p and 720p;
at 1080p it is 81 frames for Standard or 153 for Turbo.
Wan frame rate: 4–60 fps (default: 16).
For the complete H3 dimension table, Wan dimensions and model-specific input limits, see Video Generation Limits.
Image Resolution Limits
All resolutions are supported at the same price:
- 512×512, 1024×1024, 1024×768, 768×1024, 1280×768, 768×1280
Related Endpoints
- GET /api/v1/inference/status - Check task status
- GET /api/v1/inference/result/{request_id} - Get completed video or image
- POST /api/v1/storage/image/upload - Upload image for I2V or I2I