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

# StepAudio 2.5 Realtime

> Speech in, speech out, over one socket, with paralinguistic understanding of tone and pacing.

![StepAudio 2.5 Realtime](https://media.empiriolabs.ai/model-logos/stepaudio-2-5-realtime.png)

[StepFun](/providers/stepfun) · Audio Generation

`WEBSOCKET /v1/realtime`

Speech in, speech out, over one socket, with paralinguistic understanding of tone and pacing.

## At a glance

| Field               | Value                                                          |
| ------------------- | -------------------------------------------------------------- |
| Model id            | `stepaudio-2-5-realtime`                                       |
| Model release date  | 2026-07-16                                                     |
| Input modalities    | Audio, Text                                                    |
| Output modalities   | Audio, Text                                                    |
| Context window      | 256K                                                           |
| Weight precision    | -                                                              |
| Max output tokens   | 131,072                                                        |
| Region              | International                                                  |
| Features            | realtime, speech_to_speech, audio_in, audio_out, voice_control |
| Native inference    | No                                                             |
| New                 | Yes                                                            |
| Supported endpoints | `WEBSOCKET /v1/realtime`                                       |
| Alternate model ids | `stepaudio-2.5-realtime`, `stepfun/stepaudio-2-5-realtime`     |

## Pricing

| Charge              | Spec                       | Rate    |
| ------------------- | -------------------------- | ------- |
| Input               | per 1M prompt tokens       | \$1.50  |
| Output              | per 1M generated tokens    | \$10.00 |
| Implicit cache read | per 1M cached input tokens | \$0.30  |

## Example request

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

URL = "wss://api.empiriolabs.ai/v1/realtime?model=stepaudio-2-5-realtime"

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                                                                                                                                                                                                                                                                                                         |
| --------------------- | ------ | -------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `voice`               | enum   | no       | `"soft-spoken-gentleman"`          | Session voice, set with session.update before the model produces audio. It cannot be changed once the model has spoken, and any other value is rejected. · Allowed: `soft-spoken-gentleman`, `magnetic-voiced-male`, `vibrant-youth`, `lively-girl`, `livelybreezy-female`, `elegantgentle-female`, `zixinnansheng` |
| `instructions`        | string | no       | -                                  | System instructions for the session: persona, speaking style, and boundaries.                                                                                                                                                                                                                                       |
| `modalities`          | string | no       | `["text", "audio"]`                | Response modalities for the session.                                                                                                                                                                                                                                                                                |
| `volume_ratio`        | number | no       | `1`                                | Loudness of the spoken reply, relative to the default. Accepted range is 0.1 to 2.0. · Range: 0.1 – 2.0                                                                                                                                                                                                             |
| `input_audio_format`  | enum   | no       | `"pcm16"`                          | Encoding of the audio you send. 16-bit PCM. · Allowed: `pcm16`                                                                                                                                                                                                                                                      |
| `output_audio_format` | enum   | no       | `"pcm16"`                          | Encoding of the audio the model returns. 16-bit PCM. · Allowed: `pcm16`                                                                                                                                                                                                                                             |
| `turn_detection`      | string | no       | `&#123;"type": "server_vad"&#125;` | Server-side voice activity detection. Decides when you have stopped speaking and the model should reply. Without it the model listens but never answers, so leave it on unless you are driving turns yourself with input_audio_buffer.commit and response.create.                                                   |

## Notes

Full-duplex voice over a WebSocket at wss\://api.empiriolabs.ai/v1/realtime?model=stepaudio-2-5-realtime, authenticated with the ordinary Authorization Bearer header. Audio is pcm16 in and out. The model listens while it speaks, so it can be interrupted mid-reply, and server-side voice activity detection decides when to answer. Set voice with session.update before the first audio; it cannot be changed once the model has spoken, and only the seven listed voices are accepted. Conversation is Chinese and English only. Each completed turn is billed on its own from the usage the model reports.

---

*Machine-readable schema:* `GET https://api.empiriolabs.ai/v1/models/stepaudio-2-5-realtime`.