https://api.memoryo.dev by default. Do not pass a base URL for the hosted service.
Clients
- Tenant-scoped client:
MemoryOS - Private-beta cross-agent client:
UniversalMemoryOS(disabled by default)
MemoryOS for normal workspace memory inside your tenant. Use UniversalMemoryOS only in an explicitly enabled private-beta deployment after a user grants your global agent access.
Tenant-scoped memory
This path uses your application’s existing user identity. It does not require Memory Passport, a user consent redirect, or theUniversalMemoryOS client.
First integration: simple mode
add()
add() queues a conversation for extraction. It returns quickly; extraction runs in the background.
externalTurnId for each persisted
turn. It is a stable identifier from your chat system, not a claim created by
the model. Use sourceKind when the role alone is insufficient to describe the
origin, such as tool_output or fetched_document. Messages are limited to 64
per request and 16,000 characters each.
Explicit assistant proposals
Use the seventhadd() argument, conversationId, consistently for one chat.
Only mark assistant turns deliberately presented as memory proposals.
The marker requires sourceKind: "assistant_output" and a proposedMemory
whose exact claim appears in the user-visible assistant text. It never grants
user authority or proves consent. Registration is tenant-scoped, not universal.
proposalIds and operationalMetrics.queue_wait_ms when
available. Proposal IDs are not stored memory IDs. When confirmation is
enabled, submit the proposal turn and later direct user reply with the same
conversationId and stable turn IDs. MemoryOS binds the reply to the immutable
proposal and stores the registered claim only after deterministic evidence
checks accept it; model confidence never grants authority.
For multi-service companies: source-aware mode
Pass the optional fifth argument when multiple backend services can write memory for the same user. UseMemoryOS.source(...) so your app does not have to manually generate every ID while testing.
billing-service in the Tenant Dashboard before sending it as source.service; unknown or inactive service keys are rejected. For production, bind a dedicated API key to the writer so its authority is explicit.
Only use source-aware mode for authenticated backend observations. It can treat
a registered service’s declarative assistant-role message as authoritative; it
must not be used to promote an ordinary chatbot answer into user memory.
Parameters
Return fields
Check extraction job status
UsegetJobStatus() for one check or waitForJob() when setup, tests, or a workflow must confirm persistence before continuing.
pendingCandidatesBuffered > 0 means MemoryOS kept a weak signal for reinforcement instead of dropping it. Normal user-facing requests should queue add() without waiting.
Use createdMemoryIds when you need the exact records created by this job.
get()
Parameters
Return fields
Each
MemoryItem also includes sourceEventId and provenance when available.
Resolve a clarification in the same chat
feedback()
Use feedback after retrieval to tell MemoryOS whether the memory helped. This improves lifecycle scoring and can queue retrospective extraction after user corrections.
correctionJobId is present, MemoryOS queued an async retrospective extraction pass. Do not block your user flow while that job runs.
Domain schemas
Domain schemas are configured on the tenant, not in SDK code.
Your code stays the same across domain modes. For Support, your own backend tools still provide live truth such as order status, invoice status, refunds, or ticket updates.
Domain profile helpers
For domain-aware tenants, normalget() already includes domain-aware context. Use profile helpers only when your product needs structured UI data.
Other tenant methods
delete()
list()
export()
export() maps to GET /v1/users/{external_user_id}/export. It returns the tenant and proxy-user IDs plus that user’s memories and complete version history.
UniversalMemoryOS
MemoryOS. It uses agent credentials and a user UUI token:
Authorization: ApiKey agent_sk_...X-MemoryOS-UUI: uui_...
UniversalMemoryOS.consentUrl()
null for the callback, MemoryOS shows a hosted completion page after approval.
Users can add or remove categories before approving.
universal.add()
universal.get()
Universal memory items retain
sourceEventId and provenance when the API returns them.