---
type: AI Model
id: qwen-audio
title: Qwen Audio API
provider: Alibaba
description: "Speech models by Alibaba's Qwen: text-to-speech synthesis, and Qwen 3.0 ASR Flash speech-to-text for short clips, long-form audio and video up to 12 hours, or live streaming transcription over WebSocket."
resource: https://www.pixazo.ai/models/qwen-audio
docs_url: https://www.pixazo.ai/models/qwen-audio
latest_version: v3
tags:
  - text-to-speech
  - speech-to-text
  - alibaba
variants:
  - id: qwen-audio-3-0-tts-plus
    name: Qwen Audio 3.0 TTS Plus
    version: 3.0
    capabilities:
      - Text to Speech(Audio)
  - id: qwen-audio-3-0-tts-flash
    name: Qwen Audio 3.0 TTS Flash
    version: 3.0
    capabilities:
      - Text to Speech(Audio)
  - id: qwen-v3
    name: Qwen 3.0 TTS
    version: 3.0
    capabilities:
      - Text to Speech
  - id: qwen3-asr-flash
    name: Qwen 3.0 ASR Flash
    version: Flash
    capabilities:
      - Speech to Text
  - id: qwen3-asr-flash-filetrans
    name: Qwen 3.0 ASR Flash Filetrans
    version: Filetrans
    capabilities:
      - Speech to Text (Long-form)
  - id: qwen3-asr-flash-realtime
    name: Qwen 3.0 ASR Flash Realtime
    version: Realtime
    capabilities:
      - Speech to Text (Streaming)
  - id: qwen-3-tts-text-to-speech-0-6b
    name: Qwen 3 TTS 0.6B
    version: 3 TTS 0.6B
    capabilities:
      - Text to Speech
  - id: qwen-3-tts-voice-design-1-7b
    name: Qwen 3 TTS Voice Design
    version: 3 Voice Design
    capabilities:
      - Voice Design
  - id: qwen-3-tts-clone-voice-0-6b
    name: Qwen 3 TTS Clone Voice 0.6B
    version: 3 Clone 0.6B
    capabilities:
      - Voice Cloning
  - id: qwen-3-tts-clone-voice-1-7b
    name: Qwen 3 TTS Clone Voice 1.7B
    version: 3 Clone 1.7B
    capabilities:
      - Voice Cloning
timestamp: 2026-08-24T10:11:40.631Z
---

# Qwen Audio API

> Provider: **Alibaba**
> Source: https://www.pixazo.ai/models/qwen-audio

Speech models by Alibaba's Qwen: text-to-speech synthesis, and Qwen 3.0 ASR Flash speech-to-text for short clips, long-form audio and video up to 12 hours, or live streaming transcription over WebSocket.

## Qwen Audio 3.0 TTS Plus

### Text to Speech(Audio)

