Documentation Index
Fetch the complete documentation index at: https://docs.enagrams.com/llms.txt
Use this file to discover all available pages before exploring further.
Ingest a Transcript
Extract decisions, action items, and work packages from a meeting transcript.
POST /meetings/ingest
Authorization: Bearer ek_...
{
"workspace_id": "ws_abc123",
"title": "Sprint Planning — April 13",
"transcript": "Developer A: Let's use Zod for all input validation. Developer B: Agreed. I'll take the auth routes. Developer A: I'll handle the user endpoints...",
"participants": ["Developer A", "Developer B"]
}
Response
{
"id": "mtg_abc",
"title": "Sprint Planning — April 13",
"decisions": [
{
"id": "dec_xyz",
"title": "Use Zod for input validation",
"rationale": "Type-safe, TypeScript-native",
"type": "architecture"
}
],
"action_items": [
{
"action": "Build auth route validation",
"assignee": "Developer B",
"priority": "high"
}
],
"work_packages": [
{
"id": "pkg_abc",
"title": "Implement Zod validation for auth routes",
"description": "Add Zod schemas for login, register, password reset",
"files": ["src/auth/validators.ts"],
"assignee": "Developer B",
"status": "open"
}
]
}
Start Live Recording
Creates a meeting in recording state. After this, open a WebSocket to /ws/transcribe to stream audio.
POST /meetings/start
Authorization: Bearer ek_...
{
"workspace_id": "ws_abc123",
"title": "Design Review"
}
Response
{
"id": "mtg_xyz",
"status": "recording",
"ws_url": "wss://api.enagrams.com/ws/transcribe?meeting_id=mtg_xyz&workspace_id=ws_abc123"
}
Live Transcription WebSocket
Stream audio chunks from MediaRecorder to Whisper.
WS /ws/transcribe?meeting_id=mtg_xyz&workspace_id=ws_abc123
Authorization: Bearer ek_... (via query param or protocol header)
Send: Binary audio chunks (ArrayBuffer from MediaRecorder)
Receive: Transcription chunks as JSON:
{
"type": "transcript_chunk",
"text": "Developer A: Let's use JWT for authentication."
}
Stop the recording:
On stop, the server finalizes transcription, extracts decisions, generates work packages, and returns:
{
"type": "complete",
"meeting_id": "mtg_xyz",
"decisions": [...],
"work_packages": [...]
}
List Meetings
GET /meetings/recent
Authorization: Bearer ek_...
Query params:
workspace_id — required
limit — default 20
Response
[
{
"id": "mtg_abc",
"title": "Sprint Planning",
"status": "completed",
"participants": ["Developer A", "Developer B"],
"decisions_count": 3,
"work_packages_count": 4,
"created_at": "2026-04-13T09:00:00Z"
}
]
Meeting Status
| Status | Description |
|---|
recording | Live audio streaming in progress |
processing | LLM extraction running |
completed | Decisions and work packages available |