Skip to main content
POST
/
v1
/
memory
Memory API
curl --request POST \
  --url https://api.statebase.org/v1/memory

Memory API

Memory enables your agents to remember facts across sessions. Unlike session state (which is ephemeral), memories are permanent and searchable via semantic similarity.

Memory vs State

AspectStateMemory
ScopeSingle sessionCross-session
LifecycleEphemeral (TTL)Permanent
StructureNested JSONFlat text + embeddings
AccessDirect readSemantic search
Use CaseWorking memoryLong-term knowledge

Add Memory

POST /v1/memory Stores a new memory with optional vector embedding for semantic search.

Request Body

FieldTypeRequiredDescription
session_idstring✅ YesSession to associate memory with
contentstring✅ YesMemory text (max 10,000 chars)
typestringNoMemory classification: "fact", "preference", "event", "policy" (default: "general")
tagsarrayNoTags for categorization (e.g., ["travel", "preferences"])
metadataobjectNoCustom metadata
embedbooleanNoGenerate vector embedding (default: true)

Response

FieldTypeDescription
idstringUnique memory ID (format: mem_<12_chars>)
session_idstringAssociated session
contentstringMemory text
typestringMemory type
tagsarrayTags
metadataobjectCustom metadata
created_atstringISO 8601 timestamp
embedding_idstringVector DB ID (if embedded)
vector_availablebooleanWhether semantic search is enabled

Example

curl -X POST https://api.statebase.org/v1/memory \
  -H "X-API-Key: sb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "sess_abc123",
    "content": "User prefers concise responses without long explanations",
    "type": "preference",
    "tags": ["communication_style", "user_preferences"],
    "metadata": {
      "confidence": 0.95,
      "source": "explicit_user_statement"
    }
  }'

Search Memories

POST /v1/memory/search Performs semantic similarity search across all memories. Returns the most relevant memories based on vector similarity.

Request Body

FieldTypeRequiredDescription
querystring✅ YesSearch query (will be embedded and compared)
session_idstringNoFilter to specific session’s memories
user_idstringNoFilter to specific user’s memories
typestringNoFilter by memory type
tagsarrayNoFilter by tags (returns memories with ANY of these tags)
limitintegerNoMax results to return (default: 10, max: 50)
thresholdfloatNoMinimum similarity score (0.0-1.0, default: 0.7)

Response

FieldTypeDescription
dataarrayArray of memory results
querystringOriginal search query

Memory Result Object

FieldTypeDescription
idstringMemory ID
session_idstringAssociated session
contentstringMemory text
typestringMemory type
tagsarrayTags
scorefloatSimilarity score (0.0-1.0, higher = more relevant)
created_atstringWhen memory was created

Example

curl -X POST https://api.statebase.org/v1/memory/search \
  -H "X-API-Key: sb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "How does the user like to communicate?",
    "session_id": "sess_abc123",
    "limit": 5,
    "threshold": 0.7
  }'

Get Memory

GET /v1/memory/{memory_id} Retrieves a specific memory by ID.

Path Parameters

ParameterTypeRequiredDescription
memory_idstring✅ YesMemory ID

Example

curl https://api.statebase.org/v1/memory/mem_xyz789 \
  -H "X-API-Key: sb_your_key"

Update Memory

PATCH /v1/memory/{memory_id} Updates an existing memory. If content is changed, a new embedding is generated.

Path Parameters

ParameterTypeRequiredDescription
memory_idstring✅ YesMemory ID to update

Request Body

FieldTypeRequiredDescription
contentstringNoNew memory text
typestringNoNew memory type
tagsarrayNoNew tags (replaces existing)
metadataobjectNoNew metadata (merges with existing)

Example

curl -X PATCH https://api.statebase.org/v1/memory/mem_xyz789 \
  -H "X-API-Key: sb_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "User strongly prefers very concise, bullet-point responses",
    "tags": ["communication_style", "high_priority"]
  }'

Delete Memory

DELETE /v1/memory/{memory_id} Permanently deletes a memory and its vector embedding.

Path Parameters

ParameterTypeRequiredDescription
memory_idstring✅ YesMemory ID to delete

Example

curl -X DELETE https://api.statebase.org/v1/memory/mem_xyz789 \
  -H "X-API-Key: sb_your_key"

List Memories

GET /v1/memory Lists all memories with optional filtering.

Query Parameters

ParameterTypeRequiredDescription
session_idstringNoFilter by session
user_idstringNoFilter by user
typestringNoFilter by type
tagsstringNoComma-separated tags to filter by
limitintegerNoMax results (default: 20, max: 100)
starting_afterstringNoMemory ID for pagination

Example

curl "https://api.statebase.org/v1/memory?session_id=sess_abc123&type=preference&limit=10" \
  -H "X-API-Key: sb_your_key"

Memory Types

Use these standard types for consistency:
TypeDescriptionExample
factObjective information"User's company is Acme Corp"
preferenceUser preferences"User prefers dark mode"
eventHistorical events"User completed onboarding on 2026-01-15"
policyRules and policies"Always ask for confirmation before deleting data"
observationBehavioral insights"User tends to ask follow-up questions"
generalUncategorizedAny other memory

Common Use Cases

1. User Preferences

# Store preference
sb.memory.add(
    session_id=session.id,
    content="User prefers metric units (Celsius, kilometers)",
    type="preference",
    tags=["units", "localization"]
)

# Later, retrieve preferences
prefs = sb.memory.search(
    query="user measurement preferences",
    session_id=session.id,
    type="preference"
)

2. Conversation Summaries

# After long conversation, summarize and store
summary = llm.summarize(conversation_history)

sb.memory.add(
    session_id=session.id,
    content=summary,
    type="event",
    tags=["conversation_summary"],
    metadata={"turn_count": len(conversation_history)}
)

3. Knowledge Base

# Store company policies
sb.memory.add(
    session_id=session.id,
    content="Refund policy: 30 days for unopened items, 14 days for opened items",
    type="policy",
    tags=["refunds", "customer_service"]
)

# Search when needed
policies = sb.memory.search(
    query="refund policy",
    type="policy",
    limit=3
)

4. User History

# Track important events
sb.memory.add(
    session_id=session.id,
    content="User successfully completed payment for $299.99 order",
    type="event",
    tags=["transaction", "payment"],
    metadata={
        "amount": 299.99,
        "order_id": "ORD-12345",
        "timestamp": datetime.now().isoformat()
    }
)

Best Practices

✅ Do This

  • Use semantic search instead of keyword matching
  • Tag memories for easy filtering
  • Set confidence scores in metadata
  • Consolidate similar memories (avoid duplicates)
  • Use specific memory types (not just “general”)

❌ Avoid This

  • Don’t store temporary data (use session state instead)
  • Don’t store sensitive data unencrypted (use metadata encryption)
  • Don’t create too many memories (focus on high-signal information)
  • Don’t forget to clean up (delete outdated memories)

Embeddings

StateBase automatically generates vector embeddings using:
  • Default: Google Gemini (text-embedding-004)
  • Alternative: OpenAI (text-embedding-3-small)
Configure in your Dashboard → Settings. Embedding dimension: 1536 (compatible with most vector DBs)

Error Responses

Status CodeError CodeDescription
400invalid_requestMissing or invalid fields
404memory_not_foundMemory doesn’t exist
404session_not_foundSession doesn’t exist
413content_too_largeContent exceeds 10,000 chars
429rate_limit_exceededToo many requests

Next Steps


Key Takeaway: Memory is how your agent learns over time. Use it for facts that should persist across sessions.