Your
agent has a voice.Now give it a face.
Add a face to your ElevenLabs agent with Anam's real-time avatars. Connect your agent on the server and stream synchronized audio and video through the Anam SDK, with ElevenLabs v3 expression cues brought to life by Cara 4.
See it for yourself
Start a voice conversation, then flip the switch and watch how the avatar stays in sync without restarting the session or rebuilding your ElevenLabs agent.
KEEP EXPLORING
Build more with Anam + ElevenLabs
ELEVENLABS AGENTS · SERVER-SIDE
From voice agent to video agent in a few lines.
Server-side integration reference. Use Coding Agents to adapt these snippets to your app or create a project.
// Server: keep both API keys private
// Prerequisite: set the ElevenLabs agent's input audio format to PCM 16000 Hz.
// agentId and avatarId must be validated by your /api/anam-session route.
const signedUrlResponse = await fetch(
`https://api.elevenlabs.io/v1/convai/conversation/get-signed-url?agent_id=${encodeURIComponent(agentId)}`,
{ headers: { "xi-api-key": process.env.ELEVENLABS_API_KEY } },
);
if (!signedUrlResponse.ok) throw new Error("Could not authorize ElevenLabs agent");
const { signed_url: signedUrl } = await signedUrlResponse.json();
const response = await fetch("https://api.anam.ai/v1/auth/session-token", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ANAM_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
personaConfig: {
avatarId,
avatarModel: "cara-4",
directorNotes: { presetStyle: "warm", expressivity: 0.5 },
},
environment: {
elevenLabsAgentSettings: {
signedUrl,
agentId,
},
},
}),
});
if (!response.ok) throw new Error("Could not create Anam session");
const { sessionToken } = await response.json();
// Return { sessionToken } from your /api/anam-session route.
Add a face to your ElevenLabs agent.
Keep your current speech, language model, and voice stack. Add a synchronized avatar in a few lines.