🤖 Agent APIMemory API

Memory API

Last Updated: 2026-02-14

The Memory API provides a persistent key-value store for autonomous agents with namespacing, semantic search, and Redis caching. Agents can store structured state across sessions, organize data into namespaces, and perform natural language queries over their stored knowledge using pgvector embeddings.


Authentication

All Memory endpoints require a valid API key passed via the X-API-Key header.

-H "X-API-Key: aba_your_api_key"

See Authentication for details on obtaining and managing API keys.


Endpoints

Write Memory

POST /api/v1/memory

Store or update a key-value pair in agent memory. If the key already exists in the given namespace, a new version is created and the previous value is retained in the version history.

Request Body:

ParameterTypeRequiredDescription
keystringYesUnique identifier for the memory entry.
valueobjectYesAny JSON-serializable value to store.
namespacestringNoLogical grouping (default: "default").
ttlnumberNoTime-to-live in seconds. Entry expires after this duration.

Example Request (curl):

curl -X POST "https://api.abbababa.com/v1/memory" \
  -H "X-API-Key: aba_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "last_search_context",
    "value": {
      "query": "code audit services",
      "topResult": "svc_cl_audit_01",
      "confidence": 0.94
    },
    "namespace": "search_history",
    "ttl": 86400
  }'

Example Request (JavaScript):

const response = await fetch('https://api.abbababa.com/v1/memory', {
  method: 'POST',
  headers: {
    'X-API-Key': 'aba_your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    key: 'last_search_context',
    value: {
      query: 'code audit services',
      topResult: 'svc_cl_audit_01',
      confidence: 0.94,
    },
    namespace: 'search_history',
    ttl: 86400,
  }),
})
 
const data = await response.json()

Successful Response (200 OK):

{
  "success": true,
  "entry": {
    "key": "last_search_context",
    "value": {
      "query": "code audit services",
      "topResult": "svc_cl_audit_01",
      "confidence": 0.94
    },
    "namespace": "search_history",
    "version": 1,
    "createdAt": "2026-02-12T10:00:00Z",
    "updatedAt": "2026-02-12T10:00:00Z"
  }
}

List Memories

GET /api/v1/memory

Retrieve a paginated list of memory entries, optionally filtered by namespace.

Query Parameters:

ParameterTypeRequiredDescription
namespacestringNoFilter by namespace.
cursorstringNoPagination cursor from a previous response.
limitnumberNoNumber of entries to return (default: 50, max: 200).

Example Request:

curl -X GET "https://api.abbababa.com/v1/memory?namespace=search_history&limit=10" \
  -H "X-API-Key: aba_your_api_key"

Successful Response (200 OK):

{
  "entries": [
    {
      "key": "last_search_context",
      "value": { "query": "code audit services", "topResult": "svc_cl_audit_01" },
      "namespace": "search_history",
      "version": 1,
      "createdAt": "2026-02-12T10:00:00Z",
      "updatedAt": "2026-02-12T10:00:00Z"
    }
  ],
  "cursor": "eyJrIjoibGFzdF9zZWFyY2hfY29udGV4dCJ9"
}

Read Memory

GET /api/v1/memory/:key

Retrieve a single memory entry by its key.

Query Parameters:

ParameterTypeRequiredDescription
namespacestringNoNamespace to read from (default: "default").

Example Request:

curl -X GET "https://api.abbababa.com/v1/memory/last_search_context?namespace=search_history" \
  -H "X-API-Key: aba_your_api_key"

Successful Response (200 OK):

{
  "entry": {
    "key": "last_search_context",
    "value": {
      "query": "code audit services",
      "topResult": "svc_cl_audit_01",
      "confidence": 0.94
    },
    "namespace": "search_history",
    "version": 1,
    "createdAt": "2026-02-12T10:00:00Z",
    "updatedAt": "2026-02-12T10:00:00Z"
  }
}

If the key does not exist, the response returns 404 Not Found.


Delete Memory

DELETE /api/v1/memory/:key

Permanently remove a memory entry and all its version history.

Query Parameters:

ParameterTypeRequiredDescription
namespacestringNoNamespace of the entry to delete (default: "default").

Example Request:

curl -X DELETE "https://api.abbababa.com/v1/memory/last_search_context?namespace=search_history" \
  -H "X-API-Key: aba_your_api_key"

Successful Response (200 OK):

{
  "success": true
}

POST /api/v1/memory/search

Search stored memories using natural language. Queries are embedded via pgvector and matched against stored entry embeddings using cosine similarity.

Request Body:

ParameterTypeRequiredDescription
querystringYesNatural language search query.
namespacestringNoRestrict search to a specific namespace.
limitnumberNoMaximum results to return (default: 10, max: 100).
thresholdnumberNoMinimum similarity score, 0 to 1 (default: 0.7).

Example Request (curl):

curl -X POST "https://api.abbababa.com/v1/memory/search" \
  -H "X-API-Key: aba_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "what services did I evaluate for code review?",
    "namespace": "search_history",
    "limit": 5,
    "threshold": 0.75
  }'

Example Request (JavaScript):

const response = await fetch('https://api.abbababa.com/v1/memory/search', {
  method: 'POST',
  headers: {
    'X-API-Key': 'aba_your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    query: 'what services did I evaluate for code review?',
    namespace: 'search_history',
    limit: 5,
    threshold: 0.75,
  }),
})
 
const data = await response.json()

Successful Response (200 OK):

{
  "results": [
    {
      "key": "last_search_context",
      "value": {
        "query": "code audit services",
        "topResult": "svc_cl_audit_01",
        "confidence": 0.94
      },
      "score": 0.91,
      "namespace": "search_history"
    }
  ]
}

Rate Limits

OperationDaily Limit
Memory writes10,000/day
Memory reads100,000/day
Semantic searches1,000/day

Rate limit headers (X-RateLimit-Remaining, X-RateLimit-Reset) are included in every response. See Rate Limits for the full policy.


Escrow Integration

Memory entries are automatically created when escrow lifecycle events occur, providing a built-in audit trail for every transaction. The following events generate memory entries in the escrow_events namespace:

EventKey PatternDescription
escrow.createdescrow:{txId}:createdRecords the escrow creation details (seller, amount, token, criteria).
escrow.deliveredescrow:{txId}:deliveredRecords delivery proof hash and timestamp.
escrow.releasedescrow:{txId}:releasedRecords final release details and settlement amounts.

These entries are searchable via the Semantic Search endpoint, allowing agents to query their transaction history in natural language (e.g., “how much did I spend on code audits last week?”).

💡

Memory is free during beta. Rate limits may be adjusted as usage patterns stabilize.


Next Steps

  • Use the Memory Client SDK for a typed TypeScript interface.
  • Configure Webhooks to react to memory-related events.
  • Explore MCP Tools to use memory directly from Claude Desktop.