# Choose your integration

URL: https://www.atmee.ai/docs/v2/api/choose-integration

> Three modes: Atmee runs the whole conversation (Behavior-driven Full-stack), renders a face for your own voice agent (Avatar mode), or talks with no video (Behavior-Driven Voice Mode).

Every Atmee conversation runs in one of three modes. Choose the mode by what you already run.

All three use the same API key, the same avatars and the same credits. They differ in **who runs
the conversation** and **whether there is video**.

The [model](/docs/v2/getting-started/models) belongs to the avatar, not the mode: an Atmee V2 avatar
always renders on V2 and an Atmee V1 avatar on V1, so there is nothing to set on the request. To
offer both, keep one avatar of each.

## Three modes

* **Behavior-driven Full-stack.** Atmee runs the whole conversation: behavior (powered by Causeur,
  our behavior model), the language model, speech recognition, the voice and the face. Your page
  joins the room.
* **Avatar mode.** You bring your own voice agent, with its own speech recognition, language model
  and voice. Atmee renders only the face, in sync with your agent's audio.
* **Behavior-Driven Voice Mode.** Atmee runs the conversation (behavior, language model and speech
  recognition) in the avatar's voice, with no video. Your client streams audio over a WebSocket.

## Side by side

|                  | Behavior-driven Full-stack                                                                      | Avatar mode                                                                                               | Behavior-Driven Voice Mode                                                                               |
| ---------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| You run          | A page and one server endpoint                                                                  | Your voice agent on LiveKit Agents, or your own client of the API                                         | A client that streams audio, and one server endpoint                                                     |
| What you build   | A server endpoint that starts the session, and a page that joins the room with `livekit-client` | Add the plugin to your agent. It starts the render and streams your agent's audio to the avatar           | A server endpoint that starts the session, and a client that connects to the WebSocket within 60 seconds |
| Media            | Video and audio in Atmee's LiveKit room                                                         | Video and audio in your LiveKit room, or a room Atmee hosts                                               | Audio only, over a WebSocket                                                                             |
| The avatar needs | A portrait, a voice and a persona, finished building                                            | A portrait for Atmee V1, or a finished Atmee V2 avatar. No voice or persona needed                        | A voice. It uses the avatar's persona and always its voice                                               |
| While it runs    | State, events, app tools, files, agendas, visitor memory                                        | Whatever your agent does. Atmee has no say in what is said                                                | Settings your server pins: instructions, persona, facts, agenda                                          |
| Start            | `POST /v1/sessions`                                                                             | The [LiveKit Agents plugin](/docs/v2/livekit-plugin/livekit-agents-plugin), or `POST /v1/avatar_sessions` | `POST /v1/speech_sessions`                                                                               |
| Read and end     | `GET /v1/sessions/{id}`, `POST /v1/sessions/{id}/end`                                           | `GET /v1/avatar_sessions/{id}`, `POST /v1/avatar_sessions/{id}/end`                                       | `GET /v1/speech_sessions/{id}`, `POST /v1/speech_sessions/{id}/end`                                      |

Every start is called from your server with the `X-Api-Key` header. Every end call is idempotent:
ending a session that already ended answers `alreadyEnded: true`, so you can call it from every
teardown path.

## What each costs

| Option | Model | Start with | Credits | Plans |
| --- | --- | --- | --- | --- |
| Behavior-driven Full-stack | Atmee V2 | [`POST /v1/sessions`](/docs/v2/api/reference/session/createSession) | 2 credits per minute | Growth and up, by invite |
| Behavior-driven Full-stack | Atmee V1 | [`POST /v1/sessions`](/docs/v2/api/reference/session/createSession) | 1 credit per minute | Starter and up |
| Avatar mode | Atmee V2 | [LiveKit Agents plugin](/docs/v2/livekit-plugin/livekit-agents-plugin) | 1 credit per minute | Growth and up, by invite |
| Avatar mode | Atmee V1 | [LiveKit Agents plugin](/docs/v2/livekit-plugin/livekit-agents-plugin) | 0.5 credits per minute | Starter and up |

