Skip to main content

Overview

60db’s Memory system gives your AI applications a long-term, searchable memory. It stores user preferences, conversation history, knowledge base documents, and arbitrary facts, then retrieves the most relevant ones on demand using hybrid semantic + keyword search. Built on a multi-layer retrieval architecture combining vector search with a knowledge graph, Memory enables:
  • Personalized AI chat — the SLM remembers user preferences across sessions
  • Knowledge base Q&A — ingest docs and retrieve grounded answers
  • Multi-user collaboration — shared “team” memory collections
  • Graph-aware recall — find related concepts through knowledge-graph traversal

Hybrid Search

Semantic (vector) + keyword (BM25) scoring with configurable weights

Context Assembly

One-shot endpoint returns an LLM-ready context string for any query

Graph Relationships

Extracted facts link together as a knowledge graph

Multi-Collection

Personal, team, knowledge, and hive (cross-collection) memory types

Document Upload

Upload PDFs, Office docs, and scanned images — text extraction + OCR built in

91+ Formats

PDF, DOCX, XLSX, PPTX, EML, MSG, HTML, scanned images with built-in OCR

Core concepts

Memory collections

Memories live in collections scoped to your workspace. Each collection is one of: Your personal collection is created automatically the first time you use Memory. Team/knowledge/hive collections are created by owners/admins.

Memory types

When you store a memory, you specify its type:
  • user — private, user-scoped facts. Auto-extracted from conversations or manually entered.
  • knowledge — reference content (docs, policies, FAQs). Read by all members.
  • hive — workspace-wide shared facts that appear in every user’s search results.

Two search modes

  • Fast — single-query hybrid search. Returns in ~100ms. Default.
  • Thinking — multi-query expansion with reranking. Better recall quality, slower (~1-2s).

Storing memories

Response

Memories are processed asynchronously. Poll GET /memory/:id/status to check if ingestion is complete.

Uploading documents

For longer-form content — PDFs, Word docs, spreadsheets, scanned pages, emails — use POST /memory/documents/extract. The server handles format detection, OCR, and chunking for you, so you just upload the raw file and 60db does the rest. Under the hood, 60db runs your file through its document extraction engine (91+ formats with built-in OCR for scanned documents), splits the extracted text into overlapping chunks, and ingests each chunk as a knowledge-type memory in one batch.

What you can upload

Max file size: 200 MB. Max chunks per document: 100 (tune chunk_size for larger docs).

Response

The returned metadata.page_count and detected_languages come from the document extraction engine and are useful for displaying upload progress or filtering by source language. Scanned PDFs will list the OCR-detected language codes (eng, fra, spa, etc.).

Chunking controls

Two optional form fields tune how text is split: See the API reference for a tuning table by document type.

Searching memories

Context assembly (RAG for SLM chat)

The /memory/context endpoint is purpose-built for retrieval-augmented generation. Given a user query, it fetches the most relevant memories, recent events, and graph relationships, and returns a pre-formatted context string ready to prepend to your LLM prompt.

Built-in SLM Chat integration

When using 60db’s UI at /app/slm-chat, there’s a Memory toggle next to Auto-clear. When enabled, every message you send is pre-processed:
  1. Your message is sent to /memory/context with your session ID
  2. Relevant memories and recent events are fetched (semantic + keyword + temporal)
  3. The returned prompt_ready string is prepended to the system message
  4. The enriched prompt goes to the SLM
This means your AI chat remembers context across sessions automatically. Toggle it off if you want a fresh, memoryless conversation.

Collections management

Role-based access

Memory operations are gated by your workspace role:

API key access

To use Memory via an API key (for programmatic access), the key must have the memory scope. When creating an API key in Settings → Developers, check the “Memory & RAG” box.

Pricing

Memory is pay-as-you-go — no subscription, no seat pricing, no minimum commitment. You pay only for the operations you run, deducted from a single workspace wallet you top up via Stripe, Razorpay, or Dodo Payments. Real-world cost examples:
  • A knowledge base with 100 MB of docs + 10,000 searches/month → ~$23/month
  • A personal assistant with 1,000 user memories + 500 searches/day → ~$5/month
  • A support bot with 1 GB of docs + 100,000 searches/month → ~$53/month
Compared to proprietary memory services at 249249–5,000/month flat, 60db Memory is 5–50x cheaper for most workloads — and you only pay for what you actually use.
Every billable request returns these response headers so you can track spend without polling:
Automatic refunds — if a request fails after being charged (upstream outage, corrupt file, etc.), the charge is reversed automatically and logged as a compensating row in transaction_log. No support tickets required. Never billed — listing collections, creating collections, checking memory status, deleting memories, and GET /memory/usage are always free so you can still manage your data when the wallet is empty. See the full Pricing & Billing reference for rate details, refund policy, and the complete header/error reference.

Handling insufficient credits

When the wallet runs out, billable endpoints return HTTP 402:
Your client should catch error_code === "INSUFFICIENT_CREDITS" and prompt the user to top up. Here’s a pattern for the search endpoint:

Tracking usage

Call GET /memory/usage to get a monthly spend breakdown by operation type. This is what powers the Spend this month card on the 60db Memory dashboard.

Failure handling

The Memory service is designed to degrade gracefully:
  • If the memory layer is temporarily unreachable, POST /memory/ingest queues your memory in a retry table, returns 202 Accepted, and automatically refunds the charge so you aren’t billed for work that didn’t happen.
  • POST /memory/context returns an empty prompt on outage — your SLM chat still works, just without memory context. No charge when context is empty.
  • POST /memory/search returns 503 — the UI shows a “Memory temporarily unavailable” banner without blocking other features. Auto-refunded.
  • POST /memory/documents/extract auto-refunds the extract fee if extraction fails (corrupt file, empty PDF, OCR error). If extraction succeeds but the wallet can’t cover the post-extraction ingest fee, the extract fee is refunded and a 402 is returned.

Limits

  • Ingest batch: Up to 100 memories per request
  • Memory text: Max 100,000 characters per entry
  • Query length: Max 2,000 characters
  • Results: Max 50 per search (refine query for more precise results)
  • Context length: Max 16,000 tokens assembled per request
  • Document upload: Max 200 MB per file, max 100 chunks per document
  • Rate limit: 30 ingests/min per workspace

Further reading