What is a session?
A session is a single recorded meeting or conversation. It belongs to a workspace, has one or more audio recordings attached, and produces a transcript and summary when processing is complete.Session states
Key endpoints
Create a session
POST /api/sessions
id.
Start / stop recording
Recording state is tracked in Redis and broadcast via WebSocket to all connected clients.PUT /api/sessions/{session_id}/recording-status— set status (recording,paused,inactive)
Upload audio chunks
POST /api/sessions/{session_id}/chunks
Chunks are sequentially numbered (seq=1, seq=2, …). Each chunk is queued for transcription immediately, giving live partial transcripts in the moderator view.
Limits:
- No hard size limit per chunk, but keep chunks under ~10 MB for reliability
- Chunks must be sequential — gaps cause stitching errors
Finalise a session
POST /api/sessions/{session_id}/finalize
Triggers stitching of all chunks into one audio file, then queues the final transcription job. After this point no more chunks can be uploaded.
Get session details
GET /api/sessions/{session_id}
Returns the session with its current state, transcript (if complete), summary (if complete), and job statuses.
List sessions
GET /api/sessions?workspace_id=...
Paginated. Returns sessions for a workspace ordered by created_at descending.
Recording ownership
Only one client can record at a time per session. When recording starts, the API stores a recording owner token in Redis (TTL 1 hour). If another client tries to start recording, they see a “someone else is recording — take over?” prompt. The token expires automatically after 1 hour to handle crashes/disconnects. Ownership is released when recording is stopped normally.Live transcript
While recording, chunk transcripts appear in the moderator view via WebSocket as each chunk job completes. These are preliminary — the final full-audio transcription (with diarisation) replaces them once finalisation is complete.Transcript & summary access
GET /api/sessions/{session_id}/transcript— full transcript text with speaker labels and timestampsGET /api/sessions/{session_id}/summary— AI-generated summary (available after finalisation + summarisation)