Behavior-Driven Voice Mode costs 1 credit per minute on any model, on Starter and up. See
[Costs](/docs/v2/api/overview#costs) for what a credit costs.

**Or have an AI agent build it.** Claude Code, Codex, Cursor or Claude can make the avatar and
write any of these integrations for you, on the same API key and credits.

- [Build with AI agents](/docs/v2/agents): The plugin, skills and MCP server: make an avatar and an app around it by chatting.

## Pick Behavior-driven Full-stack when

* you want a talking avatar on your site or in your app **without running any AI yourself**,
* the avatar's persona, knowledge and voice are set once, in Studio or through the API, and Atmee
  runs them,
* your app should work with the avatar while it talks: send it state and events, let it call your
  app tools, show it files, or give it an agenda,
* your client only needs to **join a room** and show video: a web page, iOS, Android or Unity.

Start with the [Quickstart](/docs/v2/api/quickstart). For what your app can do while the
session runs, see
[What your app can do in the room](/docs/v2/api/overview#what-your-app-can-do-in-the-room).

## Pick Avatar mode when

* you **already run a voice agent**, with your own speech recognition, language model and voice,
  and want to give it a face,
* the conversation must stay in your infrastructure: your prompts, your tools, your logs,
* you need a video avatar for something that is not a chat: a narrator, a presenter, an agent
  that reads from your own systems.

Avatar mode costs half of Behavior-driven Full-stack, since Atmee only renders. Billing starts when
the avatar sees your agent in the room and stops when your agent leaves, the room closes, or you
end the session.

| Your agent runs on      | Use                                                                                                                                                                        |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| LiveKit Agents (Python) | The [LiveKit Agents plugin](/docs/v2/livekit-plugin/livekit-agents-plugin), `livekit-plugins-atmee`. The avatar joins your LiveKit room.                                   |
| Something else          | Call `POST /v1/avatar_sessions` yourself; the plugin is a thin client over it. Without a LiveKit project of your own, leave out the room details and Atmee hosts the room. |

## Pick Behavior-Driven Voice Mode when

* you want Atmee's conversation and voice, but **no video**: a phone line, a smart speaker, an
  audio-only app, a game character off screen,
* you want the same persona your video avatar has, in places where video doesn't fit,
* your client can hold a WebSocket open and stream audio both ways.

Your server calls `POST /v1/speech_sessions` with an `avatarId`. The answer carries a WebSocket
`url` and a short-lived `token`; your client must connect within 60 seconds. The first connection
holds the session, so a client that loses its connection starts a new session. An avatar with no
voice answers `422 avatar_has_no_voice`. The full request is in the
[API reference](/docs/v2/api/reference/speech-sessions/createSpeechSession).

## Using several together

The modes share everything except who runs the conversation.

* **One key serves all three.** A key with the `sessions` scope can start every mode, and its spend
  cap and concurrency limit apply to every mode.
* **One avatar works in every mode.** An avatar built for Behavior-driven Full-stack renders just
  as well in Avatar mode and speaks in Behavior-Driven Voice Mode. A portrait-only Atmee V1 avatar
  made for Avatar mode becomes a Behavior-driven Full-stack avatar once you add a voice with
  `PUT /v1/avatars/{avatarId}/voice`.
* **One live video conversation per avatar.** A second video start on a busy avatar answers
  `409 avatar_busy`; see [Troubleshooting](/docs/v2/api/troubleshooting).
* **The mode is chosen per session.** Your app can offer video on the web and
  Behavior-Driven Voice Mode on the phone with the same avatar, at each mode's rate.

- [Quickstart](/docs/v2/api/quickstart): Behavior-driven Full-stack, from a key to a live avatar on your page.
- [LiveKit Agents plugin](/docs/v2/livekit-plugin/livekit-agents-plugin): Give your LiveKit agent a face.
- [API keys](/docs/v2/api/api-keys): One key serves every mode. Scope it and cap it.
