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)
npm install @neemel/sdk
import { Neemel } from "@neemel/sdk";
const client = new Neemel({ apiKey: "nm_live_7c91e4a0b2f65d18c3a9e80d" });
await client.memories.add({
userId: "usr_mira",
agentId: "agt_desk",
text: "Prefers concise replies. Allergic to shellfish.",
});
const packet = await client.memories.search({
userId: "usr_mira",
query: "dietary constraints",
limit: 5,
includeContext: true,
});
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"
}
Search
Search returns ranked memories plus an optional context block sized for the turn.
POST /v1/memories/search
{
"user_id": "usr_mira",
"query": "dietary constraints for dinner",
"limit": 3,
"include_context": true
}
{
"query_id": "qry_44b1",
"memories": [
{
"id": "mem_0f2a91c4",
"text": "Allergic to shellfish. Travels with a gluten-free kitchen kit.",
"score": 0.94,
"scope": "user",
"updated_at": "2026-08-13T10:41:12Z"
},
{
"id": "mem_18c1aa07",
"text": "Prefers concise replies.",
"score": 0.61,
"scope": "user",
"updated_at": "2026-07-02T08:11:40Z"
}
],
"context": "User Mira Kade: allergic to shellfish; gluten-free kitchen kit when traveling. Prefers concise replies."
}
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.
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.