Open app

Quickstart: first memory in 5 minutes.

Give one user of your application a permanent, isolated memory. Plain HTTPS, no SDK, no new dependencies.

Want Claude to remember you, personally? That takes no code at all. See Connect Claude. This guide is for developers.
Get your API key
Sign up as a developer account. Your admin key appears once, at signup.

Sign up at app.leapmemory.com. Copy the admin API key when it is shown; it cannot be shown again. You can create more keys later in the dashboard under API keys, with three roles: admin (everything), ingest (save only), and recall (read only).

Every request authenticates with the same header:

HTTP
Authorization: Bearer lm_sk_your_key_here

Create a tenant
One tenant per end user. Each gets physically separate databases: no shared tables, no shared credentials.
Shell
curl -X POST https://api.leapmemory.com/v1/tenants \
  -H "Authorization: Bearer $LM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tenant_id": "user_482"}'
Response · 201
{
  "success": true,
  "http_status": 201,
  "code": "created",
  "data": {
    "tenant_id": "user_482",
    "status": "ready",
    "created_at": "2026-07-10T09:39:11.548594+00:00"
  }
}

Every response uses this envelope: success, http_status, code, and either data or message. This call requires an admin key, and the tenant is ready the moment it returns.


Save a memory
Send conversation turns as they happen. One turn in, one memory out.
Shell
curl -X POST https://api.leapmemory.com/v1/tenants/user_482/turns \
  -H "Authorization: Bearer $LM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "user",
    "content": "Sam works at Beacon. He owns the auth service and pairs with Aisha."
  }'
Response · 201
{
  "success": true,
  "http_status": 201,
  "code": "accepted",
  "data": {
    "turn_id": "6a7892b0-46e9-454f-a225-fe321d006fb5",
    "role": "user",
    "speaker_id": "user",
    "status": "pending",
    "ts": "2026-07-10T09:39:14.949785Z"
  }
}
Note "code": "accepted" and "status": "pending". Ingest is asynchronous: your exact words are stored the moment the call returns, and extraction (the entities, relationships, and meaning) runs in the background, typically completing within seconds. Nothing is lost while it forms.

Recall it
Ask in natural language. Recall is free and never consumes credits.
Shell
curl -X POST https://api.leapmemory.com/v1/tenants/user_482/recall \
  -H "Authorization: Bearer $LM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "where does Sam work?"}'
Response · 200
{
  "success": true,
  "http_status": 200,
  "code": "ok",
  "data": {
    "facts": [
      {
        "subject": "sam",
        "verb": "works-at",
        "object": "beacon",
        "type_name": "works-at",
        "confidence": 0.99,
        "mention_count": 1,
        "last_mentioned": "2026-07-10T09:39:23.295529+00:00",
        "sentence": "Sam works at Beacon."
      },
      {
        "subject": "sam",
        "verb": "owns",
        "object": "auth service",
        "type_name": "owns",
        "confidence": 0.95,
        "mention_count": 1,
        "last_mentioned": "2026-07-10T09:39:23.305236+00:00",
        "sentence": "Sam owns the auth service."
      },
      {
        "subject": "sam",
        "verb": "pairs-with",
        "object": "aisha",
        "type_name": "pairs-with",
        "confidence": 0.95,
        "mention_count": 1,
        "last_mentioned": "2026-07-10T09:39:23.312420+00:00",
        "sentence": "Sam pairs with Aisha."
      }
    ],
    "chunks": [
      {
        "chunk_id": "6a7892b0-46e9-454f-a225-fe321d006fb5:0",
        "turn_id": "6a7892b0-46e9-454f-a225-fe321d006fb5",
        "content": "Sam works at Beacon. He owns the auth service and pairs with Aisha.",
        "role": "user",
        "speaker_id": "user",
        "score": 0.9945,
        "importance": 0.5,
        "created_at": "2026-07-10T09:39:23.319353Z"
      }
    ],
    "anchors_found": [
      {
        "name": "sam",
        "type_name": "person",
        "count": 1,
        "span_start": 11,
        "span_end": 14
      }
    ]
  }
}

Three things came back. Facts are the distilled statements with confidence and provenance: every fact carries the exact sentence it came from. Chunks are the verbatim words as they were said, ranked by relevance score. Anchors are the entities detected in your query that steered retrieval.


Get the briefing
Recall answers questions. The briefing needs none: it is who this user is, before the conversation starts.
Shell
curl https://api.leapmemory.com/v1/tenants/user_482/briefing \
  -H "Authorization: Bearer $LM_KEY"
Response · 200
{
  "success": true,
  "http_status": 200,
  "code": "ok",
  "data": {
    "text": "- Sam works at Beacon.\n- Sam owns the auth service.\n- Sam pairs with Aisha.",
    "facts_included": 3
  }
}

One ready-to-inject text block, the user's own facts first, computed live from the memory so it can never go stale. Load it once when a session opens and place it in your model's system context as quiet background; let recall handle everything specific from there. A brand-new tenant returns an empty text: inject nothing, and the conversation starts like meeting someone new.


What you built
One isolated tenant, one permanent memory, recalled with provenance, briefed at a glance, in five calls.

When a user leaves, deletion is one call, and it is structural:

Shell
curl -X DELETE "https://api.leapmemory.com/v1/tenants/user_482?hard=true" \
  -H "Authorization: Bearer $LM_KEY"
Response · 200
{
  "success": true,
  "http_status": 200,
  "code": "ok",
  "data": { "deleted": true, "tenant_id": "user_482" }
}

Their databases are dropped entirely, not scanned for rows. Omit ?hard=true for a soft delete that can be restored.