POST /audio/speech shape. Anything that can talk
to OpenAI text-to-speech (the official SDKs, LiteLLM, Open WebUI, Dify, LibreChat, n8n) can use
Finesse voices: point its OpenAI TTS setting at the Finesse base URL and use your Finesse API key.
Like OpenAI, it returns MP3 when response_format is omitted, so tools work with their default
settings.
Base URL and authentication
Authenticate with a workspace API key (
flv_…) as a bearer token, which is
what the OpenAI SDKs send:
X-API-Key: flv_... header used by the rest of the Finesse API also works here. Dashboard
session tokens are not accepted. Speech needs a key with the tts scope, and counts against your
plan’s rate limits like any other synthesis.
Quick start
response_format, it’s MP3
(audio/mpeg).
Request body
string
required
Any value is accepted; use
finesse-v1. Values that tools hardcode, such as tts-1, are routed to
the default Finesse model rather than rejected.string
required
The text to synthesize. Maximum 10,000 characters.
string
required
A voice alias (for example
charlizie) or a voice id. See Choosing a voice.string
Finesse extension, not part of the OpenAI API. A language code such as
en or hi. Defaults to the
voice’s primary language; set it for voices that speak several languages. With the Python SDK, pass
it through extra_body={"language": "hi"}.number
Accepted for compatibility and ignored.
string
Accepted for compatibility and ignored.
Formats
On a deployment without an MP3 encoder available,
mp3 (including the omitted default) returns
400 unsupported_response_format with a message asking for wav or pcm. Pass one of those
explicitly if you see it.Streaming
When your plan includes streaming, every supported format (mp3, wav and pcm) is sent as it’s
generated, so you can start playback before the whole clip is ready. Without streaming on your plan,
the request still succeeds: the whole clip is synthesized first and returned in one response. Use
pcm for real-time playback: it has no header and every chunk is playable samples.
Choosing a voice
voice takes either:
- An alias: a short, stable name for a public Finesse voice, such as
charlizie. Aliases are lowercase letters, digits and hyphens. - A voice id: the
idof any voice your workspace can use, including your own cloned voices.
404.
To see what’s available, call List voices. It returns your workspace’s
voices first, then the public platform voices, which carry an alias field. The list is paginated
with page and page_size:
OpenAI voice names such as
alloy or nova are not Finesse voices. Replace them with a Finesse
alias or voice id in any copied configuration.Errors
Errors use OpenAI’s shape, so OpenAI clients surfaceerror.message as-is:
The
message text above is illustrative; branch on status and code, not on the message.
Use with tools
Every tool below needs the same four values:
Field names differ between tools and versions, so match them by meaning. The default response
format (
mp3) works, so you can leave a tool’s format setting as it is.
Open WebUI
Open WebUI
In Open WebUI’s admin audio settings, set the text-to-speech engine to OpenAI, then fill in the
OpenAI API base URL, API key, TTS model and TTS voice with the values in the table above.
LiteLLM
LiteLLM
Add Finesse to your proxy config as an Then call the proxy’s
openai/ model with api_base set to the Finesse base URL:config.yaml
/audio/speech endpoint with model: "finesse-tts" and a Finesse voice.Dify
Dify
Add a model provider that speaks the OpenAI API with a custom endpoint (for example the
OpenAI-API-compatible provider), and add a text-to-speech model to it: model name
finesse-v1,
the Finesse base URL as the endpoint, your API key, and a Finesse alias as the voice. Then select
that model as the workspace’s or app’s text-to-speech model.LibreChat
LibreChat
Configure the OpenAI text-to-speech provider in the Check LibreChat’s speech documentation for your version to confirm whether
speech section of librechat.yaml:librechat.yaml
url expects the base
URL or the full /audio/speech endpoint.n8n
n8n
Create an OpenAI credential with your Finesse API key and set its base URL to the Finesse base URL.
In the OpenAI node, use the audio “generate” operation with model
finesse-v1 and a Finesse voice.
