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.

Get API Key
Qwen Audio API

Models Version

WELCOME BONUS

Get $5 Free Credit on First Payment

No strings attached — add funds and get $5 bonus instantly

Claim Your $5 →

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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)NameLanguages
longanlingxinLongan Lingxin — defaultChinese (Mandarin), English
longanlufengLongan LufengChinese (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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to the generated MP3 audio (R2 CDN)
output.media_typestringMIME type of the output (audio/mpeg)
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen Audio 3.0 TTS Plus API Pricing

Your request will cost $0.035 per 1,000 characters.
2. Qwen Audio 3.0 TTS Flash

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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)NameLanguages
longanfengyueLongan FengyueChinese (Mandarin), English
longanyuanfeiLongan YuanfeiChinese (Mandarin), English
longanlingxiLongan LingxiChinese (Mandarin), English
longanxiaoxinLongan XiaoxinChinese (Mandarin), English
longanhuan_v3.6Longan Huan — defaultChinese (Mandarin), English
longjielidou_v3.6Longjie LidouChinese (Mandarin), English
longpaopao_v3.6Long PaopaoChinese (Mandarin), English
longhuohuo_v3.6Long HuohuoChinese (Mandarin), English
longchuanshu_v3.6Long ChuanshuChinese (Mandarin), English
loongmaryloongmaryEnglish
loongeva_v3.6loongevaEnglish
loongjohnloongJohnEnglish

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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to the generated MP3 audio (R2 CDN)
output.media_typestringMIME type of the output (audio/mpeg)
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen Audio 3.0 TTS Flash API Pricing

Your request will cost $0.03 per 1,000 characters.
3. Qwen 3.0 TTS

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.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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

ParameterRequiredTypeDefaultAllowed values / rangeDescription
textYesstringThe text to be converted to speech. Longer text takes proportionally longer to synthesize.
voiceNostringRyanVivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, Aiden, Ono_Anna, SoheePre-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.
languageNostringAutoAuto, English, Chinese, Spanish, French, German, Italian, Japanese, Korean, Portuguese, RussianLanguage of the spoken output. Auto detects the language from text.
promptNostringOptional style instruction for the delivery, e.g. "Very happy." Ignored when a speaker embedding is supplied.
speaker_voice_embedding_file_urlNostring (URL)Public HTTPS URL to a .safetensors fileURL 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_textNostringThe text that was spoken in the reference audio used to create the speaker embedding. Providing it improves quality when synthesizing with a cloned voice.
temperatureNonumber0.90 to 1Sampling temperature. Higher values make the delivery more varied; lower values make it more deterministic.
top_kNointeger500 or greaterTop-k sampling: how many of the highest-probability tokens are considered at each step.
top_pNonumber10 to 1Nucleus sampling threshold; only tokens within this cumulative probability are considered.
repetition_penaltyNonumber1.050 or greaterPenalty applied to repeated tokens/codes. Raise it to reduce stuttering or repeated sounds.
max_new_tokensNointeger2001 to 8192Maximum number of new codec tokens to generate; caps the length of the generated audio.
subtalker_dosampleNobooleantruetrue, falseEnables sampling for the sub-talker stage. Set to false for greedy, more deterministic decoding.
subtalker_temperatureNonumber0.90 to 1Sampling temperature for the sub-talker stage.
subtalker_top_kNointeger500 or greaterTop-k sampling parameter for the sub-talker stage.
subtalker_top_pNonumber10 to 1Top-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-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_SUBSCRIPTION_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen 3.0 TTS API Pricing

