Meeting transcripts

Automatically ingest meeting transcripts from Fireflies, Otter, Grain, Fathom, or any webhook-capable transcription service.

How it works

Most transcription services support post-meeting webhooks. You configure a URL, they POST the transcript after each meeting. Point it at your endpoint and forward to Anansi.

Webhook payload format

shell
POST https://anansimemory.com/v1/ingest Authorization: Bearer ans_your_key Content-Type: application/json
json
{ "userId": "user_abc", "content": "Alice: Let's talk about Q3...\nBob: I think we should...", "sourceType": "meeting", "metadata": { "title": "Q3 Planning — June 8", "participants": "Alice, Bob, Carol", "timestamp": "2026-06-08T14: 00: 00Z" } }

Middleware example

typescripttranscript-webhook.ts
app.post("/transcript-webhook", "kw">async (req, res) => { "kw">const { title, transcript, organizer_email } = req.body; "kw">await fetch("https:">class="cm">//anansimemory.com/v1/ingest", { method: "POST", headers: { Authorization: `Bearer ${process.env.ANANSI_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ userId: organizer_email, content: transcript, sourceType: "meeting", metadata: { title, timestamp: "kw">new Date().toISOString() }, }), }); res.json({ ok: true }); });

How Anansi chunks meeting content

Meeting transcripts are chunked at speaker turns (e.g. Alice:, Bob:) so each speaker's contribution stays semantically together — making vector search significantly more accurate.

What appears in synthesized memory

  • static — recurring topics, team decisions, ownership ("Carol owns Q3 roadmap")
  • dynamic — current action items, open questions from recent meetings
  • relevant — specific meeting content matching your query, with metadata.title
Tip
Tip: Include metadata.title and metadata.participants — they surface in relevant[].metadata, letting you show "From: Q3 Planning — June 8" in your UI.