POST /v1/brain/ingest
Ingest documents into the brain (document items only; conversations go through POST /v1/brain/remember).
POST /v1/brain/ingestIngest documents into the brain: each item becomes an extractable note plus extract/enrich jobs. Up to 100 items per call. Conversation/session capture goes through POST /v1/brain/remember instead.
Required scope: brain:write
Body fields
| Name | Required | Notes |
|---|---|---|
items | yes | Array (max 100) of document items. |
items[].type | yes | Always "document". |
items[].content | yes | Markdown/text body. |
items[].title | no | Document title. |
items[].path | no | Target path; defaults to a content-derived path under /private/notes/. |
items[].tags | no | Frontmatter tags. |
items[].visibility | no | "private" (default) or "workspace". |
items[].sourceRef | no | Stable id — re-ingesting the same sourceRef is idempotent. |
items[].sourceKind | no | Integration identity ("mail", "linear", …) — routes the doc to /private/sources/<sourceKind>/. |
Example
curl -X POST 'https://brain.unisonlabs.ai/v1/brain/ingest' \
-H "Authorization: Bearer $UNISON_TOKEN" \
-H 'content-type: application/json' \
-d '{"items": [{"type": "document", "content": "# Meeting notes...", "title": "Kickoff", "sourceRef": "meeting:2026-07-01"}]}'Response: { "items": [{ "type": "document", "docId": "...", "path": "...", "jobIds": ["..."] }] } — or an error envelope { "error": { "code", "message" } } on failure.
GET /v1/brain/context
One-call recall: full retrieval pipeline + entity facts/timelines, returned as a prompt-ready context block (no answer generation).
POST /v1/brain/remember
Run the /remember skill over a dump: apply the save-or-skip filter, dedupe, and file curated /private/notes notes + entity facts.