## Qwen Audio 3.0 TTS Plus Text to Speech 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

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen-audio-3-0-tts-plus&operation=text-to-speech)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the status-poll response shown under **Retrieving Results** below. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-audio-3-0-tts-plus",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-plus/1721597258-a1b2c3d4.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-07-22T10:00:00.000Z",
  "updated_at": "2026-07-22 10:00:08",
  "completed_at": "2026-07-22 10:00:08"
}
```

### Failure callback shape

```
{
  "request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-audio-3-0-tts-plus",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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`)

Name

Languages

`longanlingxin`

Longan Lingxin — default

Chinese (Mandarin), English

`longanlufeng`

Longan Lufeng

Chinese (Mandarin), English

## Minimum Request

```
{
  "text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars."
}
```

## Full Request (all options)

```
{
  "text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
  "voice": "longanlingxin",
  "format": "mp3",
  "sample_rate": 22050
}
```

## Response

```
{
  "request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Content-Type

application/json

Cache-Control

no-cache

Ocp-Apim-Subscription-Key

Your API subscription key

## Response Handling

Common status codes for Qwen Audio 3.0 TTS Plus Text to Speech.

Code

Meaning

202

Accepted — Request queued

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

429

Too Many Requests

500

Internal Server Error

## Error Responses

Queue system errors and model validation errors.

### Queue System Errors

```
// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
```

```
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'qwen-audio-3-0-tts-plus' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-audio-3-0-tts-plus",
  "error": "Description of the error",
  "output": null
}
```

## Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

### Endpoint

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
```

## cURL Example

```
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "qwen-audio-3-0-tts-plus_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-audio-3-0-tts-plus",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-plus/1721597258-a1b2c3d4.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-07-22T10:00:00.000Z",
  "updated_at": "2026-07-22T10:00:08.000Z",
  "completed_at": "2026-07-22T10:00:08.000Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to the generated MP3 audio (R2 CDN)

output.media\_type

string

MIME type of the output (audio/mpeg)

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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

### Text to Speech(Audio)

## Qwen Audio 3.0 TTS Flash Text to Speech 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

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen-audio-3-0-tts-flash&operation=text-to-speech)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the status-poll response shown under **Retrieving Results** below. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-audio-3-0-tts-flash",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-flash/1721597258-a1b2c3d4.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-07-22T10:00:00.000Z",
  "updated_at": "2026-07-22 10:00:08",
  "completed_at": "2026-07-22 10:00:08"
}
```

### Failure callback shape

```
{
  "request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-audio-3-0-tts-flash",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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`)

Name

Languages

`longanfengyue`

Longan Fengyue

Chinese (Mandarin), English

`longanyuanfei`

Longan Yuanfei

Chinese (Mandarin), English

`longanlingxi`

Longan Lingxi

Chinese (Mandarin), English

`longanxiaoxin`

Longan Xiaoxin

Chinese (Mandarin), English

`longanhuan_v3.6`

Longan Huan — default

Chinese (Mandarin), English

`longjielidou_v3.6`

Longjie Lidou

Chinese (Mandarin), English

`longpaopao_v3.6`

Long Paopao

Chinese (Mandarin), English

`longhuohuo_v3.6`

Long Huohuo

Chinese (Mandarin), English

`longchuanshu_v3.6`

Long Chuanshu

Chinese (Mandarin), English

`loongmary`

loongmary

English

`loongeva_v3.6`

loongeva

English

`loongjohn`

loongJohn

English

## Minimum Request

```
{
  "text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars."
}
```

## Full Request (all options)

```
{
  "text": "Welcome to the show. Today we explore the mysteries of deep space and the stories hidden among the stars.",
  "voice": "longanhuan_v3.6",
  "format": "mp3",
  "sample_rate": 22050
}
```

## Response

```
{
  "request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Content-Type

application/json

Cache-Control

no-cache

Ocp-Apim-Subscription-Key

Your API subscription key

## Response Handling

Common status codes for Qwen Audio 3.0 TTS Flash Text to Speech.

Code

Meaning

202

Accepted — Request queued

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

429

Too Many Requests

500

Internal Server Error

## Error Responses

Queue system errors and model validation errors.

### Queue System Errors

```
// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
```

```
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'qwen-audio-3-0-tts-flash' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-audio-3-0-tts-flash",
  "error": "Description of the error",
  "output": null
}
```

## Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

### Endpoint

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
```

## cURL Example

```
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "qwen-audio-3-0-tts-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-audio-3-0-tts-flash",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/qwen-audio-3-0-tts-flash/1721597258-a1b2c3d4.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-07-22T10:00:00.000Z",
  "updated_at": "2026-07-22T10:00:08.000Z",
  "completed_at": "2026-07-22T10:00:08.000Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to the generated MP3 audio (R2 CDN)

output.media\_type

string

MIME type of the output (audio/mpeg)

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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

### Text to Speech

## Base URL

```
https://gateway.pixazo.ai/qwen3-tts-1-7b-api-401/v1/qwen3-tts-1-7b-api-request
```

## Authentication

All requests require an API key passed via header.

Header

Type

Required

Description

Ocp-Apim-Subscription-Key

string

Yes

Your API subscription key

## Qwen3-TTS 1.7B API check status - Qwen3-TTS 1.7B API

## Request Code

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen3-tts-1-7b-api-401&operation=qwen3-tts-1-7b-api-request-result)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the `GET /v2/requests/status/{request_id}` response. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen3-tts-1-7b-api-401",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}
```

### Failure callback shape

```
{
  "request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen3-tts-1-7b-api-401",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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

Parameter

Required

Type

Default

Allowed values / range

Description

text

Yes

string

—

—

The text to be converted to speech. Longer text takes proportionally longer to synthesize.

voice

No

string

Ryan

Vivian, Serena, Uncle\_Fu, Dylan, Eric, Ryan, Aiden, Ono\_Anna, Sohee

Pre-trained voice used for synthesis; each voice is tuned for a primary language. Ignored when `speaker_voice_embedding_file_url` is supplied. If you send neither a voice nor a speaker embedding, the gateway applies `Ryan`.

language

No

string

Auto

Auto, English, Chinese, Spanish, French, German, Italian, Japanese, Korean, Portuguese, Russian

Language of the spoken output. `Auto` detects the language from `text`.

prompt

No

string

—

—

Optional style instruction for the delivery, e.g. "Very happy." Ignored when a speaker embedding is supplied.

speaker\_voice\_embedding\_file\_url

No

string (URL)

—

Public HTTPS URL to a `.safetensors` file

URL of a speaker-embedding file produced by the Qwen 3 TTS clone-voice endpoint. When set, the cloned voice is used instead of `voice`.

reference\_text

No

string

—

—

The text that was spoken in the reference audio used to create the speaker embedding. Providing it improves quality when synthesizing with a cloned voice.

temperature

No

number

0.9

0 to 1

Sampling temperature. Higher values make the delivery more varied; lower values make it more deterministic.

top\_k

No

integer

50

0 or greater

Top-k sampling: how many of the highest-probability tokens are considered at each step.

top\_p

No

number

1

0 to 1

Nucleus sampling threshold; only tokens within this cumulative probability are considered.

repetition\_penalty

No

number

1.05

0 or greater

Penalty applied to repeated tokens/codes. Raise it to reduce stuttering or repeated sounds.

max\_new\_tokens

No

integer

200

1 to 8192

Maximum number of new codec tokens to generate; caps the length of the generated audio.

subtalker\_dosample

No

boolean

true

true, false

Enables sampling for the sub-talker stage. Set to `false` for greedy, more deterministic decoding.

subtalker\_temperature

No

number

0.9

0 to 1

Sampling temperature for the sub-talker stage.

subtalker\_top\_k

No

integer

50

0 or greater

Top-k sampling parameter for the sub-talker stage.

subtalker\_top\_p

No

number

1

0 to 1

Top-p (nucleus) sampling parameter for the sub-talker stage.

## Example Request

```
{
  "text": "Welcome to Pixazo. This speech was generated with Qwen3-TTS.",
  "voice": "Ryan",
  "language": "English"
}
```

## Response

```
{
  "request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Content-Type

application/json

Cache-Control

no-cache

Ocp-Apim-Subscription-Key

YOUR\_SUBSCRIPTION\_KEY

## Response Handling

Common status codes.

Code

Meaning

202

Accepted — Request queued

400

Bad Request

401

Unauthorized

402

Insufficient Balance

403

Forbidden

429

Too Many Requests

500

Internal Server Error

## Error Responses

Queue system errors and model validation errors.

### Queue System Errors

```
// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
```

```
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'qwen3-tts-1-7b-api-401' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen3-tts-1-7b-api-401",
  "error": "Description of the error",
  "output": null
}
```

## Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

### Endpoint

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
```

## cURL Example

```
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "qwen3-tts-1-7b-api-401_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen3-tts-1-7b-api-401",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen3-tts-1-7b-api-401_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to generated media (R2 CDN)

output.media\_type

string

MIME type of the output

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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 ASR Flash

### Speech to Text

## 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.

Header

Type

Required

Description

Ocp-Apim-Subscription-Key

string

Yes

Your API subscription key

## Speech to Text - Qwen 3.0 ASR Flash

## Request Code

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen3-asr-flash&operation=qwen3-asr-flash-request)

## Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

Header

Required

Description

X-Webhook-URL

To enable

HTTPS URL to receive the Webhook callback.

X-Webhook-Mode

No

`terminal` (default, one callback on COMPLETED/ERROR) or `sync` (per-poll callbacks).

### Example: enable Webhook

```
curl -X POST 'https://gateway.pixazo.ai/qwen3-asr-flash/v1/speech-to-text' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3", "language": "en", "context": "Acme Corp, Dr. Yamada, quarterly earnings"}'
```

### Callback Payload (success)

```
{
  "request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen3-asr-flash",
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
    "media_type": "application/json"
  },
  "created_at": "2026-07-31T11:34:16.102Z",
  "completed_at": "2026-07-31T11:34:20.123Z"
}
```

### Failure callback shape

```
{
  "request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen3-asr-flash",
  "error": "Description of the failure"
}
```

#### Delivery semantics

-   **terminal** mode: one Webhook callback when the request is COMPLETED or ERROR.
-   **sync** mode: a Webhook callback on each status change.
-   Callbacks are idempotent on `request_id` — de-duplicate on it.
-   Respond `200` within a few seconds; the Webhook endpoint must be HTTPS.

## Request Parameters

Parameter

Required

Type

Default

Allowed values / range

Description

`audio_url`

Yes

string

—

http(s) URL, file up to 10 MB

Public URL of the audio to transcribe. The file is fetched by the gateway, so the URL must be reachable without authentication.

`language`

No

string

— (auto-detected)

ISO language code, e.g. `en`, `zh`, `ja`

Optional language hint. Omit it and the model detects the language automatically — the detected language is returned in the transcript either way.

`context`

No

string

—

free text

Names, product terms, acronyms or jargon that appear in the audio. Biases recognition towards this vocabulary, which improves accuracy on proper nouns and domain terminology.

`format`

No

string

from file extension

`wav`, `mp3`, `pcm`, `opus`, `speex`, `aac`, `amr`, `m4a`, `flac`, `ogg`, `webm`

Container format of the audio. Derived from the `audio_url` file extension; supply it explicitly when the URL has no recognisable extension.

`enable_itn`

No

boolean

`false`

`true`, `false`

Inverse text normalization — render spoken numbers, dates and amounts as digits. Chinese and English only.

`sample_rate`

No

integer

—

e.g. `16000`

Sample rate in Hz. Only needed for raw `pcm` input, which carries no header.

### Audio limits

-   The audio file must be at most **10 MB**. Larger files are rejected before transcription starts.
-   `audio_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
}
```

Field

Type

Description

text

string

The full transcript, with punctuation and capitalisation.

language

string

Detected language code, e.g. `en` or `zh`. Returned whether or not you supplied a hint.

emotion

string

Detected speaker emotion, e.g. `happy` or `neutral`.

duration

number

Length of the transcribed audio in seconds. This is the quantity you are billed on.

This model returns a whole-transcript result. Word-level timestamps are not available.

## Example Request

```
{
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
  "language": "en",
  "context": "Acme Corp, Dr. Yamada, quarterly earnings"
}
```

## Example Response

```
{
  "request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Required

Description

Content-Type

Yes

`application/json`

Ocp-Apim-Subscription-Key

Yes

Your API subscription key.

X-Webhook-URL

No

Enable Webhook callbacks (see Webhook section).

## Response Handling

Status Code

Meaning

202

Accepted — request queued; returns `request_id` and `polling_url`.

400

Bad request — missing `audio_url`, a non-http(s) URL, or an audio format that could not be determined from the URL and was not supplied.

401

Unauthorized — missing or invalid subscription key.

402

Insufficient balance.

429

Too many requests.

500

Internal server error.

An unreachable `audio_url`, an oversized file, or audio containing no detectable speech is reported through the status endpoint as `status: "ERROR"`, not as a synchronous error. Failed requests are not billed.

## Retrieving Results

Poll the status endpoint with the `request_id` from the submit response until `status` is `COMPLETED` (or `FAILED`/`ERROR`), then fetch `output.media_url` for the transcript.

```
curl 'https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'
```

### Completed response

```
{
  "request_id": "qwen3-asr-flash_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen3-asr-flash",
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
    "media_type": "application/json"
  },
  "created_at": "2026-07-31T11:34:16.102Z",
  "completed_at": "2026-07-31T11:34:20.123Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier.

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.

model\_id

string

The model that handled the request.

output.media\_url

string

URL of the transcript JSON file.

output.media\_type

string

`application/json`.

created\_at

string

Request creation timestamp.

completed\_at

string

Completion timestamp.

error

string

Error message when `status` is FAILED/ERROR.

## Status Values & Flow

`QUEUED` → `PROCESSING` → `COMPLETED` (success) or `FAILED`/`ERROR` (failure).

### Pricing

Billed at **$0.00282 per minute of audio** ($0.1692 per audio hour), rounded up to the next whole minute. Billing is based on the **length of the audio you submit**, not on the size of the transcript.

Audio length

Billed minutes

Cost

20 seconds

1

$0.00282

90 seconds

2

$0.00564

10 minutes

10

$0.0282

1 hour

60

$0.1692

A hold is placed when the request is submitted, because the audio length is not known until transcription completes. The hold is reduced to the real cost once the duration is known, and released in full if the request fails.

## Qwen 3.0 ASR Flash Filetrans

### Speech to Text (Long-form)

## 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.

Header

Type

Required

Description

Ocp-Apim-Subscription-Key

string

Yes

Your API subscription key

## Speech to Text - Qwen 3.0 ASR Flash Filetrans

## Request Code

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen3-asr-flash-filetrans&operation=qwen3-asr-flash-filetrans-request)

## Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

Header

Required

Description

X-Webhook-URL

To enable

HTTPS URL to receive the Webhook callback.

X-Webhook-Mode

No

`terminal` (default, one callback on COMPLETED/ERROR) or `sync` (per-poll callbacks).

### Example: enable Webhook

```
curl -X POST 'https://gateway.pixazo.ai/qwen3-asr-flash-filetrans/v1/speech-to-text' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3", "duration": 3600}'
```

### Callback Payload (success)

```
{
  "request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen3-asr-flash-filetrans",
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
    "media_type": "application/json"
  },
  "created_at": "2026-07-31T11:34:16.102Z",
  "completed_at": "2026-07-31T11:34:20.123Z"
}
```

### Failure callback shape

```
{
  "request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen3-asr-flash-filetrans",
  "error": "Description of the failure"
}
```

#### Delivery semantics

-   **terminal** mode: one Webhook callback when the request is COMPLETED or ERROR.
-   **sync** mode: a Webhook callback on each status change.
-   Callbacks are idempotent on `request_id` — de-duplicate on it.
-   Respond `200` within a few seconds; the Webhook endpoint must be HTTPS.

## Request Parameters

Parameter

Required

Type

Default

Allowed values / range

Description

`audio_url`

Yes

string

—

http(s) URL, file up to 2 GB / 12 hours

Public URL of the audio or video file to transcribe. The file is fetched by the speech service directly, so the URL must remain publicly reachable, without authentication, until the job finishes.

`duration`

No

integer

12 hours

1 – 43200 (seconds)

Length of the audio in seconds. Optional, and it never changes what you are charged — you are always billed on the speech the model actually finds. Supplying it reserves only what the job will cost instead of the 12-hour maximum, which matters when your balance is low.

### Audio limits

-   Up to **2 GB** and **12 hours** per file.
-   Audio and video are both accepted: `mp3`, `wav`, `m4a`, `flac`, `ogg`, `opus`, `aac`, `amr`, `wma`, `mp4`, `mkv`, `mov`, `avi`, `flv`, `webm`, `wmv`, `mpeg`. Audio is extracted from video automatically.
-   `audio_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!"
    }
  ]
}
```

Field

Type

Description

text

string

The full transcript, with punctuation and capitalisation.

language

string

Detected language code, e.g. `en` or `zh`. Returned whether or not you supplied a hint.

emotion

string

Detected speaker emotion, e.g. `happy` or `neutral`.

duration

number

Seconds of **speech** found in the audio, excluding silence. This is the quantity you are billed on.

audio\_info

object

Detected container `format` and `sample_rate` of the source file.

sentences

array

Sentence-level segments: `{sentence_id, begin_time, end_time, language, emotion, text}`, with times in milliseconds.

Sentences carry their own `language` and `emotion`, so mixed-language recordings are labelled per sentence rather than per file.

## Example Request

```
{
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3",
  "duration": 3600
}
```

## Example Response

```
{
  "request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Required

Description

Content-Type

Yes

`application/json`

Ocp-Apim-Subscription-Key

Yes

Your API subscription key.

X-Webhook-URL

No

Enable Webhook callbacks (see Webhook section).

## Response Handling

Status Code

Meaning

202

Accepted — request queued; returns `request_id` and `polling_url`.

400

Bad request — missing `audio_url`, a non-http(s) URL, or a file larger than 2 GB.

401

Unauthorized — missing or invalid subscription key.

402

Insufficient balance.

429

Too many requests.

500

Internal server error.

An unreachable `audio_url`, an oversized file, or audio containing no detectable speech is reported through the status endpoint as `status: "ERROR"`, not as a synchronous error. Failed requests are not billed.

## Retrieving Results

Poll the status endpoint with the `request_id` from the submit response until `status` is `COMPLETED` (or `FAILED`/`ERROR`), then fetch `output.media_url` for the transcript.

```
curl 'https://gateway.pixazo.ai/v2/requests/status/qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'
```

### Completed response

```
{
  "request_id": "qwen3-asr-flash-filetrans_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen3-asr-flash-filetrans",
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.json",
    "media_type": "application/json"
  },
  "created_at": "2026-07-31T11:34:16.102Z",
  "completed_at": "2026-07-31T11:34:20.123Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier.

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.

model\_id

string

The model that handled the request.

output.media\_url

string

URL of the transcript JSON file.

output.media\_type

string

`application/json`.

created\_at

string

Request creation timestamp.

completed\_at

string

Completion timestamp.

error

string

Error message when `status` is FAILED/ERROR.

## Status Values & Flow

`QUEUED` → `PROCESSING` → `COMPLETED` (success) or `FAILED`/`ERROR` (failure).

### Pricing

Billed at **$0.00282 per minute of speech** ($0.1692 per hour), rounded up to the next whole minute. Billing counts only the **speech** in the file — silence, music and dead air are excluded, so a sparse recording costs less than its wall-clock length.

Audio length

Billed minutes

Cost

20 seconds of speech

1

$0.00282

10 minutes of speech

10

$0.0282

1 hour of speech

60

$0.1692

12 hours of speech

720

$2.0304

A hold is placed when the request is submitted, because the amount of speech is not known until transcription completes. Without a `duration` hint the hold is the 12-hour maximum ($2.0304); supplying `duration` reserves only what the job will cost. Either way the hold is reduced to the real cost on completion, and released in full if the request fails.

## Qwen 3.0 ASR Flash Realtime

### Speech to Text (Streaming)

## 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
```

Method

Where

Use when

`?key=`

query string

Browser clients

Ocp-Apim-Subscription-Key

header

Server-side clients

Treat a key in a URL with the same care as any other credential — it can appear in proxy and browser logs. For public-facing pages, proxy the connection through your own backend rather than shipping the key to the browser.

## Speech to Text (Streaming) - Qwen 3.0 ASR Flash Realtime

## Client Code

JavaScript Python

```
const ws = new WebSocket(
  "wss://asr-stream.pixazo.ai/v1/stream?key=" + encodeURIComponent(PIXAZO_API_KEY)
);

ws.onopen = () => {
  ws.send(JSON.stringify({
    type: "session.update",
    session: {
      modalities: ["text"],
      input_audio_format: "pcm",
      sample_rate: 16000,
      turn_detection: { type: "server_vad" }
    }
  }));
};

// Send 16-bit mono PCM at 16 kHz, about 100 ms (3200 bytes) per frame.
function sendAudio(pcmChunk) {
  ws.send(JSON.stringify({
    type: "input_audio_buffer.append",
    audio: btoa(String.fromCharCode(...new Uint8Array(pcmChunk)))
  }));
}

ws.onmessage = (ev) => {
  const msg = JSON.parse(ev.data);
  if (msg.type.endsWith("transcription.text")) {
    console.log("partial:", msg.text);          // updates as they speak
  }
  if (msg.type.endsWith("transcription.completed")) {
    console.log("final:", msg.transcript, msg.language, msg.emotion);
  }
};
```

```
import base64, json, websockets, asyncio

URL = "wss://asr-stream.pixazo.ai/v1/stream?key=" + PIXAZO_API_KEY

async def transcribe(pcm_stream):
    async with websockets.connect(URL) as ws:
        await ws.send(json.dumps({
            "type": "session.update",
            "session": {
                "modalities": ["text"],
                "input_audio_format": "pcm",
                "sample_rate": 16000,
                "turn_detection": {"type": "server_vad"},
            },
        }))

        async def send():
            # 3200 bytes = 100 ms of 16-bit mono PCM at 16 kHz
            for chunk in pcm_stream:
                await ws.send(json.dumps({
                    "type": "input_audio_buffer.append",
                    "audio": base64.b64encode(chunk).decode(),
                }))
                await asyncio.sleep(0.1)
            await ws.send(json.dumps({"type": "input_audio_buffer.commit"}))

        asyncio.create_task(send())
        async for raw in ws:
            msg = json.loads(raw)
            if msg["type"].endswith("transcription.completed"):
                print(msg["transcript"], msg["language"], msg["emotion"])
```

## Final Result Event

```
{
  "type": "conversation.item.input_audio_transcription.completed",
  "item_id": "item_MaUP928DS8dtUSntYnfcK",
  "transcript": "Merry Christmas to all, and to all a good night!",
  "language": "en",
  "emotion": "happy"
}
```

## Session Protocol

After connecting, configure the session, then stream audio frames. Results arrive continuously.

### 1\. Configure the session

```
{
  "type": "session.update",
  "session": {
    "modalities": [
      "text"
    ],
    "input_audio_format": "pcm",
    "sample_rate": 16000,
    "input_audio_transcription": {
      "language": "en"
    },
    "turn_detection": {
      "type": "server_vad"
    }
  }
}
```

### 2\. Stream audio frames

```
{
  "type": "input_audio_buffer.append",
  "audio": "<base64 pcm frame>"
}
```

With `server_vad` turn detection the service segments speech for you and emits one final result per utterance. Send `{"type":"input_audio_buffer.commit"}` to flush the last utterance before closing.

## Request Parameters

Parameter

Required

Type

Default

Allowed values / range

Description

`key`

Yes

string

—

your subscription key

Query-string form of the API key. Browsers cannot set headers on a WebSocket, so the key goes in the URL. Server-side clients may instead send it as the `Ocp-Apim-Subscription-Key` or `X-Subscription-Key` header.

`language`

No

string

— (auto-detected)

ISO code, e.g. `en`, `zh`

Optional language hint for the session. Omit it and the model detects the language automatically — the detected language is returned on every final result either way.

### Audio format

-   **16-bit signed PCM, mono, 16 kHz**, little-endian, base64 encoded.
-   About **100 ms per frame** — 3200 bytes. Larger frames add latency; much smaller ones add overhead.
-   Send audio at roughly real time. Sending far faster than real time gives no benefit.

## Server Events

Event

Meaning

session.created / session.updated

Session is ready and your configuration was applied.

input\_audio\_buffer.speech\_started

Speech detected — an utterance has begun.

input\_audio\_buffer.speech\_stopped

The speaker paused; the utterance is being finalised.

conversation.item.input\_audio\_transcription.text

**Partial.** The transcript so far for the current utterance; it will be revised.

conversation.item.input\_audio\_transcription.completed

**Final.** The settled transcript for one utterance, with `language` and `emotion`.

error

Something went wrong; the message explains what.

### Partial result

```
{
  "type": "conversation.item.input_audio_transcription.text",
  "item_id": "item_MaUP928DS8dtUSntYnfcK",
  "text": "Merry Christmas to all, and"
}
```

Render partials as provisional text and replace them when the matching `completed` event arrives — partials are revised as more audio is heard.

## Session Limits

Limit

Value

What happens

Maximum session length

15 minutes

The connection closes with reason `max_session_reached`. Open a new one to continue.

Idle timeout

60 seconds

A session with no audio closes with reason `idle_timeout` and is not charged.

Concurrent sessions

Fair use

Each open session reserves funds for its maximum length until it closes.

For continuous transcription beyond 15 minutes, open a fresh connection when the previous one closes. For pre-recorded files, use the file-based models instead — they accept up to 12 hours in one request and need no streaming client.

## Connection Errors

Authentication and billing are resolved during the WebSocket handshake, so failures appear as an HTTP status on the upgrade request, before any session exists.

Status

Meaning

101

Connected — the session is live.

401

Missing or invalid subscription key.

402

Insufficient balance to reserve a session.

426

You sent a plain HTTP request; this endpoint requires a WebSocket upgrade.

503

The service is temporarily unable to verify your key or reach the speech backend.

Once connected, problems arrive as an `error` event on the socket rather than as a status code.

## Pricing

Billed at **$0.00282 per minute of audio streamed** ($0.1692 per hour), rounded up to the next whole minute. You are charged for the audio you send, measured on our side — silent air you stream still counts, so stop sending when there is nothing to transcribe.

Audio streamed

Billed minutes

Cost

30 seconds

1

$0.00282

5 minutes

5

$0.0141

15 minutes (one full session)

15

$0.0423

Opening a session reserves the cost of a full 15 minutes. The reservation is reduced to what you actually streamed when the session closes, and released entirely if no audio was sent.

## Qwen 3 TTS 0.6B

### Text to Speech

## Base URL

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

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen-3-tts-text-to-speech-0-6b&operation=qwen-3-tts-text-to-speech-0-6b-request)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the `GET /v2/requests/status/{request_id}` response. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-text-to-speech-0-6b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}
```

### Failure callback shape

```
{
  "request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-text-to-speech-0-6b",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

429

Too Many Requests

500

Internal Server Error

## Error Responses

Queue system errors and model validation errors.

### Queue System Errors

```
// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
```

```
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'qwen-3-tts-text-to-speech-0-6b' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-text-to-speech-0-6b",
  "error": "Description of the error",
  "output": null
}
```

## Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

### Endpoint

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
```

## cURL Example

```
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-text-to-speech-0-6b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-text-to-speech-0-6b_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to generated media (R2 CDN)

output.media\_type

string

MIME type of the output

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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

### Voice Design

## Base URL

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

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen-3-tts-voice-design-1-7b&operation=qwen-3-tts-voice-design-1-7b-request)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the `GET /v2/requests/status/{request_id}` response. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-voice-design-1-7b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}
```

### Failure callback shape

```
{
  "request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-voice-design-1-7b",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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

text

string

Yes

—

The spoken content to be synthesized into speech.

prompt

string

Yes

—

A style or tone description guiding the voice expression (e.g., "speak in a mysterious tone").

language

string

Yes

—

The language of the input text (e.g., "English", "Spanish").

top\_k

integer

No

50

Controls diversity by limiting sampling to the top K most likely tokens.

top\_p

float

No

1.0

Nucleus sampling threshold; lower values focus on higher-probability tokens.

temperature

float

No

0.9

Controls randomness; higher values increase creativity, lower values increase determinism.

repetition\_penalty

float

No

1.05

Penalizes repeated tokens to reduce redundancy in output.

subtalker\_dosample

boolean

No

true

Enables sampling for subtalker generation; disables greedy decoding.

subtalker\_top\_k

integer

No

50

Top-K sampling parameter for subtalker voice modeling.

subtalker\_top\_p

float

No

1.0

Nucleus sampling threshold for subtalker voice modeling.

subtalker\_temperature

float

No

0.9

Temperature for subtalker voice modeling.

max\_new\_tokens

integer

No

200

Maximum number of tokens to generate in the output sequence.

## Minimum Request

```
{
  "text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
  "prompt": "Speak in a mysterious and atmospheric tone.",
  "language": "English"
}
```

## Full Request (all options)

```
{
  "text": "The old clock tower chimed midnight as the fog rolled in from the harbor, wrapping the cobblestone streets in a blanket of grey.",
  "prompt": "Speak in a mysterious and atmospheric tone.",
  "language": "English",
  "top_k": 50,
  "top_p": 1.0,
  "temperature": 0.9,
  "repetition_penalty": 1.05,
  "subtalker_dosample": true,
  "subtalker_top_k": 50,
  "subtalker_top_p": 1.0,
  "subtalker_temperature": 0.9,
  "max_new_tokens": 200
}
```

## Response

```
{
  "request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Content-Type

application/json

Cache-Control

no-cache

Ocp-Apim-Subscription-Key

Your API subscription key

## Response Handling

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

Code

Meaning

202

Accepted — Request queued

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

429

Too Many Requests

500

Internal Server Error

## Error Responses

Queue system errors and model validation errors.

### Queue System Errors

```
// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
```

```
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'qwen-3-tts-voice-design-1-7b' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-voice-design-1-7b",
  "error": "Description of the error",
  "output": null
}
```

## Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

### Endpoint

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
```

