Endpoint
Authentication
Headers
| Header | Required | Notes |
|---|---|---|
Authorization | Yes | ApiKey mem_... |
Content-Type | Yes | application/json |
Idempotency-Key | No | Replays the same queued response for duplicate writes |
Request body
Schema
| Field | Type | Required | Notes |
|---|---|---|---|
external_user_id | string | Yes | End-user identifier inside your tenant |
agent_id | string | null | No | Optional agent identifier |
messages | ConversationMessage[] | Yes | At least one message |
metadata | object | No | Arbitrary JSON object |
ConversationMessage
| Field | Type | Required |
|---|---|---|
role | "user" | "assistant" | "system" | Yes |
content | string | Yes |
Response headers
| Header | Meaning |
|---|---|
X-MemoryOS-Quota-Mode | Current tenant mode: FULL, PASSTHROUGH, DEGRADED_RETRIEVE, or BLOCKED |
X-MemoryOS-Budget-Remaining | Remaining quota percentage as a decimal string |
X-MemoryOS-Quota-Reset | Next reset timestamp, if set |
X-MemoryOS-Circuit-Status | Platform dependency status |
X-MemoryOS-Processing | normal or delayed |
Response: queued
Response: blocked by the quality gate
Thestatus value is usually the layer that blocked the request.
Example: L2
status values:
L1L2L3L4blocked(internal gate fallback)
Nothing to extract
Some conversations pass the quality gate but contain no durable user memory. Examples:- greetings
- acknowledgements
- one-word replies
- off-topic questions
result.nothing_to_extract / result.nothingToExtract.
add() still uses this same endpoint. Domain-specific extraction runs internally after the general memory path.
Response: passthrough
When the tenant is in passthrough mode, MemoryOS accepts the call path but does not persist a memory write.Idempotency-Key
UseIdempotency-Key when your application may retry the same write request.
Example: