POST
Speak

Authorizations

X-API-Key
string
header
required

Organization API key (bibha_...). Takes precedence over the session credential, and is refused outright on user-session-only and super-admin routes.

Body

application/json

Body for POST /speak — non-MCP REST surface that mirrors peachdesk.speak (legacy alias: voicebox.speak).

text
string
required
Required string length: 1 - 10000
profile
string | null

Voice profile name or id. Falls back to per-client binding, then default.

engine
string | null
Pattern: ^(vaani|vaani-english|vaani-multilingual|vaani-indic|vaani-bharat)$
personality
boolean | null

When true and the profile has a personality prompt, the input text is rewritten in-character before TTS. When null, the per-client binding's default_personality flag decides.

language
string | null
Pattern: ^(zh|en|ja|ko|de|fr|ru|pt|es|it|he|ar|da|el|fi|hi|ms|nl|no|pl|sv|sw|tr|bg|ca|cs|cy|eu|fa|hu|id|is|ka|kk|ku|lb|lv|ml|ne|ro|sk|sl|sq|sr|te|uk|ur|vi|ta|kn|bn|gu|mr|pa|or|as|sa|kok|mai|mni|brx|doi|sat|sd|hne)$

Response

Successful Response

Response model for voice generation.

id
string
required
profile_id
string
required
text
string
required
language
string
required
created_at
string<date-time>
required
audio_path
string | null
duration
number | null
seed
integer | null
instruct
string | null
engine
string | null
default:vaani
model_size
string | null
status
string
default:completed
error
string | null
is_favorited
boolean
default:false
source
string
default:manual
versions
GenerationVersionResponse · object[] | null
active_version_id
string | null
usage
UsageInfo · object | null

Per-request resource usage the engine reports back to the API proxy.

The proxy meters/bills off these fields; each one maps to a rate-registry unit (TTS per character, STT per audio-second, LLM per token). Only the dimensions relevant to the request are populated — the rest stay None.