> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.empiriolabs.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.empiriolabs.ai/_mcp/server.

# Qwen Audio 3.0 ASR Stream

> Live transcription over a socket, streaming partial words while the speaker talks and a settled sentence at each pause, priced per hour of audio.

![Qwen Audio 3.0 ASR Stream](https://media.empiriolabs.ai/model-logos/qwen.png)

[Alibaba Cloud](/providers/alibaba) · Transcription

`WEBSOCKET /v1/realtime`

Live transcription over a socket, streaming partial words while the speaker talks and a settled sentence at each pause, priced per hour of audio.

## At a glance

| Field               | Value                                                                |
| ------------------- | -------------------------------------------------------------------- |
| Model id            | `qwen-audio-3-0-asr-stream`                                          |
| Model release date  | 2026-07-30                                                           |
| Input modalities    | Audio                                                                |
| Output modalities   | Text                                                                 |
| Context window      | -                                                                    |
| Weight precision    | -                                                                    |
| Region              | Singapore                                                            |
| Features            | transcription, speech_to_text, realtime, streaming_asr, multilingual |
| Native inference    | No                                                                   |
| New                 | Yes                                                                  |
| Supported endpoints | `WEBSOCKET /v1/realtime`                                             |
| Alternate model ids | `qwen-audio-3.0-asr-stream`, `alibaba/qwen-audio-3-0-asr-stream`     |

## Pricing

| Charge        | Spec              | Rate    |
| ------------- | ----------------- | ------- |
| Transcription | per hour of audio | \$0.648 |

## Example request

```python
import asyncio, json, os, websockets

URL = "wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-asr-stream"

async def main():
    async with websockets.connect(
        URL,
        additional_headers=[("Authorization", f"Bearer {os.environ['EMPIRIOLABS_API_KEY']}")],
        max_size=None,
    ) as ws:
        print(json.loads(await ws.recv())["type"])  # session.created
        await ws.send(json.dumps({
            "type": "conversation.item.create",
            "item": {"type": "message", "role": "user",
                     "content": [{"type": "input_text", "text": "Say hello."}]},
        }))
        await ws.send(json.dumps({"type": "response.create"}))
        async for raw in ws:
            event = json.loads(raw)
            if event["type"] == "response.done":
                break

asyncio.run(main())
```

## Parameters

| Parameter             | Type    | Required | Default       | Description                                                                                                                                                                                                                                                                                                                                                                                    |
| --------------------- | ------- | -------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `input_audio_format`  | enum    | no       | `"pcm16"`     | Encoding of the audio you append to the input buffer: base64 16-bit PCM, mono, at 16 kHz. · Allowed: `pcm16`                                                                                                                                                                                                                                                                                   |
| `language`            | enum    | no       | `"auto"`      | Language of the speech, or auto to detect it from the audio. Set it with the language query parameter of the connection URL, or as input_audio_transcription.language in session.update. · Allowed: `auto`, `zh`, `en`, `ja`, `ko`, `vi`, `th`, `id`, `ms`, `tl`, `hi`, `ar`, `fr`, `de`, `es`, `pt`, `ru`, `it`, `nl`, `sv`, `da`, `fi`, `no`, `el`, `pl`, `cs`, `hu`, `ro`, `bg`, `hr`, `sk` |
| `prompt`              | string  | no       | -             | Text that guides recognition, up to 400 characters: the names and terms the speaker uses, or the text spoken just before this audio. Write the words exactly as they should appear in the transcript. Also accepted as input_audio_transcription.prompt.                                                                                                                                       |
| `silence_duration_ms` | integer | no       | `800`         | The pause, in milliseconds, that ends a sentence, from 200 to 6000. A shorter pause settles each sentence sooner; a longer one keeps a pause inside a sentence. Also accepted as turn_detection.silence_duration_ms. · Range: 200 – 6000                                                                                                                                                       |
| `threshold`           | number  | no       | -             | How clear speech must be before it is transcribed, from 0.0 to 1.0. A higher value ignores more background noise and can miss quiet speech. When omitted, the model's own default applies. Also accepted as turn_detection.threshold. · Range: 0 – 1                                                                                                                                           |
| `noise_reduction`     | enum    | no       | `"far_field"` | The microphone the speech detection is tuned for: near_field for a headset or a phone held close, far_field for a laptop or room microphone. Also accepted as input_audio_noise_reduction.type. · Allowed: `far_field`, `near_field`                                                                                                                                                           |
| `keep_dialect`        | boolean | no       | false         | Keeps Chinese dialect words as spoken. When off, dialect speech is written as standard Mandarin.                                                                                                                                                                                                                                                                                               |

## Notes

**Connecting**

Live transcription over a WebSocket at `wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-asr-stream`, authenticated with the ordinary Authorization Bearer header.

**Sending audio**

Stream 16 kHz mono pcm16 audio with `input_audio_buffer.append`. Voice activity detection decides where each sentence ends, so there is no commit to send.

**Session settings**

Send `session.update` right after `session.created`, before the first audio, with any of these settings: `input_audio_transcription.language` (or the `language` query parameter of the connection URL; `auto` by default), `input_audio_transcription.prompt` with the names and terms the speaker uses (up to 400 characters), `turn_detection.silence_duration_ms` (200 to 6000, default 800) and `turn_detection.threshold` (0.0 to 1.0), and `input_audio_noise_reduction` (`near_field` or `far_field`). `keep_dialect` keeps Chinese dialect words as spoken. A setting changed while audio is streaming ends the sentence in progress and applies to the audio sent after it.

**What comes back**

`conversation.item.input_audio_transcription.delta` events carry the sentence so far while the speaker is still talking, and `conversation.item.input_audio_transcription.completed` carries the settled sentence at each pause.

**Billing**

Billed per second of the audio you stream, silence included, at the hourly rate shown. The session is billed when it ends.

---

*Machine-readable schema:* `GET https://api.empiriolabs.ai/v1/models/qwen-audio-3-0-asr-stream`.