Your request will cost $0.09 per 1,000 characters.
about $0.11 for a typical 200-word paragraph
equivalent to $90 per 1M characters
4. Qwen 3.0 ASR Flash

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-text

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
audio_urlYesstringhttp(s) URL, file up to 10 MBPublic URL of the audio to transcribe. The file is fetched by the gateway, so the URL must be reachable without authentication.
languageNostring— (auto-detected)ISO language code, e.g. en, zh, jaOptional language hint. Omit it and the model detects the language automatically — the detected language is returned in the transcript either way.
contextNostringfree textNames, product terms, acronyms or jargon that appear in the audio. Biases recognition towards this vocabulary, which improves accuracy on proper nouns and domain terminology.
formatNostringfrom file extensionwav, mp3, pcm, opus, speex, aac, amr, m4a, flac, ogg, webmContainer format of the audio. Derived from the audio_url file extension; supply it explicitly when the URL has no recognisable extension.
enable_itnNobooleanfalsetrue, falseInverse text normalization — render spoken numbers, dates and amounts as digits. Chinese and English only.
sample_rateNointegere.g. 16000Sample 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_url must be an http or https URL 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
}
FieldTypeDescription
textstringThe full transcript, with punctuation and capitalisation.
languagestringDetected language code, e.g. en or zh. Returned whether or not you supplied a hint.
emotionstringDetected speaker emotion, e.g. happy or neutral.
durationnumberLength 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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad 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.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request.
output.media_urlstringURL of the transcript JSON file.
output.media_typestringapplication/json.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is FAILED/ERROR.

Status Values & Flow

QUEUEDPROCESSINGCOMPLETED (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 lengthBilled minutesCost
20 seconds1$0.00282
90 seconds2$0.00564
10 minutes10$0.0282
1 hour60$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

Your request will cost $0.0028 per minute of audio, rounded up.
about $0.03 for a 10-minute recording; billed on the audio you submit, not the transcript
equivalent to $0.1692 per audio hour
5. Qwen 3.0 ASR Flash Filetrans

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-text

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
audio_urlYesstringhttp(s) URL, file up to 2 GB / 12 hoursPublic 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.
durationNointeger12 hours1 – 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_url must be an http or https URL. 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!"
    }
  ]
}
FieldTypeDescription
textstringThe full transcript, with punctuation and capitalisation.
languagestringDetected language code, e.g. en or zh. Returned whether or not you supplied a hint.
emotionstringDetected speaker emotion, e.g. happy or neutral.
durationnumberSeconds of speech found in the audio, excluding silence. This is the quantity you are billed on.
audio_infoobjectDetected container format and sample_rate of the source file.
sentencesarraySentence-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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — missing audio_url, a non-http(s) URL, or a file larger than 2 GB.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request.
output.media_urlstringURL of the transcript JSON file.
output.media_typestringapplication/json.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is FAILED/ERROR.

Status Values & Flow

