Beever Atlas v0.1 has launched! Star us on GitHub

Search API

Overview

Hybrid search combining semantic vector search with keyword matching for optimal results.

POST /api/search

Perform a hybrid search across memories and facts.

Request Body

{
  "query": "authentication JWT tokens",
  "channel_id": "C12345",
  "limit": 10,
  "filters": {
    "fact_types": ["decision"],
    "importance": ["high", "medium"],
    "date_range": {
      "start": "2026-01-01T00:00:00Z",
      "end": "2026-04-13T23:59:59Z"
    }
  },
  "include_citations": true
}

Parameters

FieldTypeRequiredDescription
querystringYesNatural language search query
channel_idstringYesChannel to search (or null for all channels)
limitintNoMax results (default: 10, max: 50)
filtersobjectNoSearch filters (see below)
include_citationsbooleanNoInclude source citations (default: true)

Filters

{
  "fact_types": ["decision", "action_item"],
  "importance": ["high", "medium"],
  "topics": ["authentication", "security"],
  "entities": ["JWT", "OAuth"],
  "authors": ["Jane Smith", "Bob Jones"],
  "date_range": {
    "start": "2026-01-01T00:00:00Z",
    "end": "2026-04-13T23:59:59Z"
  }
}

Response

{
  "results": [
    {
      "memory": {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "memory_text": "The team decided to use JWT tokens for authentication with 1-hour expiration.",
        "quality_score": 0.85,
        "author_name": "Jane Smith",
        "message_ts": "2026-04-13T10:30:00Z",
        "fact_type": "decision",
        "importance": "high",
        "topic_tags": ["authentication"],
        "entity_tags": ["JWT"]
      },
      "score": 0.95,
      "highlights": ["The team decided to use <mark>JWT</mark> tokens for <mark>authentication</mark>"],
      "citation": {
        "id": "[1]",
        "permalink": "https://slack.com/archives/C12345/p1234567890",
        "author": "Jane Smith",
        "timestamp": "2026-04-13T10:30:00Z"
      }
    }
  ],
  "total": 15,
  "query_time_ms": 45,
  "search_method": "hybrid"
}

Response Fields

FieldTypeDescription
resultsarraySearch results with scores and highlights
totalintTotal matching results
query_time_msfloatQuery execution time
search_methodstring"vector" | "keyword" | "hybrid"

Search Methods

Hybrid Search (Default)

Combines vector semantic search with BM25 keyword matching:

{
  "query": "How do we handle authentication?",
  "search_mode": "hybrid",
  "vector_weight": 0.7,
  "keyword_weight": 0.3
}

Best for: Most queries, balances semantic understanding with exact matching

Pure semantic search using embeddings:

{
  "query": "security token management",
  "search_mode": "vector"
}

Best for: Conceptual queries, synonyms, paraphrases

Pure BM25 keyword matching:

{
  "query": "JWT OAuth2",
  "search_mode": "keyword"
}

Best for: Exact terms, codes, specific phrases

Advanced Features

Enable fuzzy matching for typos:

{
  "query": "authentiction",
  "fuzzy": true,
  "fuzziness": "AUTO"
}

Get aggregate counts:

{
  "query": "authentication",
  "facets": ["fact_type", "importance", "topics"]
}

Response includes:

{
  "facets": {
    "fact_type": {
      "decision": 8,
      "opinion": 5,
      "observation": 12
    },
    "importance": {
      "high": 15,
      "medium": 10
    }
  }
}

Find terms near each other:

{
  "query": "JWT authentication",
  "proximity": 5
}

Finds "JWT" and "authentication" within 5 words.

Search Examples

Find Decisions

curl -X POST http://localhost:8000/api/search \
  -H "Content-Type: application/json" \
  -d '{
    "query": "authentication",
    "filters": {"fact_types": ["decision"]},
    "limit": 20
  }'

Search by Author

{
  "query": "API design",
  "filters": {
    "authors": ["Jane Smith"]
  }
}

Recent High-Importance Facts

{
  "query": "*",
  "filters": {
    "importance": ["high"],
    "date_range": {
      "start": "2026-04-01T00:00:00Z"
    }
  },
  "limit": 50
}

Search Performance

Query Complexity

Query TypeTypical Latency
Keyword only10-50ms
Vector only50-200ms
Hybrid50-250ms
With filters+20-50ms

Optimization Tips

  1. Use filters: Reduce result set early
  2. Limit results: Keep under 50 for fast responses
  3. Channel scope: Search single channel vs. all channels
  4. Cache results: Reuse search results when possible

Relevance Scoring

Results are scored 0.0 to 1.0 based on:

  • Semantic similarity (vector search)
  • Keyword match density (BM25)
  • Fact quality score
  • Recency boost (recent facts score higher)
  • Importance boost (high importance scores higher)
final_score = (
  vector_score * 0.5 +
  keyword_score * 0.3 +
  quality_score * 0.15 +
  recency_boost * 0.05
) * importance_multiplier

On this page