Give your agent a face.

Casola is a real-time avatar API for AI agents: they hear the user, take their turn, and answer out loud with a face on screen.

Use the stock cast, or design your own face and voice. Yours goes live in minutes, with no training run. See the avatars

<script src="https://www.casola.ai/embed.js" type="module"></script>

<avatar-embed
  data-key="pk_live_your_publishable_key"
  data-avatar="mei"
></avatar-embed>
Start a live call Read the quickstart

30 min free · no card

That is the entire integration. The demo call runs on the same API.

The whole contract

How a session works

Mint, connect, talk, release. Your server holds the API key; your app holds nothing but a short-lived session token.

  1. Your server asks for a seat

    One POST with your secret key. Pick a stock persona or one of your own avatars, and say which wire protocol your client speaks.

    curl -X POST https://api.casola.ai/api/v1/sessions \
      -H "Authorization: Bearer $CASOLA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"persona":"mei","protocol_versions":[2]}'
  2. Your app opens one socket

    Hand your client the connect URL and the session token. One WebSocket carries control messages, microphone audio, and the avatar's video and speech.

    import { AvatarSession, connectViaToken } from '@casola/avatar-client'
    
    // Your server mints; your app only needs connect_url + session_token.
    const { connect_url, session_token } = await startSession()
    
    const session = new AvatarSession({
      videoEl: document.querySelector('video#avatar'),
      connect: connectViaToken({ connectUrl: connect_url, sessionToken: session_token }),
      workletUrl: '/mic-worklet.js',
      callbacks: {
        onFirstFrame: () => hideSpinner(),
        onTurn: (t) => console.log(t.text),
      },
    })
    
    await AvatarSession.ensureMicPermission()
    await session.start()
  3. Turns arrive as they are spoken

    Partials while the user is still talking, committed turns when they stop. Your agent writes the answer; the avatar speaks it, lip-synced.

    {
      "status": "ready",
      "session_id": "019...",
      "connect_url": "https://box-1.casola.ai",
      "session_token": "eyJhbGciOiJFZERTQ...",
      "seat_token": "...",
      "expires_at": 1719000060,
      "cap_seconds": 300
    }
  4. Give the seat back

    Release when the call ends. Skip it and the seat stays yours until the heartbeat expires: nobody else can use it, and you are still on the clock.

    curl -X POST https://api.casola.ai/api/v1/sessions/$SESSION_ID/release \
      -H "Authorization: Bearer $CASOLA_API_KEY"

What is Casola?

Real-time avatars as an API.

Support, coaching, sales, companions — a spoken agent has to hear, take its turn, and stay in character in real time. Casola handles that media stack: capture, turn-taking, lip sync, and streaming, behind one session API.

You bring the agent. Design an avatar of your own, or start with the stock cast and swap later.

Meet the avatars

Plans

Start free. Metered when you grow.

Compare plans

Every account starts free: 30 conversation minutes a month and the full stock cast, no card.

Scale

$399/month

1,500 minutes included, then $0.20/min

10 concurrent sessions

Ready when you are

First session in minutes.

Or start in the docs