AI makes mistakes! Undisk makes recovery instant: every write is versioned, every file is reversible.
See it heal →

Error Responses

CodeMeaning
PERMISSION_DENIEDWrite/delete blocked by a policy ACL. Includes the policy name and rule.
STORAGE_LIMITWorkspace storage cap reached. Includes current usage and upgrade URL.
RATE_LIMITEDDaily or per-minute op cap exceeded. Includes retry_after_seconds. You MUST wait the specified seconds before retrying — do not instantly retry.
FILE_TOO_LARGEFile exceeds max size (10 MB Free/Pro, 100 MB Team; platform limit 256 MB).
VERSION_EXPIREDRequested version purged per retention policy.
VERSION_NOT_FOUNDInvalid version ID for the specified file.
WORKSPACE_NOT_FOUNDWorkspace ID doesn’t match any active workspace.
INTERNAL_ERRORServer error. All committed writes are safe.

FAQ & Behavior Details

What counts as an operation? Every MCP tool call counts as one operation. upload_session action: “append” counts as one op per chunk. list_files, search_files, and read_file each count as one op. WebSocket batch requests count as N ops (one per sub-request). Do deleted versions count toward storage? Yes. All retained versions count toward your storage quota. Content is SHA-256 deduplicated within each workspace, so identical content only counts once regardless of how many versions reference it. How do versions work across moves and deletes?
  • After a move: A new version is created at the new path (operation: "move", metadata: { movedFrom: "old/path" }). A tombstone version is created at the old path (metadata: { movedTo: "new/path" }). Call list_versions on the new path to see the full history including the move event.
  • After a delete: A tombstone version is created at the file’s path (operation: "delete"). Call list_versions on the original path — the delete event and all prior versions remain visible.
  • Restoring a deleted file: Call restore_version with the original path and a version ID from before the delete. This creates a new version (operation: "restore") — it does not revert or remove the delete record. Version history is append-only.
  • Restoring a moved file: Call restore_version with the new path and the version ID you want to restore. You cannot restore across paths — restore_version requires the version ID to belong to the specified path’s history.
  • Version operations are always INSERT-only — no version record is ever modified or deleted. Every restore, move, or delete creates a new version entry, preserving the full audit trail.
Does restore_version re-run policy checks? Path ACLs are enforced (the restoring agent must have write access to the target path). Content moderation is not re-run on restored content. Secret scanning is not re-run — previously stored content is trusted. Extension rules and size limits are enforced against the restored content. What does browser_url point to? An authenticated URL that requires an active session (login via the web dashboard). It points to the latest live version of the file and updates automatically after moves. After deletion, the URL shows a “file deleted” state with restore option. Pagination limits: list_files returns up to 1,000 entries per call. search_files returns up to 100 matches. For larger workspaces, use path-scoped calls (e.g., list_files({ path: "subdir/" })) to stay within limits.
Compliance Documentation · Privacy Policy · Terms

Fast triage flow

  1. Capture error code and request context.
  2. Confirm auth header shape and workspace routing inputs.
  3. Verify scope/plan limits for the attempted operation.
  4. Retry only for transient classes (429/5xx/network).