Ingest many memories in a single request.
POST /v1/bulk-remember
Ingest many text memories in one round trip. Each item is processed independently and reported with its own status, so a partial failure does not roll back successful items.
For single-item ingest, use POST /v1/remember.
Request
POST /v1/bulk-remember
Content-Type: application/json
Authorization: Bearer <api-key>
{
"tenant_id": "engineering",
"memories": [
{ "content": "Standup: completed auth refactor, starting rate limiter." },
{ "content": "Standup: shipped CockroachDB migration; monitoring p99." },
{ "content": "Decision: gRPC for internal APIs, REST for public.",
"metadata": { "channel": "#decisions" },
"scope": "decisions" }
]
}
| Field | Type | Required | Description |
|---|---|---|---|
| tenant_id | string | No | Sub-tenant scope for all items |
| memories[] | array | Yes | Items to ingest |
| memories[].content | string | Yes | Memory content |
| memories[].scope | string | No | Per-item scope qualifier |
| memories[].metadata | object | No | Per-item string→string metadata |
| memories[].event_time | integer | No | Override event time (microseconds since epoch) |
Response
{
"stored": 3,
"failed": 0,
"results": [
{ "event_id": "01912a3b-…-1" },
{ "event_id": "01912a3b-…-2" },
{ "event_id": "01912a3b-…-3" }
]
}
Partial failure:
{
"stored": 2,
"failed": 1,
"results": [
{ "event_id": "01912a3b-…-1" },
{ "error": "content must not be empty" },
{ "event_id": "01912a3b-…-3" }
]
}
| Field | Type | Description |
|---|---|---|
| stored | integer | Count of successfully stored items |
| failed | integer | Count of failed items |
| results[] | array | Per-item result, parallel to the request array |
| results[].event_id | string? | UUID of the stored event (present on success) |
| results[].error | string? | Failure message (present on failure) |