OpenAI-compatible text-to-speech
Drop-in for OpenAI's POST /v1/audio/speech, so OpenAI-compatible
clients (OpenClaw, etc.) can point a baseUrl at this server. Send the
API key as Authorization: Bearer <key>. OpenAI model/voice names fall
back to the configured agent defaults. Speech is ephemeral — nothing is
written to history, nothing plays on this machine.
application/json- body
input*InputText to synthesize
1 <= lengthmodel?|VCP model family. OpenAI model names (tts-1, gpt-4o-mini-tts, ...) are accepted and ignored — the configured default agent model is used instead.
voice?|Saved voice name or ID. Unknown names (e.g. OpenAI's 'alloy') fall back to the configured default agent voice.
response_format?Response FormatAudio container. mp3 (64kbps, default) or wav (PCM16).
"mp3""mp3""wav"speed?|Accepted for OpenAI compatibility; ignored.
instructions?|Accepted for OpenAI compatibility; ignored.
Audio bytes, streamed progressively while synthesis runs.
response?unknowncurl -X POST 'http://127.0.0.1:8100/v1/audio/speech' \ -H 'Content-Type: application/json' \ -d '{ "input": "Hello from an agent."}'nullSpeak text out loud in a saved voice POST
REST mirror of the `vcp_speak` MCP tool for non-MCP agents and scripts. Streams speech with the resolved voice/model. `deliver: play` plays it here (desktop UI via `GET /api/v1/events/speak` when subscribed, else the default output device) and blocks until done. `deliver: url` plays nothing on this machine and returns a progressive stream URL immediately. Speech is ephemeral — nothing is written to history.
SSE stream of agent speak events GET
Server-sent events for agent speech. The desktop UI subscribes so agent-generated audio plays inside the app; while at least one subscriber is connected, local fallback playback is suppressed.