API
API overview
Create speech
HTTP delivery
WebSocket streaming
Errors and limits

Create speech

Send JSON to POST https://api.teenage.works/v1/audio/speech.

json

{
  "model": "teen-v1",
  "input": "Build a clear spoken response.",
  "language": "en",
  "response_format": "mp3",
  "stream": false
}

Input and voice fields

FieldDefaultAccepted value
inputRequiredPlain text from 1 to 4096 characters
modelteen-v1teen-v1
languagehiA supported language code or regional form
voicedefaultdefault or a public or saved voice_... ID
transliteratefalsetrue converts Romanized Hindi words to Devanagari before synthesis

Inline performance tags such as [happy], [pause], and [whisper] are rejected with unsupported_tags.

Choose one voice path

Use voice for a saved or public voice, or send both reference fields for a one-request zero-shot clone:

PathFields
Voice IDvoice
Clonereference_audio (base64, up to 6 MB) and reference_audio_format (wav, mp3, flac, or ogg)

Voice ID

json

{
  "input": "Welcome to the show.",
  "language": "en",
  "voice": "default",
  "response_format": "mp3",
  "stream": false
}

Reference clone

json

{
  "input": "Use the supplied speaker identity.",
  "language": "en",
  "reference_audio": "<BASE64_REFERENCE_AUDIO>",
  "reference_audio_format": "wav",
  "response_format": "mp3",
  "stream": false
}

Reference fields must be supplied together. Combining a saved voice ID and reference audio, or sending voice descriptions or reference transcripts, returns HTTP 422.

Delivery fields

FieldDefaultAccepted value
response_formatpcmpcm, mp3, or wav
output_sample_rateModel sample rateInteger from 8000 through 48000
streamtruetrue or false
stream_formataudioaudio or sse when streaming

WAV is buffered. If stream is omitted, requesting WAV selects buffered delivery; explicitly combining WAV with stream: true returns 422.

Generation fields

FieldDefaultAccepted value
qualityfastfast or expressive
cfg_value2.0Number from 1.0 through 3.0
temperature1.0Number greater than 0 through 2.0
max_generate_length2000Integer from 32 through 4096
loranullRegistered server-side LoRA name, up to 128 characters

When quality is expressive, omitted temperature and cfg_value fields use the expressive profile. Explicit values take precedence. The server controls the seed; requests that set it return 422. Unknown fields return 422.

Choose an HTTP response mode