QUEUEDPROCESSINGCOMPLETED (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 lengthBilled minutesCost
20 seconds of speech1$0.00282
10 minutes of speech10$0.0282
1 hour of speech60$0.1692
12 hours of speech720$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

Your request will cost $0.0028 per minute of speech, rounded up.
about $0.17 for a one-hour podcast; silence and music are not billed
equivalent to $0.1692 per hour of speech
6. Qwen 3.0 ASR Flash Realtime

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/stream

This 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
MethodWhereUse when
?key=query stringBrowser clients
Ocp-Apim-Subscription-KeyheaderServer-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

ParameterRequiredTypeDefaultAllowed values / rangeDescription
keyYesstringyour subscription keyQuery-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.
languageNostring— (auto-detected)ISO code, e.g. en, zhOptional 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

EventMeaning
session.created / session.updatedSession is ready and your configuration was applied.
input_audio_buffer.speech_startedSpeech detected — an utterance has begun.
input_audio_buffer.speech_stoppedThe speaker paused; the utterance is being finalised.
conversation.item.input_audio_transcription.textPartial. The transcript so far for the current utterance; it will be revised.
conversation.item.input_audio_transcription.completedFinal. The settled transcript for one utterance, with language and emotion.
errorSomething 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

LimitValueWhat happens
Maximum session length15 minutesThe connection closes with reason max_session_reached. Open a new one to continue.
Idle timeout60 secondsA session with no audio closes with reason idle_timeout and is not charged.
Concurrent sessionsFair useEach 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.

StatusMeaning
101Connected — the session is live.
401Missing or invalid subscription key.
402Insufficient balance to reserve a session.
426You sent a plain HTTP request; this endpoint requires a WebSocket upgrade.
503The 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 streamedBilled minutesCost
30 seconds1$0.00282
5 minutes5$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

Your request will cost $0.0028 per minute of audio streamed, rounded up.
about $0.04 for a full 15-minute session
equivalent to $0.1692 per hour streamed
7. Qwen 3 TTS 0.6B

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen 3 TTS 0.6B API Pricing

Your request will cost $0.07 per 1,000 characters.
the lighter, faster Qwen 3 TTS tier at $0.07 per 1,000 characters
equivalent to $70 per 1M characters
8. Qwen 3 TTS Voice Design

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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
textstringYesThe spoken content to be synthesized into speech.
promptstringYesA style or tone description guiding the voice expression (e.g., "speak in a mysterious tone").
languagestringYesThe language of the input text (e.g., "English", "Spanish").
top_kintegerNo50Controls diversity by limiting sampling to the top K most likely tokens.
top_pfloatNo1.0Nucleus sampling threshold; lower values focus on higher-probability tokens.
temperaturefloatNo0.9Controls randomness; higher values increase creativity, lower values increase determinism.
repetition_penaltyfloatNo1.05Penalizes repeated tokens to reduce redundancy in output.
subtalker_dosamplebooleanNotrueEnables sampling for subtalker generation; disables greedy decoding.
subtalker_top_kintegerNo50Top-K sampling parameter for subtalker voice modeling.
subtalker_top_pfloatNo1.0Nucleus sampling threshold for subtalker voice modeling.
subtalker_temperaturefloatNo0.9Temperature for subtalker voice modeling.
max_new_tokensintegerNo200Maximum 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-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYour API subscription key

Response Handling

Common status codes for Qwen 3 TTS Voice Design [1.7B] generate request.

Code Meaning
202 Accepted — Request queued
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen 3 TTS Voice Design API Pricing

Your request will cost $0.09 per 1,000 characters.
describe a voice in words and generate speech in it
equivalent to $90 per 1M characters
9. Qwen 3 TTS Clone Voice 0.6B

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen 3 TTS Clone Voice 0.6B API Pricing

Your request will cost $0.0007 per minute of reference audio.
$0.0007 per minute of the reference clip you upload
10. Qwen 3 TTS Clone Voice 1.7B

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
Too Many Requests
500 Internal Server Error

Request Parameters - Qwen 3 TTS Clone Voice [1.7B] check status

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-1-7b' not found or is disabled"
}

Error via Status/Webhook

{
  "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
}

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-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "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/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 Required Default Description
request_id string Yes Unique identifier returned from the initial request submission.
FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Qwen 3 TTS Clone Voice 1.7B API Pricing

Your request will cost $0.0008 per minute of reference audio.
$0.0008 per minute of the reference clip you upload

⚡ 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).

Show data for the last
Generations
7,800last 30d
~260 per day
Success rate
76.9%
of completed generations
Generation time
31.9savg
p95 36.6s
Requests
Jul 26max 1,300Aug 24
Qwen 3.0 ASR Flash RealtimeAvg 57/day
Qwen 3.0 ASR FlashAvg 43/day
Qwen Audio 3.0 TTS PlusAvg 33/day
Qwen 3.0 TTSAvg 27/day
OtherAvg 100/day
Generation Time
Jul 26max 58.8sAug 24
Qwen 3.0 ASR Flash RealtimeAvg 34.9s
Qwen 3.0 ASR FlashAvg 37.5s
Qwen Audio 3.0 TTS PlusAvg 25.9s
Qwen 3.0 TTSAvg 37.6s
OtherAvg 28.5s
Error Rate
Jul 26max 100.0%Aug 24
Qwen 3.0 ASR Flash RealtimeAvg 23.5%
Qwen 3.0 ASR FlashAvg 7.7%
Qwen Audio 3.0 TTS PlusAvg 0.0%
Qwen 3.0 TTSAvg 37.5%
OtherAvg 33.3%

〰 Uptime

Percent of generations that succeeded over the selected period, per model version.

Avg. Success Rate (30d)
76.92%
across all generations of this model family
Uptime
Jul 26max 100%Aug 24
Qwen 3.0 ASR Flash RealtimeAvg 76.47%
Qwen 3.0 ASR FlashAvg 92.31%
Qwen Audio 3.0 TTS PlusAvg 100.00%
Qwen 3.0 TTSAvg 62.50%
OtherAvg 66.67%