Docs
SSE contract
Production traffic uses a client_* developer JWT. Mint one from API keys after sign-in. The visemetts.com playground is origin-limited, capped at 280 characters, and does not bill credits.
getVoices
List standard VisemeTTS / xAI voices. On visemetts.com this catalog does not require auth.
GET https://us-central1-streamoji-265f4.cloudfunctions.net/getVoices?ttsEngineId=xai
previewPresetVoice
Short MP3 clip only — no visemes or word timings. Use Speak (avatar_ttsWithPoses) for the full payload.
POST https://us-central1-streamoji-265f4.cloudfunctions.net/previewPresetVoice
{ "voiceId": "eve", "ttsEngineId": "visemetts" }avatar_ttsWithPoses
Live TTS with Oculus visemes and word clocks on each audio event.
curl -N https://ai.aitwin.me/avatar_ttsWithPoses \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer client_<jwt>' \
-d '{
"user_query": "Hello from VisemeTTS.",
"ttsEngineId": "visemetts",
"voice_id": "eve",
"speakingRate": 1
}'SSE events
- metadata —
text,spoken_text, empty gestures. - audio — base64 PCM (16 kHz mono), chunk-relative
visemesandwords, plusaudio_offset_ms. - done / error
Viseme object
{ "symbol": "aa", "start": 0.12, "duration": 0.08 }sil · PP · FF · TH · DD · kk · CH · SS · nn · RR · aa · E · I · O · U
Word object
{ "word": "Hello", "start": 0.02, "duration": 0.34, "phones": ["h","ə","ˈloʊ"], "oov": false }Questions: hello@visemetts.com