Facts Registry

Deterministic company facts — never a vector guess.

The Facts Registry stores authoritative, versioned values for deterministic company data. Unlike semantic search, facts return exact values with citations.

When to Use Facts

Use FactsUse Memories
MRR, ARR, revenue"We chose PostgreSQL because..."
Headcount, team size"The API uses REST, not GraphQL"
Churn rate, NPS score"Deploy on Tuesdays"
Funding round amounts"Use oklch color space"

Fact Structure

{
  "key": "mrr",
  "label": "Monthly Recurring Revenue",
  "scope": "finance",
  "definition": "Total monthly subscription revenue",
  "current_value": {
    "value": "$2.4M",
    "unit": "USD",
    "source_url": "https://dashboard.company.com/mrr",
    "as_of": "2025-01-15T00:00:00Z"
  }
}

Creating Facts

curl -X POST https://your-cortex-host/api/facts \
  -H "Authorization: Bearer crtx_..." \
  -H "Content-Type: application/json" \
  -d '{
    "key": "mrr",
    "label": "Monthly Recurring Revenue",
    "scope": "finance",
    "definition": "Total monthly subscription revenue",
    "value": "$2.4M",
    "unit": "USD",
    "source_url": "https://dashboard.company.com/mrr"
  }'

Querying Facts

Via MCP

{
  "name": "get_fact",
  "arguments": {
    "key": "mrr"
  }
}

Via REST API

curl -H "Authorization: Bearer crtx_..." \
  https://your-cortex-host/api/facts/mrr

Version History

Every fact update creates a new version. Previous values are retained:

{
  "key": "mrr",
  "current_value": {
    "value": "$2.4M",
    "as_of": "2025-01-15T00:00:00Z"
  },
  "history": [
    {
      "value": "$2.1M",
      "as_of": "2024-12-15T00:00:00Z"
    },
    {
      "value": "$1.8M",
      "as_of": "2024-11-15T00:00:00Z"
    }
  ]
}

Facts vs. Memories

PropertyFactsMemories
Return typeExact valueSemantic matches
CitationAlways includedAlways included
VersioningFull historySupersedes chain
Use caseDeterministic dataKnowledge, decisions
SearchKey lookupVector similarity

Facts are perfect for metrics, headcount, financial data, and other authoritative values that should never be "guessed" by semantic search.