# Create a new Equos Brain. Source: https://docs.equos.ai/api-reference/brain/create-a-new-equos-brain https://api.equos.ai/docs/v3-json post /v3/brains # Delete an Equos Brain. This action is irreversible. Source: https://docs.equos.ai/api-reference/brain/delete-an-equos-brain-this-action-is-irreversible https://api.equos.ai/docs/v3-json delete /v3/brains/{id} # Get Equos Brain by ID. Source: https://docs.equos.ai/api-reference/brain/get-equos-brain-by-id https://api.equos.ai/docs/v3-json get /v3/brains/{id} # List Equos Brains. Source: https://docs.equos.ai/api-reference/brain/list-equos-brains https://api.equos.ai/docs/v3-json get /v3/brains # Update an Equos Brain. Source: https://docs.equos.ai/api-reference/brain/update-an-equos-brain https://api.equos.ai/docs/v3-json patch /v3/brains/{id} # Create a new Equos Character. Source: https://docs.equos.ai/api-reference/character/create-a-new-equos-character https://api.equos.ai/docs/v3-json post /v3/characters # Delete an Equos Character. This action is irreversible. Source: https://docs.equos.ai/api-reference/character/delete-an-equos-character-this-action-is-irreversible https://api.equos.ai/docs/v3-json delete /v3/characters/{id} # Get Equos Character by ID. Source: https://docs.equos.ai/api-reference/character/get-equos-character-by-id https://api.equos.ai/docs/v3-json get /v3/characters/{id} # List Equos Characters. Source: https://docs.equos.ai/api-reference/character/list-equos-characters https://api.equos.ai/docs/v3-json get /v3/characters # Update character properties. Source: https://docs.equos.ai/api-reference/character/update-character-properties https://api.equos.ai/docs/v3-json put /v3/characters/{id} # Get Equos conversation by id. Source: https://docs.equos.ai/api-reference/conversation/get-equos-conversation-by-id https://api.equos.ai/docs/v3-json get /v3/conversations/{id} # List Equos conversations. Source: https://docs.equos.ai/api-reference/conversation/list-equos-conversations https://api.equos.ai/docs/v3-json get /v3/conversations # Start an Equos avatar sesssion. Source: https://docs.equos.ai/api-reference/conversation/start-an-equos-avatar-sesssion https://api.equos.ai/docs/v3-json post /v3/conversations # Stop a conversation. Returns null if already stopped or conversation was not found. Source: https://docs.equos.ai/api-reference/conversation/stop-a-conversation-returns-null-if-already-stopped-or-conversation-was-not-found https://api.equos.ai/docs/v3-json post /v3/conversations/{id}/stop # Create a new Equos Face. Source: https://docs.equos.ai/api-reference/face/create-a-new-equos-face https://api.equos.ai/docs/v3-json post /v3/faces # Delete an Equos Face. This action is irreversible. Source: https://docs.equos.ai/api-reference/face/delete-an-equos-face-this-action-is-irreversible https://api.equos.ai/docs/v3-json delete /v3/faces/{id} # Get Equos Face by ID. Source: https://docs.equos.ai/api-reference/face/get-equos-face-by-id https://api.equos.ai/docs/v3-json get /v3/faces/{id} # List Equos Faces. Source: https://docs.equos.ai/api-reference/face/list-equos-faces https://api.equos.ai/docs/v3-json get /v3/faces # Health check endpoint Source: https://docs.equos.ai/api-reference/health/health-check-endpoint https://api.equos.ai/docs/v3-json get /v3/health # Add a document to a Knowledge Base. Source: https://docs.equos.ai/api-reference/knowledgebase/add-a-document-to-a-knowledge-base https://api.equos.ai/docs/v3-json post /v3/knowledge-bases/{id}/documents # Create a new Knowledge Base. Source: https://docs.equos.ai/api-reference/knowledgebase/create-a-new-knowledge-base https://api.equos.ai/docs/v3-json post /v3/knowledge-bases # Delete a document from a Knowledge Base. Source: https://docs.equos.ai/api-reference/knowledgebase/delete-a-document-from-a-knowledge-base https://api.equos.ai/docs/v3-json delete /v3/knowledge-bases/{id}/documents/{doc} # Delete a Knowledge Base. This action is irreversible. Source: https://docs.equos.ai/api-reference/knowledgebase/delete-a-knowledge-base-this-action-is-irreversible https://api.equos.ai/docs/v3-json delete /v3/knowledge-bases/{id} # Get Knowledge Base by ID. Source: https://docs.equos.ai/api-reference/knowledgebase/get-knowledge-base-by-id https://api.equos.ai/docs/v3-json get /v3/knowledge-bases/{id} # Index a document in a Knowledge Base. Source: https://docs.equos.ai/api-reference/knowledgebase/index-a-document-in-a-knowledge-base https://api.equos.ai/docs/v3-json patch /v3/knowledge-bases/{id}/documents/{doc}/index # List Knowledge Bases. Source: https://docs.equos.ai/api-reference/knowledgebase/list-knowledge-bases https://api.equos.ai/docs/v3-json get /v3/knowledge-bases # Get organization freemium usage. Source: https://docs.equos.ai/api-reference/organization/get-organization-freemium-usage https://api.equos.ai/docs/v3-json get /v3/organizations/freemium-usage # Get per-user billing cycle usage. Source: https://docs.equos.ai/api-reference/organization/get-per-user-billing-cycle-usage https://api.equos.ai/docs/v3-json get /v3/organizations/user-usage # Generate a client token for a specific character. Source: https://docs.equos.ai/api-reference/tokens/generate-a-client-token-for-a-specific-character https://api.equos.ai/docs/v3-json post /v3/tokens # Create a new Equos Voice. Source: https://docs.equos.ai/api-reference/voice/create-a-new-equos-voice https://api.equos.ai/docs/v3-json post /v3/voices # Delete an Equos Voice. This action is irreversible. Source: https://docs.equos.ai/api-reference/voice/delete-an-equos-voice-this-action-is-irreversible https://api.equos.ai/docs/v3-json delete /v3/voices/{id} # Get Equos Voice by ID. Source: https://docs.equos.ai/api-reference/voice/get-equos-voice-by-id https://api.equos.ai/docs/v3-json get /v3/voices/{id} # List Equos Voices. Source: https://docs.equos.ai/api-reference/voice/list-equos-voices https://api.equos.ai/docs/v3-json get /v3/voices # Update an Equos Voice. Source: https://docs.equos.ai/api-reference/voice/update-an-equos-voice https://api.equos.ai/docs/v3-json patch /v3/voices/{id} # Introduction Source: https://docs.equos.ai/index This is the right place to start. On this page, you will learn about **characters** and the key concepts of running interactive AI experiences with Equos. Create an account and chat with your first character on Equos. ## Jump right in Chat with your custom character. Checkout our app samples. Build with Equos & NodeJS Any questions? Reach out on Slack ## Characters A **character** is a complete interactive AI persona you build on Equos. It has a visual identity, a voice, a personality, and the knowledge and abilities it needs to hold meaningful conversations. Setting up a character in the Equos Studio Every character is assembled from six building blocks: The visual identity of your character. A single image—photo, painting, illustration, or AI-generated—is enough to bring it to life with accurate lip-sync and expression. How your character sounds. Pick from a catalog of voices or bring your own via supported TTS providers. The personality and behavior. Define tone, identity, role, and scope through instructions—your character can be a coach, a tutor, a support rep, or any persona you imagine. A knowledge base the character can draw from (RAG). Upload documents so it can answer questions grounded in your own content. Actions the character can take—calling APIs, looking up data, triggering workflows—so it can do things, not just talk. The opening line your character speaks when a conversation starts. Sets the tone and guides the user into the experience. Want inspiration? Read how companies are using Equos to build [creative, experiential live AI applications](https://www.equos.ai/blog/the-next-frontier-creative-experiential-live-ai-avatar-applications). Talk to your first AI-powered character in minutes. # Backend Source: https://docs.equos.ai/integration/backend Create conversations, characters, and knowledge bases from your server using the Node.js or Python SDK. Your backend is the only place that should hold your Equos API key. It's responsible for: * Creating **characters**, **knowledge bases**, and other resources * Starting **conversations** and forwarding the credentials to the client * Stopping conversations when you're done Equos offers two backend SDKs—pick whichever fits your stack. NPM package for Node.js (and any JS runtime). Pip package with sync and async clients. *** ## Start a conversation The most common backend operation: create a conversation for a given character, and return the credentials the client needs to join. ```ts Node.js theme={null} import { EquosClient } from "@equos/node-sdk"; const client = EquosClient.create(process.env.EQUOS_API_KEY!); const { conversation, consumerAccessToken } = await client.conversations.startConversation({ createEquosConversationRequest: { name: "Demo conversation", characterId: process.env.EQUOS_CHARACTER_ID!, consumer: { name: "Demo User", identity: "demo-user" }, }, }); // Send these three fields to your client: // - conversation.serverUrl (LiveKit WebSocket URL) // - consumerAccessToken (short-lived JWT) // - conversation.character.livekitIdentity ``` ```python Python theme={null} import os from equos import EquosClient from equos.models import CreateEquosConversationRequest, EquosParticipantIdentity client = EquosClient(api_key=os.environ["EQUOS_API_KEY"]) response = client.conversations.start( CreateEquosConversationRequest( name="Demo conversation", character_id=os.environ["EQUOS_CHARACTER_ID"], consumer=EquosParticipantIdentity(name="Demo User", identity="demo-user"), ) ) # Send these three fields to your client: # - response.conversation.server_url # - response.consumer_access_token # - response.conversation.character.livekit_identity ``` Never expose `EQUOS_API_KEY` to the client. Only the `conversation` object and `consumerAccessToken` should cross the wire. ## Stop a conversation ```ts Node.js theme={null} await client.conversations.stopConversation({ id: conversation.id }); ``` ```python Python theme={null} client.conversations.stop(response.conversation.id) ``` *** ## Manage other resources The same client can create and manage every resource in your organization: **characters**, **knowledge bases**, **voices**, and more. See the SDK pages for the full API surface: Install, client init, full API. Install, client init, sync + async. *** ## Full examples Complete Node.js project creating characters, knowledge bases, and conversations. Sync and async Python scripts for the same flows. ## Next step Once your backend is returning a conversation payload, wire it up to a client: Connect from a browser using the Browser SDK or React SDK. Connect from iOS or Android using LiveKit. # Native (iOS & Android) Source: https://docs.equos.ai/integration/native Connect from a native mobile app using the LiveKit iOS or Android SDKs. Equos rooms run on [LiveKit](https://livekit.io), so a native iOS or Android app can join a conversation using the official LiveKit SDKs—no Equos-specific mobile SDK required. Your backend still creates the conversation the same way ([see Backend](/integration/backend)); the client just uses a different library to connect to the returned room. Equos doesn't currently ship a dedicated mobile SDK, but the official LiveKit SDKs give you everything you need to render the character's video and send microphone audio. *** ## The fields you need From the backend response, forward these to your mobile app: * `conversation.serverUrl` — the LiveKit WebSocket URL * `consumerAccessToken` — the short-lived JWT the user connects with * `conversation.character.livekitIdentity` — the character's participant identity (useful for filtering remote tracks) *** ## iOS (Swift) Install the LiveKit Swift SDK: ``` https://github.com/livekit/client-sdk-swift ``` Connect and attach the character's video track: ```swift theme={null} import LiveKit let room = Room() try await room.connect( url: conversation.serverUrl, token: consumerAccessToken ) // Enable the user's microphone try await room.localParticipant.setMicrophone(enabled: true) // Subscribe to the character's tracks room.add(delegate: self) // In RoomDelegate: func room(_ room: Room, participant: RemoteParticipant, didSubscribeTrack publication: RemoteTrackPublication) { if participant.identity?.stringValue == conversation.character.livekitIdentity, let videoTrack = publication.track as? VideoTrack { videoView.track = videoTrack } } ``` Full reference for the Swift SDK. *** ## Android (Kotlin) Add the LiveKit Android SDK: ```kotlin theme={null} implementation("io.livekit:livekit-android:") ``` Connect and render: ```kotlin theme={null} import io.livekit.android.LiveKit import io.livekit.android.room.Room val room = LiveKit.create(applicationContext) room.connect( url = conversation.serverUrl, token = consumerAccessToken ) room.localParticipant.setMicrophoneEnabled(true) // Attach the character's video track when it arrives room.events.collect { event -> if (event is RoomEvent.TrackSubscribed && event.participant.identity?.value == conversation.character.livekitIdentity) { (event.track as? VideoTrack)?.let { videoRenderer.bindTrack(it) } } } ``` Full reference for the Android SDK. *** ## Tips The `consumerAccessToken` is short-lived. Don't cache it—fetch a fresh conversation from your backend each time the user wants to start talking. Never ship your Equos API key inside a mobile app. Only your backend should ever see it. # Overview Source: https://docs.equos.ai/integration/overview How to integrate Equos into your own application—backend, web, and native. Integrating Equos into your application is a three-layer story: Your server uses the Equos SDK to create characters, knowledge bases, and—most importantly—**conversations**. It holds your API key; clients never do. Your frontend takes the response from a conversation creation and connects to the live room. Use **@equos/browser-sdk** (vanilla) or **@equos/react** (React/Next.js). For iOS or Android, use the official **LiveKit** SDKs with the `consumerAccessToken` and `serverUrl` returned by your backend. ## The flow 1. Your backend calls `startConversation` with a `characterId` and a consumer identity. Equos spins up a live room and returns: * `conversation.serverUrl` — the LiveKit WebSocket URL for the room * `consumerAccessToken` — a short-lived JWT the end user uses to join * `conversation.character.livekitIdentity` — the identity the character publishes as 2. You forward those fields to your client (web or native). 3. The client connects to the room and starts talking to the character. Your **API key** lives on the server only. The client should only ever receive the `conversation` object and the `consumerAccessToken`. ## Working examples The [equos-examples](https://github.com/EquosAI/equos-examples) repo contains complete, runnable apps for every layer: Full backend project with `@equos/node-sdk`. Sync and async Python with the `equos` package. Plain HTML + TypeScript using `@equos/browser-sdk`. Vite + React app using `@equos/react`. Next.js 15 with server actions + `@equos/react`. # Web Source: https://docs.equos.ai/integration/web Connect a browser to a live conversation using the Equos Browser or React SDKs. Once your backend has called `startConversation`, the response contains everything your web client needs to join the live room: * `conversation.serverUrl` — the LiveKit WebSocket URL * `consumerAccessToken` — the end-user's JWT * `conversation.character.livekitIdentity` — the character's identity for event wiring Pick the SDK that matches your stack. Vanilla TypeScript/JavaScript. Great for custom UIs or non-React frameworks. Provider + renderer components for React, Next.js, Remix, etc. *** ## Browser SDK Install: ```bash theme={null} npm i @equos/browser-sdk ``` Fetch the conversation credentials from your backend, then hand them to `EquosConversation`: ```ts theme={null} import { EquosConversation, EquosEvent } from "@equos/browser-sdk"; const video = document.getElementById("character-video") as HTMLVideoElement; // 1. Get credentials from your backend const res = await fetch("/api/start-conversation", { method: "POST" }); const { conversation: conv, consumerAccessToken } = await res.json(); // 2. Build the client with the three fields const conversation = new EquosConversation({ config: { wsUrl: conv.serverUrl, token: consumerAccessToken, agentIdentity: conv.character.livekitIdentity, }, }); // 3. Handle events and connect conversation.on(EquosEvent.AgentConnected, () => conversation.attach(video)); conversation.on(EquosEvent.Utterance, ({ utterance }) => console.log(utterance.author, utterance.content) ); await conversation.connect(); ``` Common controls: ```ts theme={null} await conversation.setMicrophoneEnabled(true); // mic on conversation.sendText("Hello!"); // send a text message await conversation.disconnect(); // hang up conversation.detach(video); // unbind the