Skip to main content
Legacy / not recommended. Text echo is preserved for backward compatibility only. It has no STT, no built-in interruption, and you handle the LLM pipeline yourself. New integrations should use a conversation engine — OpenAI Realtime or Cartesia.

When this still makes sense

Use text echo only if you need:
  • Fully scripted, deterministic speech with no STT
  • Backend-driven LLM output where you stream sentences to the avatar yourself
  • Compatibility with existing integrations that already depend on this flow
For anything voice-to-voice, OpenAI Realtime or Cartesia is the right choice.

How it works

1

Create a session

POST /api/v1/sessions with an explicit text-echo engine config, or omit conversation_engine to inherit the avatar’s default text-echo voice. The avatar stays silent until you push text.
2

Push text

From your backend: POST /api/v1/sessions/{id}/tasks. From the frontend: avatar.task(text) on the Web SDK instance.
3

Terminate

DELETE /api/v1/sessions/{id}, or wait for user_absent_timeout.

Engine config

To override the default voice, pass an explicit text-echo engine config when creating the session:
Only elevenlabs is currently accepted as the TTS engine. tts is required when type is text-echo. The voice_id is validated against ElevenLabs at session creation — an invalid id returns HTTP 400.

Backend example

Frontend example

Related SDK methods (also legacy): task(), cancelAllTasks(), changeVoice().

Streaming LLM output

To feed an LLM stream through task(), see Streaming LLM output.

React demo

The legacy React demo shows this flow end-to-end with an Echo / GPT-4 toggle.