Skip to main content
POST
https://api.memoclaw.com
/
v1
/
migrate
curl -X POST https://api.memoclaw.com/v1/migrate \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "filename": "2026-01-30.md",
        "content": "## Project Setup\nDecided to use PostgreSQL with pgvector.\n\n## Config\nUser prefers dark mode."
      }
    ]
  }'
{
  "files_processed": 1,
  "memories_created": 2,
  "memories_deduplicated": 0
}
Parses markdown files, splits by ## headers, auto-detects importance and memory type, and stores each section as a separate memory. Idempotent — duplicate content is deduplicated via content hashing.

Request Body

files
array
required
Array of file objects to import. Maximum 50 files per request.

Response

files_processed
integer
Number of files successfully processed.
memories_created
integer
Number of new memories stored.
memories_deduplicated
integer
Number of memories skipped due to duplicate content.
errors
array
Present only if some files failed. Each entry has filename and error.
curl -X POST https://api.memoclaw.com/v1/migrate \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "filename": "2026-01-30.md",
        "content": "## Project Setup\nDecided to use PostgreSQL with pgvector.\n\n## Config\nUser prefers dark mode."
      }
    ]
  }'
{
  "files_processed": 1,
  "memories_created": 2,
  "memories_deduplicated": 0
}

How parsing works

  1. Each file is split on ## headers
  2. Each section becomes one memory with:
    • content: header + body text (max 8,000 chars)
    • importance: 0.6–0.9 based on keyword heuristics (decisions=0.9, preferences=0.8, etc.)
    • memory_type: auto-detected (decision, preference, correction, project, observation, general)
    • tags: header words + date:YYYY-MM-DD from filename + migrated + openclaw
  3. Content is SHA-256 hashed for intra-batch and cross-request deduplication
  4. Files without ## headers are stored as a single memory

Pricing

EndpointCost
POST /v1/migrate$0.01 per request