Back to documentation
Security
How Karchu isolates workspaces, controls access to documents and transactions, stores files, and keeps sensitive values out of logs.
Last updated 2026-09-11
Access control
- Every financial table is scoped to an organization and protected by row level policies enforced in the database, not only in the app
- API calls and agent tool calls run as the signed-in user, with the same policies applied
- An explicit organization id is checked against the caller's active memberships before any read
- Role hierarchy is enforced on membership changes: nobody can raise their own role or assign one above their own
- Viewer and analyst roles cannot write. Employee edits are limited to their own rows
Files
- Uploaded originals and processed representations are stored separately, in per organization paths
- Downloads use short lived signed URLs, not public object URLs
- Deleting a document removes its stored objects as well as its rows
Logging
- Full account numbers, full document contents, raw OCR output and credentials are never logged
- Account identifiers are masked for display and in stored error reports, for example 4821 shown as the last four digits
- Agent and assistant calls are recorded with the tool name, a trimmed argument summary, row count and duration
Audit trail
- Category, amount, date and merchant changes record the previous value, the new value, the user and the timestamp
- Document processing state changes are recorded with their stage and error
- Manual corrections are tracked separately from extracted values, so extraction accuracy stays measurable
The customer facing summary lives on the security page, and data handling is described in privacy.
Questions
- Can one workspace see another workspace's documents?
- No. Every table holding financial data is scoped to an organization and protected by row level policies, and stored files are namespaced per organization with signed, time limited access URLs.
- Are account numbers stored in full?
- Account identifiers are masked for display, shown as the last four digits, and full values are never written to application logs or error reports.
- Who can change a transaction?
- Role permissions decide it. Viewers and analysts cannot write. Every edit records the old value, the new value, who made it and when.