Connect a Conversation Session
Akapulu uses Daily behind the scenes for live WebRTC audio and video transport.Your app starts a session by calling the connect endpoint, and Akapulu handles room setup, assistant startup, and session coordination.
Connection flow diagram
Conversation participants
Each live conversation has two core participants in the Daily room:- User participant: the person joining from your frontend (microphone and optional camera).
- Bot participant: the Akapulu assistant runtime, which joins as the remote participant.
End-to-end connection flow
-
Client calls connect
- Your app sends
POST /api/conversations/connect/with:Authorization: Bearer <API_KEY>scenario_idavatar_id(UUID)- optional
runtime_vars - optional
stt_keywords - optional
voice_only_mode
scenario_idcontrols conversation behavior;avatar_idselects the avatar for that specific session.
- Your app sends
-
Session is validated and prepared
- API key ownership, scenario access, avatar access, and active plan limits are validated.
- Scenario runtime configuration is prepared for the session.
-
Daily room and credentials are created
- A private Daily room is created for the conversation.
- Connection credentials are generated for the user session.
-
Connect response is returned
- The connect response returns:
room_urltokenconversation_session_id
- The connect response returns:
-
User joins the room
- Your frontend uses
room_urlandtokento join the Daily room.
- Your frontend uses
-
Assistant runtime starts in parallel
- The bot process starts for the selected scenario and avatar.
-
Bot joins the room
- After initialization completes, the bot joins as the remote participant.
-
Frontend monitors readiness
- Poll
GET /api/conversations/{conversation_session_id}/updates/untilcall_is_readyistrue. - Once ready, transition your UI from loading state to live in-call state.
- Poll
Understand Usage and Concurrency Limits
Conversation capacity is controlled by your current plan. Before a session starts, Akapulu validates usage and concurrency limits for the API key owner.How plan limits are applied
- Concurrency limit: each active conversation uses one concurrency slot.
- Max concurrency: total available slots come from your plan.
- Minutes limit: total monthly minutes available come from your plan.
- Per-call duration cap: each session is capped by the lower of:
- your plan’s max call duration
- your remaining minutes
Concurrency behavior
WhenPOST /api/conversations/connect/ succeeds, the new conversation reserves one active slot. If no slots are available, connect is rejected until another active conversation ends or expires.
Minutes usage behavior
Minutes used increase while the conversation is ongoing and are tracked in whole minutes. You can view total minutes used, current concurrency slots used, and your next plan reset date on the Usage page.Manage Recordings and Transcripts
You can view conversation sessions on the Conversations page. For each session, you can:- open the transcript view, which shows a sanitized transcript that excludes full tool call messages
- click Download Recording to download and review the recording

