> ## Documentation Index
> Fetch the complete documentation index at: https://docs.akapulu.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Akapulu Labs builds live AI avatars on real-time calls. Two shapes: (1) a hosted link — public page Akapulu Labs hosts; open URL, Start Call; page never sees the API key; (2) your voice pipeline (speech-to-speech or any stack that produces assistant audio) plus Akapulu Labs avatar video in a Daily room you create. Calls use conversation minutes (akapulu.com/pricing). For agent onboarding (skills, MCP, account, which path to take), follow https://docs.akapulu.com/agent-setup.md.
> Hosted links: create in the dashboard or Bearer CRUD on /api/hosted-links/ (GET/POST/DELETE collection; GET/PUT/DELETE by id). Create body is exactly label, avatar_id, system_prompt, show_ai_label. Response includes url and token.
> Plugin path: Akapulu Labs uses Daily. On a new room, create_akapulu_call from pipecat-akapulu runs on their server. It reads DAILY_API_KEY and AKAPULU_API_KEY, creates a private Daily room, mints the three meeting tokens (browser, voice bot, Akapulu Labs worker), and POST /api/live-sessions/. It returns the room URL, the bot token, the browser token, and session_id. The room lasts two hours unless they pass room_exp_secs. A bot that already has a Daily room mints the worker token and POSTs avatar_id, show_ai_label, room_url, and avatar_token itself. That POST starts the Akapulu Labs worker and returns session_id. The code is on Your bot. AkapuluAvatar (pipecat-akapulu) runs inside the voice bot after assistant audio and sends that audio to the Akapulu Labs worker. The worker joins the call as a Daily participant and publishes the audio and the video, so voice-bot audio/video out stay off. The voice bot unsubscribes from the Avatar microphone when that participant joins. The browser stays subscribed to it. Public example akapulu-examples uses Deepgram Flux (`flux-general-multi`), OpenAI `gpt-5.4-mini`, and Cartesia Sonic 3.6.
> Every avatar frame has an invisible mark; verify with POST /api/video-marks/ then POST /api/video-marks/<id>/read/. API errors include error_code — branch on that field, not the English string.

# Create a live session

> Start the avatar in a Daily room you already created.

`POST /api/live-sessions/`

You create the Daily room and the avatar's meeting token. This call stores them and starts the avatar. The response is `session_id`.

`create_akapulu_call` makes this request for you. The code is on [Your bot](https://docs.akapulu.com/guides/calls/your-bot.md). A server that already has a Daily room sends this request itself.

Required headers:

* `Authorization: Bearer <YOUR_AKAPULU_API_KEY>`
* `Content-Type: application/json`

Required JSON fields:

* `avatar_id` — UUID of the avatar
* `show_ai_label` — boolean, whether the video shows **This is AI**
* `room_url` — `https://` URL of the Daily room, at most 2048 characters, with a room name
* `avatar_token` — meeting token the avatar joins with

```json theme={null}
{
  "avatar_id": "66666666-7777-8888-9999-000000000000",
  "show_ai_label": true,
  "room_url": "https://example.daily.co/room-name",
  "avatar_token": "<avatar meeting token>"
}
```

```json theme={null}
{
  "session_id": "11111111-2222-3333-4444-555555555555"
}
```

Pass `session_id` to `AkapuluAvatar`. Loading status is a server message on your bot with `type` `status`.

On failure the body includes `error` and `error_code`. See [Error responses](https://docs.akapulu.com/api-reference/introduction.md#error-responses).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.