Docs

A current mnemonic in three calls

Framework snippets over generic HTTP. Base URL https://api.neemel.com. Keys start with nm_live_ or nm_test_.

Quickstart

pip install neemel

from neemel import Client

client = Client(api_key="nm_live_7c91e4a0b2f65d18c3a9e80d")

client.memories.add(
    user_id="usr_mira",
    agent_id="agt_desk",
    text="Prefers concise replies. Allergic to shellfish.",
)

packet = client.memories.search(
    user_id="usr_mira",
    query="dietary constraints",
    limit=5,
    include_context=True,
)
print(packet.context)

Auth

Send the project key as a Bearer token. Rotate keys in the console. Test keys write only to sandbox graphs.

Authorization: Bearer nm_live_7c91e4a0b2f65d18c3a9e80d
Content-Type: application/json
X-Neemel-Project: prj_northline

Add

POST a message, a tool result, or a typed fact. Extraction writes graph nodes and embeddings before the response returns.

POST /v1/memories

{
  "user_id": "usr_mira",
  "agent_id": "agt_desk",
  "session_id": "ses_2026_0813_09",
  "text": "Mira travels with a gluten-free kitchen kit and skips shellfish.",
  "metadata": {
    "source": "onboarding_chat",
    "locale": "en-IN"
  }
}

{
  "id": "mem_0f2a91c4",
  "status": "written",
  "entities": ["Mira Kade", "shellfish", "gluten-free kit"],
  "scope": "user",
  "created_at": "2026-08-13T10:41:12Z"
}

Filters

Narrow by entity, time, and metadata. Temporal edges keep retired facts in history while search prefers current nodes.

POST /v1/memories/search

{
  "user_id": "usr_mira",
  "query": "travel plans",
  "filters": {
    "entity": "itinerary",
    "status": "current",
    "updated_after": "2026-06-01T00:00:00Z"
  }
}

User, agent, and session scopes

user survives every thread. session dies with the conversation. agent is shared inside a crew.

Writes name a scope. Search can ask for one scope or a mix. Multi-agent crews write under agent tags so a reviewer and a planner keep separate working notes.

Deletion and export

Patch when the world changes. Delete on request. Export when the user asks to leave.

PATCH /v1/memories/mem_18c1aa07
{ "text": "Prefers concise replies except for legal summaries." }

DELETE /v1/memories/mem_18c1aa07
{ "status": "deleted", "id": "mem_18c1aa07" }

POST /v1/users/usr_mira/export
{
  "format": "jsonl",
  "include_retired": true,
  "download_url": "https://exports.neemel.com/exp_9d22.jsonl",
  "expires_at": "2026-08-14T10:41:12Z"
}

API

All routes are HTTPS JSON. Idempotency keys are optional on POST via header Idempotency-Key.

POST   /v1/memories
POST   /v1/memories/search
PATCH  /v1/memories/{id}
DELETE /v1/memories/{id}
POST   /v1/users/{id}/export

Errors

{
  "error": {
    "code": "scope_forbidden",
    "message": "agent agt_review cannot write user-scoped memories",
    "request_id": "req_e31c"
  }
}

Status

Public board for 13 August 2026, 11:00 IST. All green.

US East add APIoperational
US East searchoperational · p95 38ms
EU West searchoperational · p95 41ms
Graph compileroperational
Webhooksoperational

Last incident: 12 June 2026, 14 minutes of elevated search latency in EU West after a vector index rebuild. No data loss.

Contributing

Open a pull request against the public SDK. Tests live in tests/memory_roundtrip.py. Rahul Iyer reviews graph-store changes at [email protected].

Local store: SQLite for development, Postgres when you pin a VPC path. Cloud remains the operated graph.