Give one user of your application a permanent, isolated memory. Plain HTTPS, no SDK, no new dependencies.
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:
Authorization: Bearer lm_sk_your_key_here
curl -X POST https://api.leapmemory.com/v1/tenants \
-H "Authorization: Bearer $LM_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id": "user_482"}'
{
"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.
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."
}'
{
"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"
}
}
"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.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?"}'
{
"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.
curl https://api.leapmemory.com/v1/tenants/user_482/briefing \ -H "Authorization: Bearer $LM_KEY"
{
"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.
When a user leaves, deletion is one call, and it is structural:
curl -X DELETE "https://api.leapmemory.com/v1/tenants/user_482?hard=true" \ -H "Authorization: Bearer $LM_KEY"
{
"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.