Qwen Audio 3.0 TTS Plus API, Qwen Audio 3.0 TTS Flash API, Qwen 3.0 ASR Flash API, Qwen 3.0 TTS: Pricing, Documentation
by Alibaba
Qwen Audio 3.0 TTS Plus API, developers can convert text into lifelike audio with multilingual support, ideal for voiceovers, virtual assistants, audiobooks, and accessibility applications.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Qwen Audio 3.0 TTS Plus API Documentation
POST https://gateway.pixazo.ai/qwen-audio-3-0-tts-plus/v1/text-to-speech
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Text to Speech - Qwen Audio 3.0 TTS Plus
Request Code
POST https://gateway.pixazo.ai/qwen-audio-3-0-tts-plus/v1/text-to-speech
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanlingxin",
"format": "mp3",
"sample_rate": 22050
}
import requests
url = "https://gateway.pixazo.ai/qwen-audio-3-0-tts-plus/v1/text-to-speech"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanlingxin",
"format": "mp3",
"sample_rate": 22050
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/qwen-audio-3-0-tts-plus/v1/text-to-speech';
const data = {
text: "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
voice: "longanlingxin",
format: "mp3",
sample_rate: 22050
};
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/qwen-audio-3-0-tts-plus/v1/text-to-speech" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanlingxin",
"format": "mp3",
"sample_rate": 22050
}'
Output
{
"request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-plus_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 status-poll response shown under Retrieving Results below. Example terminal callback (mode terminal):
{
"request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-audio-3-0-tts-plus",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-plus/1721597258-a1b2c3d4.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-07-22T10:00:00.000Z",
"updated_at": "2026-07-22 10:00:08",
"completed_at": "2026-07-22 10:00:08"
}
Failure callback shape
{
"request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-audio-3-0-tts-plus",
"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 - Text to Speech - Qwen Audio 3.0 TTS Plus
| Field | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
text |
string | Yes | — | — | The text to synthesize into speech. Must be non-empty. |
voice |
string | No | longanlingxin |
longanlingxin, longanlufeng (see Voices table) |
Voice ID for synthesis. Passing a Qwen Audio 3.0 TTS Flash voice (e.g. longanhuan_v3.6) will be rejected. |
format |
string | No | mp3 |
mp3, wav, pcm |
Audio output format. |
sample_rate |
integer | No | 22050 |
up to 48000 | Output sample rate in Hz (up to 48000). |
Billed $0.035 per 1,000 characters of input text (rounded up per 1,000-character block, minimum one block). The chosen voice, format and sample rate do not affect the price.
Voices - Qwen Audio 3.0 TTS Plus
Pass one of these as the voice parameter. Each voice supports Chinese (Mandarin) and English. Voices are not interchangeable between Qwen Audio 3.0 TTS Plus and Qwen Audio 3.0 TTS Flash.
Voice (voice) | Name | Languages |
|---|---|---|
longanlingxin | Longan Lingxin — default | Chinese (Mandarin), English |
longanlufeng | Longan Lufeng | Chinese (Mandarin), English |
Minimum Request
{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars."
}
Full Request (all options)
{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanlingxin",
"format": "mp3",
"sample_rate": 22050
}
Response
{
"request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-plus_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 Qwen Audio 3.0 TTS Plus Text to Speech.
| 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 'qwen-audio-3-0-tts-plus' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-audio-3-0-tts-plus",
"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/qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-audio-3-0-tts-plus",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-plus/1721597258-a1b2c3d4.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-07-22T10:00:00.000Z",
"updated_at": "2026-07-22T10:00:08.000Z",
"completed_at": "2026-07-22T10:00:08.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 the generated MP3 audio (R2 CDN) |
| output.media_type | string | MIME type of the output (audio/mpeg) |
| 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.
Qwen Audio 3.0 TTS Plus API Pricing
Qwen Audio 3.0 TTS Flash API Documentation
POST https://gateway.pixazo.ai/qwen-audio-3-0-tts-flash/v1/text-to-speech
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Text to Speech - Qwen Audio 3.0 TTS Flash
Request Code
POST https://gateway.pixazo.ai/qwen-audio-3-0-tts-flash/v1/text-to-speech
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanhuan_v3.6",
"format": "mp3",
"sample_rate": 22050
}
import requests
url = "https://gateway.pixazo.ai/qwen-audio-3-0-tts-flash/v1/text-to-speech"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanhuan_v3.6",
"format": "mp3",
"sample_rate": 22050
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/qwen-audio-3-0-tts-flash/v1/text-to-speech';
const data = {
text: "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
voice: "longanhuan_v3.6",
format: "mp3",
sample_rate: 22050
};
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/qwen-audio-3-0-tts-flash/v1/text-to-speech" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanhuan_v3.6",
"format": "mp3",
"sample_rate": 22050
}'
Output
{
"request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-flash_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 status-poll response shown under Retrieving Results below. Example terminal callback (mode terminal):
{
"request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-audio-3-0-tts-flash",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-flash/1721597258-a1b2c3d4.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-07-22T10:00:00.000Z",
"updated_at": "2026-07-22 10:00:08",
"completed_at": "2026-07-22 10:00:08"
}
Failure callback shape
{
"request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-audio-3-0-tts-flash",
"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 - Text to Speech - Qwen Audio 3.0 TTS Flash
| Field | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
text |
string | Yes | — | — | The text to synthesize into speech. Must be non-empty. |
voice |
string | No | longanhuan_v3.6 |
longanfengyue, longanyuanfei, longanlingxi, longanxiaoxin, longanhuan_v3.6, longjielidou_v3.6, longpaopao_v3.6, longhuohuo_v3.6, longchuanshu_v3.6, loongmary, loongeva_v3.6, loongjohn (see Voices table) |
Voice ID for synthesis. Passing a Qwen Audio 3.0 TTS Plus voice (e.g. longanlingxin) will be rejected. |
format |
string | No | mp3 |
mp3, wav, pcm |
Audio output format. |
sample_rate |
integer | No | 22050 |
up to 48000 | Output sample rate in Hz (up to 48000). |
Billed $0.03 per 1,000 characters of input text (rounded up per 1,000-character block, minimum one block). The chosen voice, format and sample rate do not affect the price.
Voices - Qwen Audio 3.0 TTS Flash
Pass one of these as the voice parameter. Each voice supports Chinese (Mandarin) and English; the loong* voices are English-focused. Voices are not interchangeable between Qwen Audio 3.0 TTS Flash and Qwen Audio 3.0 TTS Plus.
Voice (voice) | Name | Languages |
|---|---|---|
longanfengyue | Longan Fengyue | Chinese (Mandarin), English |
longanyuanfei | Longan Yuanfei | Chinese (Mandarin), English |
longanlingxi | Longan Lingxi | Chinese (Mandarin), English |
longanxiaoxin | Longan Xiaoxin | Chinese (Mandarin), English |
longanhuan_v3.6 | Longan Huan — default | Chinese (Mandarin), English |
longjielidou_v3.6 | Longjie Lidou | Chinese (Mandarin), English |
longpaopao_v3.6 | Long Paopao | Chinese (Mandarin), English |
longhuohuo_v3.6 | Long Huohuo | Chinese (Mandarin), English |
longchuanshu_v3.6 | Long Chuanshu | Chinese (Mandarin), English |
loongmary | loongmary | English |
loongeva_v3.6 | loongeva | English |
loongjohn | loongJohn | English |
Minimum Request
{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars."
}
Full Request (all options)
{
"text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
"voice": "longanhuan_v3.6",
"format": "mp3",
"sample_rate": 22050
}
Response
{
"request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-flash_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 Qwen Audio 3.0 TTS Flash Text to Speech.
| 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 'qwen-audio-3-0-tts-flash' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-audio-3-0-tts-flash",
"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/qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-audio-3-0-tts-flash",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-flash/1721597258-a1b2c3d4.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-07-22T10:00:00.000Z",
"updated_at": "2026-07-22T10:00:08.000Z",
"completed_at": "2026-07-22T10:00:08.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 the generated MP3 audio (R2 CDN) |
| output.media_type | string | MIME type of the output (audio/mpeg) |
| 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.
Qwen Audio 3.0 TTS Flash API Pricing
Qwen 3.0 TTS API Documentation
https://gateway.pixazo.ai/qwen3-tts-1-7b-api-401/v1/qwen3-tts-1-7b-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 |
Qwen3-TTS 1.7B API check status - Qwen3-TTS 1.7B API
Request Code
POST https://gateway.pixazo.ai/qwen3-tts-1-7b-api-401/v1/qwen3-tts-1-7b-api-request-result
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "Welcome to Pixazo. This speech was generated with Qwen3-TTS.",
"voice": "Ryan",
"language": "English"
}
import requests
url = "https://gateway.pixazo.ai/qwen3-tts-1-7b-api-401/v1/qwen3-tts-1-7b-api-request-result"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "Welcome to Pixazo. This speech was generated with Qwen3-TTS.",
"voice": "Ryan",
"language": "English"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/qwen3-tts-1-7b-api-401/v1/qwen3-tts-1-7b-api-request-result';
const data = {
text: 'Welcome to Pixazo. This speech was generated with Qwen3-TTS.',
voice: 'Ryan',
language: 'English'
};
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/qwen3-tts-1-7b-api-401/v1/qwen3-tts-1-7b-api-request-result" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"text": "Welcome to Pixazo. This speech was generated with Qwen3-TTS.",
"voice": "Ryan",
"language": "English"
}'
Output
{
"request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-tts-1-7b-api-401_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": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen3-tts-1-7b-api-401",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
],
"media_type": "audio/wav"
},
"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": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen3-tts-1-7b-api-401",
"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 - Qwen3-TTS 1.7B API check status
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| text | Yes | string | — | — | The text to be converted to speech. Longer text takes proportionally longer to synthesize. |
| voice | No | string | Ryan | Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, Aiden, Ono_Anna, Sohee | Pre-trained voice used for synthesis; each voice is tuned for a primary language. Ignored when speaker_voice_embedding_file_url is supplied. If you send neither a voice nor a speaker embedding, the gateway applies Ryan. |
| language | No | string | Auto | Auto, English, Chinese, Spanish, French, German, Italian, Japanese, Korean, Portuguese, Russian | Language of the spoken output. Auto detects the language from text. |
| prompt | No | string | — | — | Optional style instruction for the delivery, e.g. "Very happy." Ignored when a speaker embedding is supplied. |
| speaker_voice_embedding_file_url | No | string (URL) | — | Public HTTPS URL to a .safetensors file | URL of a speaker-embedding file produced by the Qwen 3 TTS clone-voice endpoint. When set, the cloned voice is used instead of voice. |
| reference_text | No | string | — | — | The text that was spoken in the reference audio used to create the speaker embedding. Providing it improves quality when synthesizing with a cloned voice. |
| temperature | No | number | 0.9 | 0 to 1 | Sampling temperature. Higher values make the delivery more varied; lower values make it more deterministic. |
| top_k | No | integer | 50 | 0 or greater | Top-k sampling: how many of the highest-probability tokens are considered at each step. |
| top_p | No | number | 1 | 0 to 1 | Nucleus sampling threshold; only tokens within this cumulative probability are considered. |
| repetition_penalty | No | number | 1.05 | 0 or greater | Penalty applied to repeated tokens/codes. Raise it to reduce stuttering or repeated sounds. |
| max_new_tokens | No | integer | 200 | 1 to 8192 | Maximum number of new codec tokens to generate; caps the length of the generated audio. |
| subtalker_dosample | No | boolean | true | true, false | Enables sampling for the sub-talker stage. Set to false for greedy, more deterministic decoding. |
| subtalker_temperature | No | number | 0.9 | 0 to 1 | Sampling temperature for the sub-talker stage. |
| subtalker_top_k | No | integer | 50 | 0 or greater | Top-k sampling parameter for the sub-talker stage. |
| subtalker_top_p | No | number | 1 | 0 to 1 | Top-p (nucleus) sampling parameter for the sub-talker stage. |
Example Request
{
"text": "Welcome to Pixazo. This speech was generated with Qwen3-TTS.",
"voice": "Ryan",
"language": "English"
}
Response
{
"request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-tts-1-7b-api-401_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 'qwen3-tts-1-7b-api-401' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen3-tts-1-7b-api-401",
"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/qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen3-tts-1-7b-api-401",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen3-tts-1-7b-api-401_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.
Qwen 3.0 TTS API Pricing
Qwen 3.0 ASR Flash API Documentation
Transcribe audio into text with automatic language detection across 11 languages and Chinese dialects, plus speaker emotion detection. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED. The transcript is returned as a JSON file.
POST https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-textAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Speech to Text - Qwen 3.0 ASR Flash
Request Code
POST https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-text
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"language": "en",
"context": "Acme Corp, Dr. Yamada, quarterly earnings"
}import requests
url = "https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-text"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"language": "en",
"context": "Acme Corp, Dr. Yamada, quarterly earnings"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-text", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"language": "en",
"context": "Acme Corp, Dr. Yamada, quarterly earnings"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-text' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3", "language": "en", "context": "Acme Corp, Dr. Yamada, quarterly earnings"}'Output
{
"request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-text' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3", "language": "en", "context": "Acme Corp, Dr. Yamada, quarterly earnings"}'Callback Payload (success)
{
"request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen3-asr-flash",
"output": {
"media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
"media_type": "application/json"
},
"created_at": "2026-07-31T11:34:16.102Z",
"completed_at": "2026-07-31T11:34:20.123Z"
}Failure callback shape
{
"request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen3-asr-flash",
"error": "Description of the failure"
}Delivery semantics
- terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
audio_url | Yes | string | — | http(s) URL, file up to 10 MB | Public URL of the audio to transcribe. The file is fetched by the gateway, so the URL must be reachable without authentication. |
language | No | string | — (auto-detected) | ISO language code, e.g. en, zh, ja | Optional language hint. Omit it and the model detects the language automatically — the detected language is returned in the transcript either way. |
context | No | string | — | free text | Names, product terms, acronyms or jargon that appear in the audio. Biases recognition towards this vocabulary, which improves accuracy on proper nouns and domain terminology. |
format | No | string | from file extension | wav, mp3, pcm, opus, speex, aac, amr, m4a, flac, ogg, webm | Container format of the audio. Derived from the audio_url file extension; supply it explicitly when the URL has no recognisable extension. |
enable_itn | No | boolean | false | true, false | Inverse text normalization — render spoken numbers, dates and amounts as digits. Chinese and English only. |
sample_rate | No | integer | — | e.g. 16000 | Sample rate in Hz. Only needed for raw pcm input, which carries no header. |
Audio limits
- The audio file must be at most 10 MB. Larger files are rejected before transcription starts.
audio_urlmust be anhttporhttpsURL and must be publicly reachable.- Cost scales with the length of the audio (see Pricing).
Transcript Format
The completed request returns output.media_url, a JSON file containing the transcript. Fetch that URL to read the result.
{
"text": "Senior staff, Principal Doris Jackson, Wakefield faculty, and of course my fellow classmates. I am honored to have been chosen to speak today.",
"language": "en",
"emotion": "happy",
"duration": 17
}| Field | Type | Description |
|---|---|---|
| text | string | The full transcript, with punctuation and capitalisation. |
| language | string | Detected language code, e.g. en or zh. Returned whether or not you supplied a hint. |
| emotion | string | Detected speaker emotion, e.g. happy or neutral. |
| duration | number | Length of the transcribed audio in seconds. This is the quantity you are billed on. |
This model returns a whole-transcript result. Word-level timestamps are not available.
Example Request
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"language": "en",
"context": "Acme Corp, Dr. Yamada, quarterly earnings"
}Example Response
{
"request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — missing audio_url, a non-http(s) URL, or an audio format that could not be determined from the URL and was not supplied. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 429 | Too many requests. |
| 500 | Internal server error. |
An unreachable audio_url, an oversized file, or audio containing no detectable speech is reported through the status endpoint as status: "ERROR", not as a synchronous error. Failed requests are not billed.
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR), then fetch output.media_url for the transcript.
curl 'https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen3-asr-flash",
"output": {
"media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
"media_type": "application/json"
},
"created_at": "2026-07-31T11:34:16.102Z",
"completed_at": "2026-07-31T11:34:20.123Z"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | string | URL of the transcript JSON file. |
| output.media_type | string | application/json. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Pricing
Billed at $0.00282 per minute of audio ($0.1692 per audio hour), rounded up to the next whole minute. Billing is based on the length of the audio you submit, not on the size of the transcript.
| Audio length | Billed minutes | Cost |
|---|---|---|
| 20 seconds | 1 | $0.00282 |
| 90 seconds | 2 | $0.00564 |
| 10 minutes | 10 | $0.0282 |
| 1 hour | 60 | $0.1692 |
A hold is placed when the request is submitted, because the audio length is not known until transcription completes. The hold is reduced to the real cost once the duration is known, and released in full if the request fails.
Qwen 3.0 ASR Flash API Pricing
Qwen 3.0 ASR Flash Filetrans API Documentation
Transcribe long audio and video — up to 2 GB and 12 hours per file — with automatic language detection, per-sentence emotion and sentence-level timestamps. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED. The transcript is returned as a JSON file.
POST https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-textAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Speech to Text - Qwen 3.0 ASR Flash Filetrans
Request Code
POST https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-text
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"duration": 3600
}import requests
url = "https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-text"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"duration": 3600
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-text", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"duration": 3600
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-text' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3", "duration": 3600}'Output
{
"request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-text' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3", "duration": 3600}'Callback Payload (success)
{
"request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen3-asr-flash-filetrans",
"output": {
"media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
"media_type": "application/json"
},
"created_at": "2026-07-31T11:34:16.102Z",
"completed_at": "2026-07-31T11:34:20.123Z"
}Failure callback shape
{
"request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen3-asr-flash-filetrans",
"error": "Description of the failure"
}Delivery semantics
- terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
audio_url | Yes | string | — | http(s) URL, file up to 2 GB / 12 hours | Public URL of the audio or video file to transcribe. The file is fetched by the speech service directly, so the URL must remain publicly reachable, without authentication, until the job finishes. |
duration | No | integer | 12 hours | 1 – 43200 (seconds) | Length of the audio in seconds. Optional, and it never changes what you are charged — you are always billed on the speech the model actually finds. Supplying it reserves only what the job will cost instead of the 12-hour maximum, which matters when your balance is low. |
Audio limits
- Up to 2 GB and 12 hours per file.
- Audio and video are both accepted:
mp3,wav,m4a,flac,ogg,opus,aac,amr,wma,mp4,mkv,mov,avi,flv,webm,wmv,mpeg. Audio is extracted from video automatically. audio_urlmust be anhttporhttpsURL. Unlike the short-form endpoint, the file is not copied to our storage first — it is read straight from your URL, which must stay reachable for the whole job.- Cost scales with the length of the speech in the audio (see Pricing).
Transcript Format
The completed request returns output.media_url, a JSON file containing the transcript. Fetch that URL to read the result.
{
"text": "Merry Christmas to all, and to all a good night!",
"language": "en",
"emotion": "happy",
"duration": 6,
"audio_info": {
"format": "mp3",
"sample_rate": 44100
},
"sentences": [
{
"sentence_id": 0,
"begin_time": 0,
"end_time": 6250,
"language": "en",
"emotion": "happy",
"text": "Merry Christmas to all, and to all a good night!"
}
]
}| Field | Type | Description |
|---|---|---|
| text | string | The full transcript, with punctuation and capitalisation. |
| language | string | Detected language code, e.g. en or zh. Returned whether or not you supplied a hint. |
| emotion | string | Detected speaker emotion, e.g. happy or neutral. |
| duration | number | Seconds of speech found in the audio, excluding silence. This is the quantity you are billed on. |
| audio_info | object | Detected container format and sample_rate of the source file. |
| sentences | array | Sentence-level segments: {sentence_id, begin_time, end_time, language, emotion, text}, with times in milliseconds. |
Sentences carry their own language and emotion, so mixed-language recordings are labelled per sentence rather than per file.
Example Request
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"duration": 3600
}Example Response
{
"request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — missing audio_url, a non-http(s) URL, or a file larger than 2 GB. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 429 | Too many requests. |
| 500 | Internal server error. |
An unreachable audio_url, an oversized file, or audio containing no detectable speech is reported through the status endpoint as status: "ERROR", not as a synchronous error. Failed requests are not billed.
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR), then fetch output.media_url for the transcript.
curl 'https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen3-asr-flash-filetrans",
"output": {
"media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
"media_type": "application/json"
},
"created_at": "2026-07-31T11:34:16.102Z",
"completed_at": "2026-07-31T11:34:20.123Z"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | string | URL of the transcript JSON file. |
| output.media_type | string | application/json. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Pricing
Billed at $0.00282 per minute of speech ($0.1692 per hour), rounded up to the next whole minute. Billing counts only the speech in the file — silence, music and dead air are excluded, so a sparse recording costs less than its wall-clock length.
| Audio length | Billed minutes | Cost |
|---|---|---|
| 20 seconds of speech | 1 | $0.00282 |
| 10 minutes of speech | 10 | $0.0282 |
| 1 hour of speech | 60 | $0.1692 |
| 12 hours of speech | 720 | $2.0304 |
A hold is placed when the request is submitted, because the amount of speech is not known until transcription completes. Without a duration hint the hold is the 12-hour maximum ($2.0304); supplying duration reserves only what the job will cost. Either way the hold is reduced to the real cost on completion, and released in full if the request fails.
Qwen 3.0 ASR Flash Filetrans API Pricing
Qwen 3.0 ASR Flash Realtime API Documentation
Live speech-to-text over a WebSocket. Stream audio as it is captured and receive transcripts as the words arrive — partial results while someone is still speaking, then a final result per utterance with detected language and emotion. Built for live captions, voice agents and dictation.
WSS wss://asr-stream.pixazo.ai/v1/streamThis is a streaming API, so unlike our other speech-to-text models there is no submit-and-poll cycle and no request_id. The connection is the request.
Authentication
Pass your subscription key either as a query parameter or as a header. The query form exists because browsers cannot set headers on a WebSocket connection.
wss://asr-stream.pixazo.ai/v1/stream?key=YOUR_SUBSCRIPTION_KEY&language=en| Method | Where | Use when |
|---|---|---|
?key= | query string | Browser clients |
| Ocp-Apim-Subscription-Key | header | Server-side clients |
Treat a key in a URL with the same care as any other credential — it can appear in proxy and browser logs. For public-facing pages, proxy the connection through your own backend rather than shipping the key to the browser.
Speech to Text (Streaming) - Qwen 3.0 ASR Flash Realtime
Client Code
const ws = new WebSocket(
"wss://asr-stream.pixazo.ai/v1/stream?key=" + encodeURIComponent(PIXAZO_API_KEY)
);
ws.onopen = () => {
ws.send(JSON.stringify({
type: "session.update",
session: {
modalities: ["text"],
input_audio_format: "pcm",
sample_rate: 16000,
turn_detection: { type: "server_vad" }
}
}));
};
// Send 16-bit mono PCM at 16 kHz, about 100 ms (3200 bytes) per frame.
function sendAudio(pcmChunk) {
ws.send(JSON.stringify({
type: "input_audio_buffer.append",
audio: btoa(String.fromCharCode(...new Uint8Array(pcmChunk)))
}));
}
ws.onmessage = (ev) => {
const msg = JSON.parse(ev.data);
if (msg.type.endsWith("transcription.text")) {
console.log("partial:", msg.text); // updates as they speak
}
if (msg.type.endsWith("transcription.completed")) {
console.log("final:", msg.transcript, msg.language, msg.emotion);
}
};import base64, json, websockets, asyncio
URL = "wss://asr-stream.pixazo.ai/v1/stream?key=" + PIXAZO_API_KEY
async def transcribe(pcm_stream):
async with websockets.connect(URL) as ws:
await ws.send(json.dumps({
"type": "session.update",
"session": {
"modalities": ["text"],
"input_audio_format": "pcm",
"sample_rate": 16000,
"turn_detection": {"type": "server_vad"},
},
}))
async def send():
# 3200 bytes = 100 ms of 16-bit mono PCM at 16 kHz
for chunk in pcm_stream:
await ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": base64.b64encode(chunk).decode(),
}))
await asyncio.sleep(0.1)
await ws.send(json.dumps({"type": "input_audio_buffer.commit"}))
asyncio.create_task(send())
async for raw in ws:
msg = json.loads(raw)
if msg["type"].endswith("transcription.completed"):
print(msg["transcript"], msg["language"], msg["emotion"])Final Result Event
{
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_MaUP928DS8dtUSntYnfcK",
"transcript": "Merry Christmas to all, and to all a good night!",
"language": "en",
"emotion": "happy"
}Session Protocol
After connecting, configure the session, then stream audio frames. Results arrive continuously.
1. Configure the session
{
"type": "session.update",
"session": {
"modalities": [
"text"
],
"input_audio_format": "pcm",
"sample_rate": 16000,
"input_audio_transcription": {
"language": "en"
},
"turn_detection": {
"type": "server_vad"
}
}
}2. Stream audio frames
{
"type": "input_audio_buffer.append",
"audio": "<base64 pcm frame>"
}With server_vad turn detection the service segments speech for you and emits one final result per utterance. Send {"type":"input_audio_buffer.commit"} to flush the last utterance before closing.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
key | Yes | string | — | your subscription key | Query-string form of the API key. Browsers cannot set headers on a WebSocket, so the key goes in the URL. Server-side clients may instead send it as the Ocp-Apim-Subscription-Key or X-Subscription-Key header. |
language | No | string | — (auto-detected) | ISO code, e.g. en, zh | Optional language hint for the session. Omit it and the model detects the language automatically — the detected language is returned on every final result either way. |
Audio format
- 16-bit signed PCM, mono, 16 kHz, little-endian, base64 encoded.
- About 100 ms per frame — 3200 bytes. Larger frames add latency; much smaller ones add overhead.
- Send audio at roughly real time. Sending far faster than real time gives no benefit.
Server Events
| Event | Meaning |
|---|---|
| session.created / session.updated | Session is ready and your configuration was applied. |
| input_audio_buffer.speech_started | Speech detected — an utterance has begun. |
| input_audio_buffer.speech_stopped | The speaker paused; the utterance is being finalised. |
| conversation.item.input_audio_transcription.text | Partial. The transcript so far for the current utterance; it will be revised. |
| conversation.item.input_audio_transcription.completed | Final. The settled transcript for one utterance, with language and emotion. |
| error | Something went wrong; the message explains what. |
Partial result
{
"type": "conversation.item.input_audio_transcription.text",
"item_id": "item_MaUP928DS8dtUSntYnfcK",
"text": "Merry Christmas to all, and"
}Render partials as provisional text and replace them when the matching completed event arrives — partials are revised as more audio is heard.
Session Limits
| Limit | Value | What happens |
|---|---|---|
| Maximum session length | 15 minutes | The connection closes with reason max_session_reached. Open a new one to continue. |
| Idle timeout | 60 seconds | A session with no audio closes with reason idle_timeout and is not charged. |
| Concurrent sessions | Fair use | Each open session reserves funds for its maximum length until it closes. |
For continuous transcription beyond 15 minutes, open a fresh connection when the previous one closes. For pre-recorded files, use the file-based models instead — they accept up to 12 hours in one request and need no streaming client.
Connection Errors
Authentication and billing are resolved during the WebSocket handshake, so failures appear as an HTTP status on the upgrade request, before any session exists.
| Status | Meaning |
|---|---|
| 101 | Connected — the session is live. |
| 401 | Missing or invalid subscription key. |
| 402 | Insufficient balance to reserve a session. |
| 426 | You sent a plain HTTP request; this endpoint requires a WebSocket upgrade. |
| 503 | The service is temporarily unable to verify your key or reach the speech backend. |
Once connected, problems arrive as an error event on the socket rather than as a status code.
Pricing
Billed at $0.00282 per minute of audio streamed ($0.1692 per hour), rounded up to the next whole minute. You are charged for the audio you send, measured on our side — silent air you stream still counts, so stop sending when there is nothing to transcribe.
| Audio streamed | Billed minutes | Cost |
|---|---|---|
| 30 seconds | 1 | $0.00282 |
| 5 minutes | 5 | $0.0141 |
| 15 minutes (one full session) | 15 | $0.0423 |
Opening a session reserves the cost of a full 15 minutes. The reservation is reduced to what you actually streamed when the session closes, and released entirely if no audio was sent.
Qwen 3.0 ASR Flash Realtime API Pricing
Qwen 3 TTS 0.6B API Documentation
https://gateway.pixazo.ai/qwen-3-tts-text-to-speech-0-6b/v1/qwen-3-tts-text-to-speech-0-6b-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 |
Qwen 3 TTS - Text to Speech [0.6B] generate request - Qwen 3 TTS - Text to Speech [0.6B]
Request Code
POST https://gateway.pixazo.ai/qwen-3-tts-text-to-speech-0-6b/v1/qwen-3-tts-text-to-speech-0-6b-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "The morning sun cast golden rays across the quiet village, as the sound of birdsong filled the crisp autumn air.",
"prompt": "Very happy.",
"voice": "Vivian",
"language": "English"
}
import requests
url = "https://gateway.pixazo.ai/qwen-3-tts-text-to-speech-0-6b/v1/qwen-3-tts-text-to-speech-0-6b-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "The morning sun cast golden rays across the quiet village, as the sound of birdsong filled the crisp autumn air.",
"prompt": "Very happy.",
"voice": "Vivian",
"language": "English"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/qwen-3-tts-text-to-speech-0-6b/v1/qwen-3-tts-text-to-speech-0-6b-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
"text": "The morning sun cast golden rays across the quiet village, as the sound of birdsong filled the crisp autumn air.",
"prompt": "Very happy.",
"voice": "Vivian",
"language": "English"
};
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/qwen-3-tts-text-to-speech-0-6b/v1/qwen-3-tts-text-to-speech-0-6b-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"text": "The morning sun cast golden rays across the quiet village, as the sound of birdsong filled the crisp autumn air.",
"prompt": "Very happy.",
"voice": "Vivian",
"language": "English"
}'
Output
{
"request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-text-to-speech-0-6b_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": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-text-to-speech-0-6b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
],
"media_type": "audio/wav"
},
"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": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-text-to-speech-0-6b",
"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 - Qwen 3 TTS - Text to Speech [0.6B] generate request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| text | string | Yes | — | The input text to be converted into speech. |
| prompt | string | Yes | — | Emotional or stylistic prompt to guide voice expression (e.g., "Very happy.", "Sad and slow."). |
| voice | string | Yes | — | Name of the pre-trained voice to use (e.g., "Vivian"). For custom voices, use the assigned voice ID. |
| language | string | Yes | — | Language of the input text (e.g., "English", "Spanish", "Chinese"). |
| top_k | integer | No | 50 | Controls diversity of token selection during generation. Higher values increase randomness. |
| top_p | float | No | 1.0 | Nucleus sampling threshold. Lower values focus on high-probability tokens. |
| temperature | float | No | 0.9 | Controls randomness in token sampling. Higher values increase creativity. |
| repetition_penalty | float | No | 1.05 | Penalizes repeated tokens to reduce redundancy. |
| subtalker_dosample | boolean | No | true | Enables sampling for subtalker model. Disable for deterministic output. |
| subtalker_top_k | integer | No | 50 | Top-k sampling parameter for subtalker model. |
| subtalker_top_p | float | No | 1.0 | Nucleus sampling threshold for subtalker model. |
| subtalker_temperature | float | No | 0.9 | Temperature parameter for subtalker model. |
| max_new_tokens | integer | No | 200 | Maximum number of tokens to generate in the output audio sequence. |
Minimum Request
{
"text": "Hello world.",
"prompt": "Normal",
"voice": "Vivian",
"language": "English"
}
Full Request (all options)
{
"text": "The morning sun cast golden rays across the quiet village, as the sound of birdsong filled the crisp autumn air.",
"prompt": "Very happy.",
"voice": "Vivian",
"language": "English",
"top_k": 50,
"top_p": 1.0,
"temperature": 0.9,
"repetition_penalty": 1.05,
"subtalker_dosample": true,
"subtalker_top_k": 50,
"subtalker_top_p": 1.0,
"subtalker_temperature": 0.9,
"max_new_tokens": 200
}
Response
{
"request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-text-to-speech-0-6b_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 Qwen 3 TTS - Text to Speech [0.6B] 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 'qwen-3-tts-text-to-speech-0-6b' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-text-to-speech-0-6b",
"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/qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-text-to-speech-0-6b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-text-to-speech-0-6b_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.
Qwen 3 TTS 0.6B API Pricing
Qwen 3 TTS Voice Design API Documentation
https://gateway.pixazo.ai/qwen-3-tts-voice-design-1-7b/v1/qwen-3-tts-voice-design-1-7b-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 |
Qwen 3 TTS Voice Design [1.7B] generate request - Qwen 3 TTS Voice Design [1.7B]
Request Code
POST https://gateway.pixazo.ai/qwen-3-tts-voice-design-1-7b/v1/qwen-3-tts-voice-design-1-7b-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
"prompt": "Speak in a mysterious and atmospheric tone.",
"language": "English"
}
import requests
url = "https://gateway.pixazo.ai/qwen-3-tts-voice-design-1-7b/v1/qwen-3-tts-voice-design-1-7b-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
"prompt": "Speak in a mysterious and atmospheric tone.",
"language": "English"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/qwen-3-tts-voice-design-1-7b/v1/qwen-3-tts-voice-design-1-7b-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
text: "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
prompt: "Speak in a mysterious and atmospheric tone.",
language: "English"
};
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/qwen-3-tts-voice-design-1-7b/v1/qwen-3-tts-voice-design-1-7b-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
"prompt": "Speak in a mysterious and atmospheric tone.",
"language": "English"
}'
Output
{
"request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-voice-design-1-7b_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": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-voice-design-1-7b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
],
"media_type": "audio/wav"
},
"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": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-voice-design-1-7b",
"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 - Qwen 3 TTS Voice Design [1.7B] generate request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| text | string | Yes | — | The spoken content to be synthesized into speech. |
| prompt | string | Yes | — | A style or tone description guiding the voice expression (e.g., "speak in a mysterious tone"). |
| language | string | Yes | — | The language of the input text (e.g., "English", "Spanish"). |
| top_k | integer | No | 50 | Controls diversity by limiting sampling to the top K most likely tokens. |
| top_p | float | No | 1.0 | Nucleus sampling threshold; lower values focus on higher-probability tokens. |
| temperature | float | No | 0.9 | Controls randomness; higher values increase creativity, lower values increase determinism. |
| repetition_penalty | float | No | 1.05 | Penalizes repeated tokens to reduce redundancy in output. |
| subtalker_dosample | boolean | No | true | Enables sampling for subtalker generation; disables greedy decoding. |
| subtalker_top_k | integer | No | 50 | Top-K sampling parameter for subtalker voice modeling. |
| subtalker_top_p | float | No | 1.0 | Nucleus sampling threshold for subtalker voice modeling. |
| subtalker_temperature | float | No | 0.9 | Temperature for subtalker voice modeling. |
| max_new_tokens | integer | No | 200 | Maximum number of tokens to generate in the output sequence. |
Minimum Request
{
"text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
"prompt": "Speak in a mysterious and atmospheric tone.",
"language": "English"
}
Full Request (all options)
{
"text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
"prompt": "Speak in a mysterious and atmospheric tone.",
"language": "English",
"top_k": 50,
"top_p": 1.0,
"temperature": 0.9,
"repetition_penalty": 1.05,
"subtalker_dosample": true,
"subtalker_top_k": 50,
"subtalker_top_p": 1.0,
"subtalker_temperature": 0.9,
"max_new_tokens": 200
}
Response
{
"request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-voice-design-1-7b_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 Qwen 3 TTS Voice Design [1.7B] 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 'qwen-3-tts-voice-design-1-7b' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-voice-design-1-7b",
"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/qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-voice-design-1-7b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-voice-design-1-7b_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.
Qwen 3 TTS Voice Design API Pricing
Qwen 3 TTS Clone Voice 0.6B API Documentation
https://gateway.pixazo.ai/qwen-3-tts-clone-voice-0-6b/v1/qwen-3-tts-clone-voice-0-6b-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 |
Qwen 3 TTS Clone Voice [0.6B] generate request - Qwen 3 TTS Clone Voice [0.6B]
Request Code
POST https://gateway.pixazo.ai/qwen-3-tts-clone-voice-0-6b/v1/qwen-3-tts-clone-voice-0-6b-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "Welcome to the presentation. Today we will explore the fascinating world of artificial intelligence and its impact on everyday life."
}
import requests
url = "https://gateway.pixazo.ai/qwen-3-tts-clone-voice-0-6b/v1/qwen-3-tts-clone-voice-0-6b-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "Welcome to the presentation. Today we will explore the fascinating world of artificial intelligence and its impact on everyday life."
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/qwen-3-tts-clone-voice-0-6b/v1/qwen-3-tts-clone-voice-0-6b-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "Welcome to the presentation. Today we will explore the fascinating world of artificial intelligence and its impact on everyday life."
};
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/qwen-3-tts-clone-voice-0-6b/v1/qwen-3-tts-clone-voice-0-6b-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "Welcome to the presentation. Today we will explore the fascinating world of artificial intelligence and its impact on everyday life."
}'
Output
{
"request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-clone-voice-0-6b_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": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-clone-voice-0-6b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
],
"media_type": "audio/wav"
},
"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": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-clone-voice-0-6b",
"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 - Qwen 3 TTS Clone Voice [0.6B] generate request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| audio_url | string | Yes | — | An audio file containing the voice sample to clone. Supported formats: MP3, WAV, FLAC. |
| reference_text | string | Yes | — | The exact spoken text from the audio sample. This is used to align the audio with the transcript for accurate voice embedding. |
Minimum Request
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "Welcome to the presentation. Today we will explore the fascinating world of artificial intelligence and its impact on everyday life."
}
Full Request (all options)
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "Welcome to the presentation. Today we will explore the fascinating world of artificial intelligence and its impact on everyday life."
}
Response
{
"request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-clone-voice-0-6b_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 Qwen 3 TTS Clone Voice [0.6B] 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 'qwen-3-tts-clone-voice-0-6b' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-clone-voice-0-6b",
"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/qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-clone-voice-0-6b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-clone-voice-0-6b_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.
Qwen 3 TTS Clone Voice 0.6B API Pricing
Qwen 3 TTS Clone Voice 1.7B API Documentation
https://gateway.pixazo.ai/qwen-3-tts-clone-voice-1-7b/v1/qwen-3-tts-clone-voice-1-7b-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 |
Qwen 3 TTS Clone Voice [1.7B] generate request - Qwen 3 TTS Clone Voice [1.7B]
Request Code
POST https://gateway.pixazo.ai/qwen-3-tts-clone-voice-1-7b/v1/qwen-3-tts-clone-voice-1-7b-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "The quarterly results exceeded expectations across all major business segments, demonstrating strong momentum heading into the new fiscal year."
}
import requests
url = "https://gateway.pixazo.ai/qwen-3-tts-clone-voice-1-7b/v1/qwen-3-tts-clone-voice-1-7b-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "The quarterly results exceeded expectations across all major business segments, demonstrating strong momentum heading into the new fiscal year."
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/qwen-3-tts-clone-voice-1-7b/v1/qwen-3-tts-clone-voice-1-7b-request";
const data = {
audio_url: "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
reference_text: "The quarterly results exceeded expectations across all major business segments, demonstrating strong momentum heading into the new fiscal year."
};
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/qwen-3-tts-clone-voice-1-7b/v1/qwen-3-tts-clone-voice-1-7b-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "The quarterly results exceeded expectations across all major business segments, demonstrating strong momentum heading into the new fiscal year."
}'
Output
{
"request_id": "qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-clone-voice-1-7b_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": "qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "qwen-3-tts-clone-voice-1-7b",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
],
"media_type": "audio/wav"
},
"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": "qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "qwen-3-tts-clone-voice-1-7b",
"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 - Qwen 3 TTS Clone Voice [1.7B] generate request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| audio_url | string | Yes | — | An audio file containing the speaker's voice. Supported formats: MP3, WAV, FLAC. |
| reference_text | string | Yes | — | The exact spoken text from the audio sample. Must match the content of the audio clip to enable accurate voice embedding. |
Minimum Request
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "The quarterly results exceeded expectations across all major business segments, demonstrating strong momentum heading into the new fiscal year."
}
Full Request (all options)
{
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
"reference_text": "The quarterly results exceeded expectations across all major business segments, demonstrating strong momentum heading into the new fiscal year."
}
Response
{
"request_id": "qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-clone-voice-1-7b_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 Qwen 3 TTS Clone Voice [1.7B] 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 |
Request Parameters - Qwen 3 TTS Clone Voice [1.7B] check status
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| request_id | string | Yes | — | Unique identifier returned from the initial request submission. |
| 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.
Qwen 3 TTS Clone Voice 1.7B API Pricing
⚡ Performance
Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).
〰 Uptime
Percent of generations that succeeded over the selected period, per model version.