## cURL Example

```
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-voice-design-1-7b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-voice-design-1-7b_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to generated media (R2 CDN)

output.media\_type

string

MIME type of the output

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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

### Voice Cloning

## Base URL

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

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen-3-tts-clone-voice-0-6b&operation=qwen-3-tts-clone-voice-0-6b-request)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the `GET /v2/requests/status/{request_id}` response. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-clone-voice-0-6b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}
```

### Failure callback shape

```
{
  "request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-clone-voice-0-6b",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

429

Too Many Requests

500

Internal Server Error

## Error Responses

Queue system errors and model validation errors.

### Queue System Errors

```
// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
```

```
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'qwen-3-tts-clone-voice-0-6b' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-clone-voice-0-6b",
  "error": "Description of the error",
  "output": null
}
```

## Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

### Endpoint

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
```

## cURL Example

```
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-clone-voice-0-6b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-clone-voice-0-6b_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to generated media (R2 CDN)

output.media\_type

string

MIME type of the output

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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

### Voice Cloning

## Base URL

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

HTTP Python JavaScript cURL

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

[Try Now](https://api.pixazo.ai/api-details#api=qwen-3-tts-clone-voice-1-7b&operation=qwen-3-tts-clone-voice-1-7b-request)

## Webhook (Optional)

Add the `X-Webhook-URL` header to your submit request to receive a `POST` callback when the job completes — no polling required.

**Using curl?** These are HTTP request headers — pass each with `-H`, e.g. `-H "X-Webhook-URL: https://your-server.com/webhook/callback"`. Do not paste them as bare lines, and end every line of a multi-line command with `\`.

### Webhook Headers

Header

Required

Default

Description

`X-Webhook-URL`

Yes (to enable)

—

HTTPS endpoint on your server that will receive the `POST` callback. Must respond `2xx` within a few seconds (process async if needed).

`X-Webhook-Mode`

No

`terminal`

`terminal` — fires once at the final status (`COMPLETED`/`FAILED`/`ERROR`). `sync` — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at **15s** for tighter progress updates.

### Example: enable webhook

```
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
```

### Callback Payload

Your endpoint receives a `POST application/json` with the same shape as the `GET /v2/requests/status/{request_id}` response. Example terminal callback (mode `terminal`):

```
{
  "request_id": "qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "qwen-3-tts-clone-voice-1-7b",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}
```

### Failure callback shape

```
{
  "request_id": "qwen-3-tts-clone-voice-1-7b_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "qwen-3-tts-clone-voice-1-7b",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}
```

### Delivery semantics

-   **terminal mode (default)** — exactly one `POST` when the request reaches a terminal status. No callback during `PROCESSING`.
-   **sync mode** — `POST` 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

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

429

Too Many Requests

500

Internal Server Error

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

## 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.

Field

Type

Description

request\_id

string

Unique request identifier

status

string

QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR

model\_id

string

Model that processed the request

error

string|null

Error message if failed

output.media\_url

array

URLs to generated media (R2 CDN)

output.media\_type

string

MIME type of the output

created\_at

string

When request was created

completed\_at

string|null

When request completed

polling\_url

string

Status URL (initial response only)

## Status Values

Status

Description

QUEUED

Request accepted, waiting to be processed

PROCESSING

Being processed by the model

COMPLETED

Done — output contains the result

FAILED

Failed — check error field

ERROR

System error — not charged

## Status Flow

```
QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR
```

## Typical Workflow

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.
