---
title: "Create Audio Speech Stream"
method: POST
path: "/v1/audio/speech:stream"
---

# Create Audio Speech Stream

`POST /v1/audio/speech:stream`

## Request

- Base URL: `https://api.empiriolabs.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.empiriolabs.ai/v1/audio/speech:stream`
- Auth: none declared
- TypeScript: <https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway/docs/v1/audio/speech:stream/post.ts> (a function with typed inputs; its response is checked against the schema)

Streaming TTS — same model alias and request body as
/v1/audio/speech, but the worker emits Server-Sent Events
(audio.chunk, audio.timestamps, audio.done) so customers building
voice agents can play audio chunks as they synthesize. The final
audio.done event carries the assembled Bunny URL + usage; the
gateway's _capture_sse_usage() reads the usage object from that
event and bills the customer's account exactly like sync mode.

Workers that don't expose `:stream` will 404 here — that's
correct: the catalog row's `supported_endpoints` advertises which
models speak streaming, and customer code is expected to check
capabilities before calling. Today: Inworld TTS Mini + Max, and
Qwen Audio 3.0 TTS (whose upstream is natively duplex).

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway.md) - [All operations](https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway/llms.txt) - [OpenAPI document](https://skmtc.dev/empiriolabs/apis/empiriolabs-gateway/revisions/94bb966b0560?raw)
