A Walkthrough
One path through Everything Memory, end to end: connect, store, find, read, update, adjust, correct, connect, ask by time, and delete. Each step shows the call, the reply, what it shows, and where to read more.
This walkthrough runs on a new stack with authentication off, as the shipped template sets it. Every call names the agent profile restricted, which a new engine provides: it reads every lane and writes the lane default. Ids in the replies are examples; yours differ. Replies are trimmed to the fields that matter.
1. Connect
The person setting up points the agent's MCP client at the API service. See connecting clients.
MCP server URL: http://localhost:8765/mcp
On connecting, the agent receives the engine's instructions and the description of each of the ten tools. The skills that teach an agent these tasks are installed by the operator — see Agent Skills. It then asks what it may write:
e_system {"action": "get_profile", "agent_profile": "restricted"}
{
"profile": "restricted",
"can_reassign": false,
"write_lanes": [{"lane": "default", "lane_uuid": "lane_…", "source_types": ["conversational", "documentary"]}],
"read_lanes": [{"lane": "default", "lane_uuid": "lane_…"}]
}
The agent may write the open lane default, with either builtin source type and any labels. See agent profiles and source types.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/system" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "get_profile", "agent_profile": "restricted"}'
2. Store a record
e_ingest {"content": "Acme's renewal is due on 1 March 2027. Sarah owns it.", "source_type": "documentary", "properties": ["org:Acme", "person:Sarah", "topic:renewal"], "agent_profile": "restricted"}
{"sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "status": "accepted", "content_hash": "…", "ingested_at": "2026-10-30T15:02:11Z"}
The record is stored with three edge properties. Its tags and embedding follow in the background. See storing a record.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/ingest" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Acme'"'"'s renewal is due on 1 March 2027. Sarah owns it.", "source_type": "documentary", "properties": ["org:Acme", "person:Sarah", "topic:renewal"], "agent_profile": "restricted"}'
3. Find it by meaning
e_gather {"action": "find", "query": "who owns the Acme renewal", "agent_profile": "restricted"}
{"srs": [{"sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "content": "Acme's renewal is due on 1 March 2027. Sarah owns it.", "distance": 0.24}], "page": 1, "total_pages": 1, "has_more": false}
Search found the record from a question that shares few of its words. See search.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/gather" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "find", "query": "who owns the Acme renewal", "agent_profile": "restricted"}'
4. Find it by edge property
e_gather {"action": "intersect", "match": ["org:Acme", "topic:renewal"], "agent_profile": "restricted"}
The reply lists every record that carries both edge properties — this one among them. See edge properties.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/gather" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "intersect", "match": ["org:Acme", "topic:renewal"], "agent_profile": "restricted"}'
5. Read it
e_read {"sr_ids": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1"], "agent_profile": "restricted"}
{"srs": [{"sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "content": "Acme's renewal is due on 1 March 2027. Sarah owns it.", "lane": "default", "source_type": "documentary", "authority_level": "documentary", "source_system": "…", "ingested_at": "2026-10-30T15:02:11Z", "version": 0, "properties": ["org:Acme", "person:Sarah", "topic:renewal"]}]}
The full record, with its provenance and authority. See record lookup.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/read" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sr_ids": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1"], "agent_profile": "restricted"}'
6. Update it
A separate record keeps the renewal plan, and the plan moves on.
e_ingest {"content": "Renewal plan: Sarah drafts by 2026-11-14.", "properties": ["org:Acme", "topic:renewal"], "agent_profile": "restricted"}
e_update {"sr_id": "sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98", "content": "Renewal plan: John drafts by 2026-11-14; Sarah signs by 2026-11-28.", "note": "John took over the draft.", "agent_profile": "restricted"}
{"sr_id": "sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98", "version": 1, "event_id": "…", "updated_at": "…"}
Reads now return version 1. The first version is kept: e_audit inspect on the update's event returns from (version 0) and to (version 1). See updating a record.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/ingest" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Renewal plan: Sarah drafts by 2026-11-14.", "properties": ["org:Acme", "topic:renewal"], "agent_profile": "restricted"}'
curl -s -X POST "$EMEMORY_URL/api/v2/update" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sr_id": "sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98", "content": "Renewal plan: John drafts by 2026-11-14; Sarah signs by 2026-11-28.", "note": "John took over the draft.", "agent_profile": "restricted"}'
7. Adjust a fact
The due date moves. The first record was right when written, so the agent adds a record that adjusts it.
e_ingest {"content": "Acme's renewal moved to 1 April 2027 at Acme's request.", "properties": ["org:Acme", "topic:renewal"], "adjusts": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1"], "adjustment_label": "date moved", "agent_profile": "restricted"}
{"sr_id": "sr_4d91…", "status": "accepted", "adjustment": {"adjustment_token": "date_moved_9c2e…", "adjusts_applied": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1"]}}
The two records are linked; e_read on either lists the other under adjustments. See evolving a fact.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/ingest" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Acme'"'"'s renewal moved to 1 April 2027 at Acme'"'"'s request.", "properties": ["org:Acme", "topic:renewal"], "adjusts": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1"], "adjustment_label": "date moved", "agent_profile": "restricted"}'
8. Correct a wrong record
Sarah never owned the renewal: John does.
e_correct {"action": "create", "sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "content": "John owns the Acme renewal, not Sarah.", "comment": "Per the account plan.", "agent_profile": "restricted"}
{"correction_id": "cor_1e6b…", "version": 1, "status": "active", "sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "comment": "Per the account plan."}
Now e_read of the record returns, beside the unchanged content:
{"corrections": [{"correction_id": "cor_1e6b…", "content": "John owns the Acme renewal, not Sarah.", "authority": "human_correction", "status": "active"}]}
and search flags it has_correction. See correcting a record.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/correct" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "create", "sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "content": "John owns the Acme renewal, not Sarah.", "comment": "Per the account plan.", "agent_profile": "restricted"}'
9. Connect two records and traverse
e_property {"action": "connect", "sr_id": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"], "hint": "plan_for", "agent_profile": "restricted"}
e_gather {"action": "traverse", "sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "agent_profile": "restricted"}
The traverse returns the plan, the adjusting record, and the records that share org:Acme or topic:renewal. See connecting records.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/property" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "connect", "sr_id": ["sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"], "hint": "plan_for", "agent_profile": "restricted"}'
curl -s -X POST "$EMEMORY_URL/api/v2/gather" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "traverse", "sr_id": "sr_7b22e4d1a90c3f5812ab94c6e0d3f7a1", "agent_profile": "restricted"}'
10. Ask by time
e_timeline {"action": "intersect", "match": ["org:Acme"], "start_date": "2027-03-01", "end_date": "2027-04-30T23:59:59Z", "order_by": "content_time_asc", "agent_profile": "restricted"}
The reply lists the records about Acme whose content names a date in March or April 2027, earliest first: the original due date, then the moved one. See temporal retrieval.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/timeline" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "intersect", "match": ["org:Acme"], "start_date": "2027-03-01", "end_date": "2027-04-30T23:59:59Z", "order_by": "content_time_asc", "agent_profile": "restricted"}'
11. Delete
e_system {"action": "delete", "sr_ids": ["sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"], "agent_profile": "restricted"}
e_read {"sr_ids": ["sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"], "agent_profile": "restricted"}
{"srs": [], "not_found": ["sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"]}
The record has left retrieval. Its versions and its audit events remain: e_audit trace still answers for it, and e_system undelete brings it back. Record deletes are off as shipped; this step needs the engine's owner to have turned on deletions_enabled — otherwise the delete is refused, naming the switch. See deleting a record.
REST equivalent
curl -s -X POST "$EMEMORY_URL/api/v2/delete" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sr_ids": ["sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"], "agent_profile": "restricted"}'
curl -s -X POST "$EMEMORY_URL/api/v2/read" \
-H "Authorization: Bearer $EMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sr_ids": ["sr_8b2d77e1c05a9e42a7c3f1d6e5b40c98"], "agent_profile": "restricted"}'