Capture

Capture API

Capture is the private side of Rasepi: personal spaces of notes that belong to one user, organized into a tree, optionally shared, and summarized by AI. Notes are private by default and encrypted at the application layer. Base URL /personal.

Overview

Each user has their own space. Notes form a tree (a note can have a parent), are private unless explicitly shared with users or groups, and never appear in tenant-wide search. AI summarization runs against a per-user quota, separate from the workspace AI budget.

Authentication

Capture endpoints are user-scoped: they act as the signed-in user, so they use a normal user session or OAuth access token (not a machine API key). Every note is owned by the authenticated user.

Authorization: Bearer <user access token>

See the Platform API for the shared auth flow.

GET /personal/notes

The current user's own notes as a flat list; the client builds the tree from each note's parent.

GET /personal/notes

[
  { "id": "9b1c…", "title": "Standup notes", "parentId": null, "updatedAt": "2026-06-12T08:00:00Z" },
  { "id": "4a2e…", "title": "Q3 ideas", "parentId": "9b1c…", "updatedAt": "2026-06-11T17:20:00Z" }
]

GET /personal/notes/{id}

One note with its full content. Returns 404 if the note does not exist or is not yours.

POST /personal/notes

Create a private note. Set parentId to nest it under another note.

POST /personal/notes

{
  "title": "Standup notes",
  "content": "Discussed the release timeline…",
  "parentId": null
}

PUT /personal/notes/{id}

Update a note's title and/or content. Owner only.

DELETE /personal/notes/{id}

Delete a note. Owner only. Returns 204 No Content.

POST /personal/notes/{id}/summarize

AI-summarize a note. Counts against the per-user AI quota; returns 409 if the note is empty or the quota is exhausted.

POST /personal/notes/9b1c…/summarize

{ "summary": "Three release blockers and an owner for each." }

GET /personal/shared

Notes other users have shared with the current user.

GET /personal/groups

Tenant groups the user can share notes with. Group names only; tenant-scoped.

PUT /personal/notes/{id}/shares

Replace the share list for a note. Owner only. Send the full desired set of share targets (users and/or groups); omitted targets are unshared.

PUT /personal/notes/9b1c…/shares

[
  { "userId": "7f3a…" },
  { "groupId": "2d4b…" }
]

GET /personal/quota

The current user's personal AI usage for the period — how much summarization budget remains.